前言
本文主要如何安全地升級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