前言
本文主要如何安全地升級(jí)Ubuntu內(nèi)核,以18.04 Server版為例纂寫(xiě)本教程。
我們先來(lái)了解一下什么是主線內(nèi)核構(gòu)建(Mainline Kernel Build)
Mainline Kernel Build是一個(gè)從kernel.org開(kāi)發(fā)的一個(gè)vanilla內(nèi)核,作為deb包打包。 Canonical Kernel Team構(gòu)建和定制Ubuntu的內(nèi)核源代碼,并將其構(gòu)建為.deb包,以便于apt包管理器進(jìn)行安裝。 只有在需要最新的內(nèi)核功能的情況下才能使用Mainline內(nèi)核,因?yàn)榕cUbuntu一起運(yùn)行的生產(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)升級(jí)目標(biāo)版本

確認(rèn)升級(jí)目標(biāo)版本
可以看出,目前Ubuntu最新的mainline內(nèi)核版本為4.20.5和v5.0-rc2。確定升級(jí)內(nèi)核的步聚
- 把當(dāng)前系統(tǒng)所有軟件包和內(nèi)核升級(jí)到最新
- 檢查當(dāng)前內(nèi)核版本
- 下載并安裝新內(nèi)核版本
- 刪除舊內(nèi)核
把當(dāng)前系統(tǒng)所有軟件包和內(nèi)核升級(jí)到最新
zcwyou@ubuntu1804:~$ sudo apt update
已下載 61.7 MB,耗時(shí) 1分 13秒 (842 kB/s)
正在讀取軟件包列表… 完成
正在分析軟件包的依賴(lài)關(guān)系樹(shù)
正在讀取狀態(tài)信息… 完成
有 29 個(gè)軟件包可以升級(jí)。請(qǐng)執(zhí)行 ‘apt list --upgradable’ 來(lái)查看它們。
查詢(xún)系統(tǒng)更新包

查詢(xún)系統(tǒng)更新包
可以看出,有29個(gè)軟件包需要升級(jí)。
查看哪些軟件包需要升級(jí),這個(gè)步聚非必要:
zcwyou@ubuntu1804:~$ sudo apt list --upgradable
開(kāi)始升級(jí)系統(tǒng)所有的軟件包,類(lèi)似于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)更新過(guò)程
重啟服務(wù)器,既然已經(jīng)決定要升級(jí)內(nèi)核了,服務(wù)器應(yīng)該可以重啟吧?
zcwyou@ubuntu1804:~$ sudo reboot
重新登錄系統(tǒng),再次檢查可升級(jí)包,并使用以下命令。
zcwyou@ubuntu1804:~$ sudo apt list --upgradeable
如果執(zhí)行命令的結(jié)果為:Listing... Done,就說(shuō)明系統(tǒng)組件已經(jīng)是最新的,沒(méi)有需要更新的軟件。
檢查當(dāng)前內(nèi)核版本
zcwyou@ubuntu1804:~$ uname -r
4.15.0-43-generic
可以看出當(dāng)前的內(nèi)核版本為4.15.0-43-generic
下載并安裝最新的內(nèi)核
正如上文所說(shuō)的,主線內(nèi)核的官方地址為https://kernel.ubuntu.com/~kernel-ppa/mainline/
我們的目標(biāo)是安裝最新穩(wěn)定的版本v4.20.5,它對(duì)應(yīng)的下載頁(yè)面是:
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位處理器也被稱(chēng)為AMD64架構(gòu)。所以這里并不僅僅是指因特爾的64位CPU。
generic表示通用版內(nèi)核。
lowlatency表示低延遲內(nèi)核。
我們一般選擇通用版內(nèi)核
先安裝下載工具wget
zcwyou@ubuntu1804:~$ sudo apt install -y wget
創(chuàng)建專(zhuān)用目錄
zcwyou@ubuntu1804:~$ cd ~ && mkdir newkernel && cd newkernel
我們應(yīng)該使用wget分別下載4個(gè)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,其實(shí)上面一步安裝時(shí)也會(huì)自己更新grub配置。
zcwyou@ubuntu1804:~$ sudo update-grub
重啟服務(wù)器
zcwyou@ubuntu1804:~$ sudo reboot
進(jìn)入系統(tǒng)后,重新確認(rèn)版本。
zcwyou@ubuntu1804:~$ uname -r
4.20.5-042005-generic
已經(jīng)看到內(nèi)核已經(jīng)升級(jí)為最新版本4.20.5-042005-generic
驗(yàn)證剛剛安裝的內(nèi)核

驗(yàn)證剛剛安裝的內(nèi)核
刪除舊內(nèi)核
我們需要借助byobu這個(gè)工具刪除舊內(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
查詢(xún)當(dāng)前系統(tǒng)的內(nèi)核包

查詢(xún)當(dāng)前系統(tǒng)的內(nèi)核包
使用byobu刪除舊內(nèi)核,
oucanrong@zcwyou:~$ sudo purge-old-kernels
默認(rèn)情況下,byobu將在系統(tǒng)上至少保留2個(gè)內(nèi)核版本,以確保在第一個(gè)失敗時(shí)具有備用內(nèi)核。
使用byobu刪除舊內(nèi)核

使用byobu刪除舊內(nèi)核
如果你想保留唯一一個(gè)(最新的)內(nèi)核,那么你可以使用下面的命令除去一個(gè)內(nèi)核以外的所有內(nèi)核。執(zhí)行以下命令:
oucanrong@zcwyou:~$ purge-old-kernels --keep 1 -q
正常情況,purge-old-kernels命令會(huì)自動(dòng)更新grub,為了保證安全,我們可以考慮再更新一次。
oucanrong@zcwyou:~$ sudo update-grub
Ubuntu內(nèi)核現(xiàn)在從主線內(nèi)核版本升級(jí)到最新版本4.20.5-042005-generic,舊的內(nèi)核版本已從系統(tǒng)中刪除,以釋放磁盤(pán)空間。
總結(jié):內(nèi)核是Linux系統(tǒng)中最基礎(chǔ)最重要的文件,即使你是一個(gè)Linux老手,也不建議手工升級(jí)和刪除,強(qiáng)烈建議使用工具進(jìn)行操作,避免發(fā)生嚴(yán)重后果。
本文已同步至博客站,尊重原創(chuàng),轉(zhuǎn)載時(shí)請(qǐng)?jiān)谡闹懈綆б韵骆溄樱?/p>
https://www.linuxrumen.com/rmxx/931.html