https://blog.csdn.net/breeze915/article/details/79243673
在實驗環境下,已安裝了最新的CentOS 7.4操作系統,現在需要升級內核版本。
實驗環境
CentOS-7-x86_64-Minimal-1708.iso
CentOS Linux release 7.4.1708 (Core)
Kernel 3.10.0-693.el7.x86_64
方案一:小版本升級
連接並同步CentOS自帶yum源,更新內核版本。此方法適用於更新內核補丁 。
具體實驗步驟:
sudo yum list kernel
sudo yum update -y kernel
此時,已安裝成功,但若想將系統運行在新版本的kernel上,則需要重新啟動操作系統。
重啟完成,至此,Kernel版本已升級至【3.10.0-693.17.1.el7.x86_64】
方案二:大版本升級
載入elrepo源,搜索內核更新資源,並進行更新操作。
具體實驗步驟:
# 載入公鑰 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 安裝ELRepo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm # 載入elrepo-kernel元數據 yum --disablerepo=\* --enablerepo=elrepo-kernel repolist # 查看可用的rpm包 yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel* # 安裝最新版本的kernel yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64
重啟,選擇新版本內核進入系統。
此時,操作系統使用的內核已升級為【4.15.0-1.el7.elrepo.x86_64】
最后一步,需要將內核工具包一並升級
# 刪除舊版本工具包 yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 # 安裝新版本工具包 yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64
至此,已完成升級。
注意:內核安裝好后,需要設置為默認啟動選項並重啟后才會生效
查看系統上的所有可用內核:
$ sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (4.18.7-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-862.11.6.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core) 3 : CentOS Linux (0-rescue-063ec330caa04d4baae54c6902c62e54) 7 (Core)
設置新的內核為grub2的默認版本
服務器上存在4 個內核,我們要使用 4.18 這個版本,可以通過 grub2-set-default 0
命令或編輯 /etc/default/grub
文件來設置
方法1、通過 grub2-set-default 0
命令設置
其中 0 是上面查詢出來的可用內核
grub2-set-default 0
方法2、編輯 /etc/default/grub
文件
設置 GRUB_DEFAULT=0,通過上面查詢顯示的編號為 0 的內核作為默認內核:
$ vim /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=0 GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rhgb quiet" GRUB_DISABLE_RECOVERY="true"
生成 grub 配置文件並重啟
$ grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.18.7-1.el7.elrepo.x86_64 Found initrd image: /boot/initramfs-4.18.7-1.el7.elrepo.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-862.11.6.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-862.11.6.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-063ec330caa04d4baae54c6902c62e54 Found initrd image: /boot/initramfs-0-rescue-063ec330caa04d4baae54c6902c62e54.img done
$reboot
驗證
$ uname -r 4.18.7-1.el7.elrepo.x86_64
刪除舊內核(可選)
查看系統中全部的內核:
$ rpm -qa | grep kernel kernel-3.10.0-514.el7.x86_64 kernel-ml-4.18.7-1.el7.elrepo.x86_64 kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 kernel-tools-3.10.0-862.11.6.el7.x86_64 kernel-3.10.0-862.11.6.el7.x86_64
方法1、yum remove 刪除舊內核的 RPM 包
$ yum remove kernel-3.10.0-514.el7.x86_64 \
kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 \
kernel-tools-3.10.0-862.11.6.el7.x86_64 \
kernel-3.10.0-862.11.6.el7.x86_64
方法2、yum-utils
工具
如果安裝的內核不多於 3 個,yum-utils
工具不會刪除任何一個。只有在安裝的內核大於 3 個時,才會自動刪除舊內核。
安裝yum-utils
$ yum install yum-utils
刪除舊版本
package-cleanup --oldkernels
方案三:自編譯升級
Step1: 下載源碼
Step2: 安裝gcc bc cmake
Step3: 編譯源碼,安裝新內核
自編譯升級過程略微復雜,且不便於后期維護,具體操作步驟在此略去不表。
話題擴展
如何將新安裝的內核設定為操作系統的默認內核,或者說如何將新版本的內核設置為重啟后的默認內核?
僅需兩步,之后重啟即可。
grub2-set-default 0 grub2-mkconfig -o /etc/grub2.cfg
術語解析
kernel-ml
kernel-ml 中的ml是英文【mainline stable】的縮寫,elrepo-kernel中羅列出來的是最新的穩定主線版本。
kernel-lt
kernel-lt 中的lt是英文【long term support】的縮寫,elrepo-kernel中羅列出來的長期支持版本。