前言
本文主要如何安全地升级Ubuntu内核,以18.04 Server版为例纂写本教程。
我们先来了解一下什么是主线内核构建(Mainline Kernel Build)
Mainline Kernel Build是一个从kernel.org开发的一个vanilla内核,作为deb包打包。 Canonical Kernel Team构建和定制Ubuntu的内核源代码,并将其构建为.deb包,以便于apt包管理器进行安装。 只有在需要最新的内核功能的情况下才能使用Mainline内核,因为与Ubuntu一起运行的生产内核可能不太稳定。
我们可以从 Canonical Kernel Team Mainline Kernel Build官方网站查找需要的内核:
https://kernel.ubuntu.com/~kernel-ppa/mainline/
确认升级目标版本
确认升级目标版本
可以看出,目前Ubuntu最新的mainline内核版本为4.20.5和v5.0-rc2。确定升级内核的步聚
把当前系统所有软件包和内核升级到最新
zcwyou@ubuntu1804:~$ sudo apt update
已下载 61.7 MB,耗时 1分 13秒 (842 kB/s)
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
有 29 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
查询系统更新包
查询系统更新包
可以看出,有29个软件包需要升级。
查看哪些软件包需要升级,这个步聚非必要:
zcwyou@ubuntu1804:~$ sudo apt list --upgradable
开始升级系统所有的软件包,类似于windows系统更新。
zcwyou@ubuntu1804:~$ sudo apt upgrade -y
[sudo] password for zcwyou:
Reading package lists… Done
Building dependency tree
Reading state information… Done
Calculating upgrade… Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up Docker-ce (5:18.09.1~3-0~ubuntu-bionic) …
update-alternatives: warning: forcing reinstallation of alternative /usr/bin/dockerd-ce because link group dockerd is broken
系统更新
正在显示系统更新过程
重启服务器,既然已经决定要升级内核了,服务器应该可以重启吧?
zcwyou@ubuntu1804:~$ sudo reboot
重新登录系统,再次检查可升级包,并使用以下命令。
zcwyou@ubuntu1804:~$ sudo apt list --upgradeable
如果执行命令的结果为:Listing... Done,就说明系统组件已经是最新的,没有需要更新的软件。
检查当前内核版本
zcwyou@ubuntu1804:~$ uname -r
4.15.0-43-generic
可以看出当前的内核版本为4.15.0-43-generic
下载并安装最新的内核
正如上文所说的,主线内核的官方地址为https://kernel.ubuntu.com/~kernel-ppa/mainline/
我们的目标是安装最新稳定的版本v4.20.5,它对应的下载页面是:
https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/
下载最新内核文件
下载最新内核文件
选择我们服务器的架构,我们的服务器一般使用AMD64架构吧?注意,由于64位架构是AMD先推出的,所以Intel 64位处理器也被称为AMD64架构。所以这里并不仅仅是指因特尔的64位CPU。
generic表示通用版内核。
lowlatency表示低延迟内核。
我们一般选择通用版内核
先安装下载工具wget
zcwyou@ubuntu1804:~$ sudo apt install -y wget
创建专用目录
zcwyou@ubuntu1804:~$ cd ~ && mkdir newkernel && cd newkernel
我们应该使用wget分别下载4个generic版本的内核文件:
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-headers-4.20.5-042005_4.20.5-042005.201901260434_all.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-headers-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-image-unsigned-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/linux-modules-4.20.5-042005-generic_4.20.5-042005.201901260434_amd64.deb
使用dpkg安装最新内核:
zcwyou@ubuntu1804:~$ sudo dpkg -i *.deb
看到如下即表示安装成功:
Replacing config file /run/grub/menu.lst with new version
Updating /boot/grub/menu.lst … done
/etc/kernel/postinst.d/zz-update-grub:
Generating grub configuration file …
Found linux image: /boot/vmlinuz-4.20.5-042005-generic
Found initrd image: /boot/initrd.img-4.20.5-042005-generic
Found linux image: /boot/vmlinuz-4.15.0-43-generic
Found initrd image: /boot/initrd.img-4.15.0-43-generic
Found linux image: /boot/vmlinuz-4.15.0-29-generic
Found initrd image: /boot/initrd.img-4.15.0-29-generic
done
安装最新内核:
安装最新内核
更新grub,其实上面一步安装时也会自己更新grub配置。
zcwyou@ubuntu1804:~$ sudo update-grub
重启服务器
zcwyou@ubuntu1804:~$ sudo reboot
进入系统后,重新确认版本。
zcwyou@ubuntu1804:~$ uname -r
4.20.5-042005-generic
已经看到内核已经升级为最新版本4.20.5-042005-generic
验证刚刚安装的内核
验证刚刚安装的内核
删除旧内核
我们需要借助byobu这个工具删除旧内核:
oucanrong@zcwyou:~$ sudo apt install byobu -y
安装byobu用于删除旧内核
安装byobu用于删除旧内核
查看系统已经安装的内核:
oucanrong@zcwyou:~$ dpkg -l | grep linux-image
查询当前系统的内核包
查询当前系统的内核包
使用byobu删除旧内核,
oucanrong@zcwyou:~$ sudo purge-old-kernels
默认情况下,byobu将在系统上至少保留2个内核版本,以确保在第一个失败时具有备用内核。
使用byobu删除旧内核
使用byobu删除旧内核
如果你想保留唯一一个(最新的)内核,那么你可以使用下面的命令除去一个内核以外的所有内核。执行以下命令:
oucanrong@zcwyou:~$ purge-old-kernels --keep 1 -q
正常情况,purge-old-kernels命令会自动更新grub,为了保证安全,我们可以考虑再更新一次。
oucanrong@zcwyou:~$ sudo update-grub
Ubuntu内核现在从主线内核版本升级到最新版本4.20.5-042005-generic,旧的内核版本已从系统中删除,以释放磁盘空间。
总结:内核是Linux系统中最基础最重要的文件,即使你是一个Linux老手,也不建议手工升级和删除,强烈建议使用工具进行操作,避免发生严重后果。
本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:
https://www.linuxrumen.com/rmxx/931.html