前言
本文主要如何安全地升級Ubuntu內(nèi)核,以18.04 Server版為例纂寫本教程。
我們先來了解一下什么是主線內(nèi)核構(gòu)建(Mainline Kernel Build)
Mainline Kernel Build是一個從kernel.org開發(fā)的一個vanilla內(nèi)核,作為deb包打包。 Canonical Kernel Team構(gòu)建和定制Ubuntu的內(nèi)核源代碼,并將其構(gòu)建為.deb包,以便于apt包管理器進行安裝。 只有在需要最新的內(nèi)核功能的情況下才能使用Mainline內(nèi)核,因為與Ubuntu一起運行的生產(chǎn)內(nèi)核可能不太穩(wěn)定。
我們可以從 Canonical Kernel Team Mainline Kernel Build官方網(wǎng)站查找需要的內(nèi)核:
https://kernel.ubuntu.com/~kernel-ppa/mainline/
確認(rèn)升級目標(biāo)版本
確認(rèn)升級目標(biāo)版本
可以看出,目前Ubuntu最新的mainline內(nèi)核版本為4.20.5和v5.0-rc2。確定升級內(nèi)核的步聚
- 把當(dāng)前系統(tǒng)所有軟件包和內(nèi)核升級到最新
- 檢查當(dāng)前內(nèi)核版本
- 下載并安裝新內(nèi)核版本
- 刪除舊內(nèi)核
把當(dāng)前系統(tǒng)所有軟件包和內(nèi)核升級到最新
zcwyou@ubuntu1804:~$ sudo apt update
已下載 61.7 MB,耗時 1分 13秒 (842 kB/s)
正在讀取軟件包列表… 完成
正在分析軟件包的依賴關(guān)系樹
正在讀取狀態(tài)信息… 完成
有 29 個軟件包可以升級。請執(zhí)行 ‘apt list --upgradable’ 來查看它們。
查詢系統(tǒng)更新包
查詢系統(tǒng)更新包
可以看出,有29個軟件包需要升級。
查看哪些軟件包需要升級,這個步聚非必要:
zcwyou@ubuntu1804:~$ sudo apt list --upgradable
開始升級系統(tǒng)所有的軟件包,類似于windows系統(tǒng)更新。
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
系統(tǒng)更新
正在顯示系統(tǒng)更新過程
重啟服務(wù)器,既然已經(jīng)決定要升級內(nèi)核了,服務(wù)器應(yīng)該可以重啟吧?
zcwyou@ubuntu1804:~$ sudo reboot
重新登錄系統(tǒng),再次檢查可升級包,并使用以下命令。
zcwyou@ubuntu1804:~$ sudo apt list --upgradeable
如果執(zhí)行命令的結(jié)果為:Listing... Done,就說明系統(tǒng)組件已經(jīng)是最新的,沒有需要更新的軟件。
檢查當(dāng)前內(nèi)核版本
zcwyou@ubuntu1804:~$ uname -r
4.15.0-43-generic
可以看出當(dāng)前的內(nèi)核版本為4.15.0-43-generic
下載并安裝最新的內(nèi)核
正如上文所說的,主線內(nèi)核的官方地址為https://kernel.ubuntu.com/~kernel-ppa/mainline/
我們的目標(biāo)是安裝最新穩(wěn)定的版本v4.20.5,它對應(yīng)的下載頁面是:
https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.20.5/
下載最新內(nèi)核文件
下載最新內(nèi)核文件
選擇我們服務(wù)器的架構(gòu),我們的服務(wù)器一般使用AMD64架構(gòu)吧?注意,由于64位架構(gòu)是AMD先推出的,所以Intel 64位處理器也被稱為AMD64架構(gòu)。所以這里并不僅僅是指因特爾的64位CPU。
generic表示通用版內(nèi)核。
lowlatency表示低延遲內(nèi)核。
我們一般選擇通用版內(nèi)核
先安裝下載工具wget
zcwyou@ubuntu1804:~$ sudo apt install -y wget
創(chuàng)建專用目錄
zcwyou@ubuntu1804:~$ cd ~ && mkdir newkernel && cd newkernel
我們應(yīng)該使用wget分別下載4個generic版本的內(nèi)核文件:
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安裝最新內(nèi)核:
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
安裝最新內(nèi)核:
安裝最新內(nèi)核
更新grub,其實上面一步安裝時也會自己更新grub配置。
zcwyou@ubuntu1804:~$ sudo update-grub
重啟服務(wù)器
zcwyou@ubuntu1804:~$ sudo reboot
進入系統(tǒng)后,重新確認(rèn)版本。
zcwyou@ubuntu1804:~$ uname -r
4.20.5-042005-generic
已經(jīng)看到內(nèi)核已經(jīng)升級為最新版本4.20.5-042005-generic
驗證剛剛安裝的內(nèi)核
驗證剛剛安裝的內(nèi)核
刪除舊內(nèi)核
我們需要借助byobu這個工具刪除舊內(nèi)核:
oucanrong@zcwyou:~$ sudo apt install byobu -y
安裝byobu用于刪除舊內(nèi)核
安裝byobu用于刪除舊內(nèi)核
查看系統(tǒng)已經(jīng)安裝的內(nèi)核:
oucanrong@zcwyou:~$ dpkg -l | grep linux-image
查詢當(dāng)前系統(tǒng)的內(nèi)核包
查詢當(dāng)前系統(tǒng)的內(nèi)核包
使用byobu刪除舊內(nèi)核,
oucanrong@zcwyou:~$ sudo purge-old-kernels
默認(rèn)情況下,byobu將在系統(tǒng)上至少保留2個內(nèi)核版本,以確保在第一個失敗時具有備用內(nèi)核。
使用byobu刪除舊內(nèi)核
使用byobu刪除舊內(nèi)核
如果你想保留唯一一個(最新的)內(nèi)核,那么你可以使用下面的命令除去一個內(nèi)核以外的所有內(nèi)核。執(zhí)行以下命令:
oucanrong@zcwyou:~$ purge-old-kernels --keep 1 -q
正常情況,purge-old-kernels命令會自動更新grub,為了保證安全,我們可以考慮再更新一次。
oucanrong@zcwyou:~$ sudo update-grub
Ubuntu內(nèi)核現(xiàn)在從主線內(nèi)核版本升級到最新版本4.20.5-042005-generic,舊的內(nèi)核版本已從系統(tǒng)中刪除,以釋放磁盤空間。
總結(jié):內(nèi)核是Linux系統(tǒng)中最基礎(chǔ)最重要的文件,即使你是一個Linux老手,也不建議手工升級和刪除,強烈建議使用工具進行操作,避免發(fā)生嚴(yán)重后果。
本文已同步至博客站,尊重原創(chuàng),轉(zhuǎn)載時請在正文中附帶以下鏈接:
https://www.linuxrumen.com/rmxx/931.html