使用 -cloud 内核为小内存 VPS 升级最新 Debian

手上有一台 128M 内存的 VPS,想要升级到最新版 Debian,现在也就是代号为 Buster 的 Debian 10。说是 128M,实际上当然达不到。能跑的基本上只有代号为 Stretch 的 Debian 9,内核版本为 4.9。一旦升级到 Debian 10,或者只是升级 Linux 内核到跟 Debian 10 相同的 4.19,就无法开机。虽然由于 VNC 故障我看不到是什么原因,根据其他人的经验应该是内存不足。

直到有人安利 -cloud 内核,才成功让我升级到 Debian 10,正常开机。

-cloud 内核的包名是 linux-image-cloud-amd64,也就是说,我们从官方源安装就行:

apt update
apt install linux-image-cloud-amd64

从 Debian 9 升级到 10,网上有很多教程,会经历改源、dist-upgrade 和重启。需要在 dist-upgrade 之后,重启之前安装 -cloud 内核。一般情况下,包管理工具会自动执行指令,配置为首选启动内核,我们留意一下就行了。

如果需要更新的内核,则需要从 backports 源安装:

echo "deb http://deb.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/buster-backports.list #添加 buster-backports 源
apt update
apt -t buster-backports install linux-image-cloud-amd64

以上代码是以 Debian 10 (Buster) 为例的。如果是 Debian 9,则将上面的 buster 换为 stretch。注意,-cloud 内核是最近不久才引入的,如果想留在 Debian 9,必须从 stretch-backports 源安装,稳定版默认源(stretch)是没有的。

另一个要注意的点是,-cloud 内核当前仅有 amd64 也即 64 位架构的包,32 位不适用

官方软件包页面可以看到目前支持的源、对应的版本:

内核版本号软件包大小*安装后大小*
jessielinux-image-amd643.1633MB160MB
stretchlinux-image-amd644.937MB184MB
stretch-backportslinux-image-amd644.1945MB253MB
stretch-backportslinux-image-cloud-amd644.1915MB65MB
busterlinux-image-amd644.1946MB256MB
busterlinux-image-cloud-amd644.1915MB66MB
buster-backports**linux-image-amd645.347MB263MB
buster-backports**linux-image-cloud-amd645.315MB69MB

*取撰文时对应小版本内核包 kB 数值的近似。
**buster-backports 的包基本上跟随 bullseye 包的版本号,而 bullseye 即 Debian 11 并未冻结,未来包的版本号可能变更。

从上表可以看到,就大小来讲,-cloud 内核可谓轻量极了。5.3 的 -cloud 内核比 3.16 原版内核还要小,就算把安装后全部文件丢到内存都不怕,难怪可以在极小内存的 VPS 上启动。

那 -cloud 内核是什么呢?凭什么这么小呢?包页面对 linux-image-cloud-amd64 说明是:

This package depends on the latest Linux kernel and modules for use on Amazon EC2, Google Compute Engine and Microsoft Azure cloud platforms.

即是为这些云平台而优化的。这样好似会增加一些模块,裁剪的部分在哪?可以从 News from the Debian Cloud Team 中一探究竟:

A cloud-specific Linux package (linux-image-cloud) allowed us to disable features that are not relevant in cloud environments and enable what is really important. For example, features related to bluetooth and sound support are disabled and some drivers needed by the cloud providers are enabled. To illustrate that, Amazon EC2 uses Elastic Network Adapter (ENA) support and Intel Corporation 82599 Ethernet Controller Virtual Function, and Microsoft Azure uses Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function], all of them are enabled by default in linux-image-cloud package (and are not needed at all by regular Debian users).

大意是说,有些特性是云环境不需要的,像蓝牙、声音支持。看来,-cloud 内核剔除了这些无用模块(同时添加了几乎只有云平台会用到的驱动程序)。

这下可以放心用 -cloud 内核了。在 KVM 虚拟化的机器中,-cloud 内核表现良好,我甚至给 128MB 内存的 VPS 安装上了 5.3 内核。已测试不支持 VMware 虚拟化,会找不到根文件系统。

若无特别说明,本文系原创,遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议,转载文章请注明来自【闪星空间】,或链接上原文地址:http://shansing.com/read/486/

8 条评论

  1. lao.Huo lao.Huo

    哇,这也能在Shansing这里找到,shansing到底写了多少东西啊(

  2. Mo Mo

    请问安装cloud内核后无法通过ssh连接到主机,只能通过本机vnc进入系统,是什么原因?

    1. 通过 VNC 查看出什么情况呢?如果有报错就看报错信息。如果是停留在内核选择界面而没有倒计时,就去修改引导程序(如 grub)配置。

      1. Mo Mo

        vnc进了系统,发现没网络。连apt update都不行

        1. 可能是 -cloud 内核精简了所需的网卡驱动,还是用回原版内核吧。

          1. Mo Mo

            我三台主机,有两台安装cloud内核后正常使用没事,第三台装完重启就挂了。三台都是更新到最新版debian10后再安装的,按理说应该和系统是没关系啊,难道和商家那边的设置有关?

          2. Mo Mo

            有没有办法装上网卡驱动救?

            1. 没有研究过,可以试试自行编译内核。

发表评论»

NO SPAMS! 不要发垃圾评论哦!

表情