應用背景:
最近在接觸docker,其對內核版本要求較高,就連目前使用的centos7.x默認內核版本為3.10.0-xxx,也是剛好滿足其最低要求,故借此機會記錄一下升級內核的操作步驟。
測試環境:
系統 | 當前內核版本 | 小版本升級 |
CentOS 7.9 | 3.10.0-957 | 3.10.0-957.5.1 |
系統 | 當前內核版本 | 大版本升級 |
CentOS 7.9 | 3.10.0-957 | 5.15.1-1(目前最新) |
操作步驟:
小版本升級
1. 查看當前和可升級版本
[root@server-1 ~]# yum list kernel Installed Packages kernel.x86_64 3.10.0-957.el7 @anaconda Available Packages kernel.x86_64 3.10.0-957.5.1.el7 updates
2. 升級
[root@server-1 ~]# yum update kernel -y
3. 重啟並檢查
[root@server-1 ~]# reboot
[root@server-1 ~]# uname -r
大版本升級
1. 載入公鑰
[root@server-1 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2. 升級安裝ELRepo
[root@server-1 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
3. 載入elrepo-kernel元數據
[root@server-1 ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
4. 查看可用的rpm包
[root@server-1 ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel* Installed Packages kernel.x86_64 3.10.0-957.el7 @anaconda kernel.x86_64 3.10.0-957.5.1.el7 @updates kernel-tools.x86_64 3.10.0-957.el7 @anaconda kernel-tools-libs.x86_64 3.10.0-957.el7 @anaconda Available Packages kernel-lt.x86_64 4.4.176-1.el7.elrepo elrepo-kernel kernel-lt-devel.x86_64 4.4.176-1.el7.elrepo elrepo-kernel kernel-lt-doc.noarch 4.4.176-1.el7.elrepo elrepo-kernel kernel-lt-headers.x86_64 4.4.176-1.el7.elrepo elrepo-kernel kernel-lt-tools.x86_64 4.4.176-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs.x86_64 4.4.176-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs-devel.x86_64 4.4.176-1.el7.elrepo elrepo-kernel kernel-ml.x86_64 4.20.12-1.el7.elrepo elrepo-kernel // 安裝目標版本 kernel-ml-devel.x86_64 4.20.12-1.el7.elrepo elrepo-kernel kernel-ml-doc.noarch 4.20.12-1.el7.elrepo elrepo-kernel kernel-ml-headers.x86_64 4.20.12-1.el7.elrepo elrepo-kernel kernel-ml-tools.x86_64 4.20.12-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs.x86_64 4.20.12-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs-devel.x86_64 4.20.12-1.el7.elrepo elrepo-kernel
說明:
lt :long term support,長期支持版本;
ml:mainline,主線版本;
5. 安裝最新版本的kernel
[root@server-1 ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml.x86_64 -y
6. 刪除舊版本工具包
[root@server-1 ~]# yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
7. 安裝新版本工具包
[root@server-1 ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml-tools.x86_64 -y
8. 查看內核插入順序
[root@server-1 ~]# awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core) 3 : CentOS Linux (0-rescue-ca0f6fb3c5f24478abc0a2e275281d7a) 7 (Core)
說明:默認新內核是從頭插入,默認啟動順序也是從0開始(當前順序還未生效),或者使用:

[root@server-17 ~]# grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2 CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core) CentOS Linux (0-rescue-ca0f6fb3c5f24478abc0a2e275281d7a) 7 (Core)
其中文件 /etc/grub2.cfg 和 /boot/grub2/grub.cfg 內容一致。
9. 查看當前實際啟動順序
[root@server-1 ~]# grub2-editenv list saved_entry=CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)
10. 設置默認啟動
[root@server-1 ~]# grub2-set-default 'CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core)' [root@server-1 ~]# grub2-editenv list saved_entry=CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core)
或者直接設置數值
[root@server-1 ~]# grub2-set-default 0 // 0代表當前第一行,也就是上面的4.20.12版本那一行內容 [root@server-1 ~]# grub2-editenv list saved_entry=0
11. 重啟並檢查
[root@server-1 ~]# reboot
[root@server-1 ~]# uname -r