一、概述
在數據中心基礎環境中,Linux系統使用很普遍,但是有時候會遇到應用程序需要運行在高版本的內核上或者有時候系統自身要求需要升級內核,我們要綜合考慮升級內核的風險。
二、升級內核的方法
1、查看操作系統內核版本
[root@localhost ~]# uname -r 3.10.0-1062.4.1.el7.x86_64
2、安裝ELRepo到CentOS,下載key,並進行安裝
最好從官方網站獲取最新版本(官網地址:http://elrepo.org/tiki/tiki-index.php)。
[root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@localhost ~]# yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm 已加載插件:fastestmirror, langpacks elrepo-release-7.el7.elrepo.noarch.rpm | 8.5 kB 00:00:00 正在檢查 /var/tmp/yum-root-LAFBfB/elrepo-release-7.el7.elrepo.noarch.rpm: elrepo-release-7.0-4.el7.elrepo.noarch /var/tmp/yum-root-LAFBfB/elrepo-release-7.el7.elrepo.noarch.rpm 將被安裝 正在解決依賴關系 --> 正在檢查事務 ---> 軟件包 elrepo-release.noarch.0.7.0-4.el7.elrepo 將被 安裝 --> 解決依賴關系完成 base/7/x86_64 | 3.6 kB 00:00:00 extras/7/x86_64 | 2.9 kB 00:00:00 extras/7/x86_64/primary_db | 165 kB 00:00:00 updates/7/x86_64 | 2.9 kB 00:00:00 updates/7/x86_64/primary_db | 7.6 MB 00:00:01 依賴關系解決 =========================================================================================== Package 架構 版本 源 大小 =========================================================================================== 正在安裝: elrepo-release noarch 7.0-4.el7.elrepo /elrepo-release-7.el7.elrepo.noarch 5.0 k 事務概要 =========================================================================================== 安裝 1 軟件包 總計:5.0 k 安裝大小:5.0 k Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 警告:RPM 數據庫已被非 yum 程序修改。 正在安裝 : elrepo-release-7.0-4.el7.elrepo.noarch 1/1 驗證中 : elrepo-release-7.0-4.el7.elrepo.noarch 1/1 已安裝: elrepo-release.noarch 0:7.0-4.el7.elrepo 完畢!
3、查看內核列表,可以看到各個現有版本。
[root@localhost ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available 已加載插件:fastestmirror, langpacks Determining fastest mirrors * elrepo-kernel: hkg.mirror.rackspace.com elrepo-kernel | 2.9 kB 00:00:00 elrepo-kernel/primary_db | 1.9 MB 00:00:01 可安裝的軟件包 kernel-lt.x86_64 4.4.220-1.el7.elrepo elrepo-kernel kernel-lt-devel.x86_64 4.4.220-1.el7.elrepo elrepo-kernel kernel-lt-doc.noarch 4.4.220-1.el7.elrepo elrepo-kernel kernel-lt-headers.x86_64 4.4.220-1.el7.elrepo elrepo-kernel kernel-lt-tools.x86_64 4.4.220-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs.x86_64 4.4.220-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs-devel.x86_64 4.4.220-1.el7.elrepo elrepo-kernel kernel-ml.x86_64 5.6.7-1.el7.elrepo elrepo-kernel kernel-ml-devel.x86_64 5.6.7-1.el7.elrepo elrepo-kernel kernel-ml-doc.noarch 5.6.7-1.el7.elrepo elrepo-kernel kernel-ml-headers.x86_64 5.6.7-1.el7.elrepo elrepo-kernel kernel-ml-tools.x86_64 5.6.7-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs.x86_64 5.6.7-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs-devel.x86_64 5.6.7-1.el7.elrepo elrepo-kernel perf.x86_64 5.6.7-1.el7.elrepo elrepo-kernel python-perf.x86_64
4、安裝需要的kernel版本,這里安裝kernel-kt
內核版本介紹:
1)、lt:longterm的縮寫:長期維護版;
2)、ml:mainline的縮寫:最新穩定版;
[root@localhost boot]# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * elrepo: hkg.mirror.rackspace.com * elrepo-kernel: hkg.mirror.rackspace.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 正在解決依賴關系 --> 正在檢查事務 ---> 軟件包 kernel-ml.x86_64.0.5.6.7-1.el7.elrepo 將被 安裝 ---> 軟件包 kernel-ml-devel.x86_64.0.5.6.7-1.el7.elrepo 將被 安裝 --> 解決依賴關系完成 依賴關系解決 ============================================================================================================================================= Package 架構 版本 源 大小 ============================================================================================================================================= 正在安裝: kernel-ml x86_64 5.6.7-1.el7.elrepo elrepo-kernel 49 M kernel-ml-devel x86_64 5.6.7-1.el7.elrepo elrepo-kernel 13 M 事務概要 ============================================================================================================================================= 安裝 2 軟件包 總計:62 M 安裝大小:272 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安裝 : kernel-ml-devel-5.6.7-1.el7.elrepo.x86_64 1/2 正在安裝 : kernel-ml-5.6.7-1.el7.elrepo.x86_64 2/2 驗證中 : kernel-ml-5.6.7-1.el7.elrepo.x86_64 1/2 驗證中 : kernel-ml-devel-5.6.7-1.el7.elrepo.x86_64 2/2 已安裝: kernel-ml.x86_64 0:5.6.7-1.el7.elrepo kernel-ml-devel.x86_64 0:5.6.7-1.el7.elrepo 完畢!
5、查看系統上面可以使用的內核
[root@localhost boot]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (5.6.7-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1062.4.1.el7.x86_64) 7 (Core) 2 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) 3 : CentOS Linux (0-rescue-3d09bf01bc1d401eac8c018ab645a715) 7 (Core)
6、設置新的內核為grub2的默認版本
1)修改啟動順序默認值
方法一:命令直接設置
[root@localhost ~]# grub2-set-default 0
方法二:修改/etc/default/grub 文件
.......................................... 設置 GRUB_DEFAULT=0,通過上面查詢顯示的編號為 0 的內核作為默認內核: [root@node01 ~]# vi /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=centos/root rd.lvm.lv=centos/swap rhgb quiet" GRUB_DISABLE_RECOVERY="true" ...........................................
2)生產grub 配置文件
[root@localhost boot]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.6.7-1.el7.elrepo.x86_64 Found initrd image: /boot/initramfs-5.6.7-1.el7.elrepo.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-1062.4.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1062.4.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64 Found linux image: /boot/vmlinuz-0-rescue-3d09bf01bc1d401eac8c018ab645a715 Found initrd image: /boot/initramfs-0-rescue-3d09bf01bc1d401eac8c018ab645a715.img done
7、重新啟動
[root@localhost boot]# reboot [root@localhost ~]# uname -r 5.6.7-1.el7.elrepo.x86_64
8、刪除舊內核版本
[root@localhost ~]# rpm -qa | grep kernel abrt-addon-kerneloops-2.1.11-55.el7.centos.x86_64 kernel-3.10.0-1062.4.1.el7.x86_64 kernel-ml-5.6.7-1.el7.elrepo.x86_64 kernel-debug-devel-3.10.0-1062.4.1.el7.x86_64 kernel-3.10.0-862.el7.x86_64 kernel-tools-libs-3.10.0-1062.4.1.el7.x86_64 kernel-tools-3.10.0-1062.4.1.el7.x86_64 kernel-headers-3.10.0-1062.4.1.el7.x86_64 kernel-ml-devel-5.6.7-1.el7.elrepo.x86_64
1)方法一:使用yum remove 刪除舊版本RPM包
[root@localhost ~]# yum remove kernel-3.10.0-1062.4.1.el7.x86_64 kernel-3.10.0-862.el7.x86_64 kernel-tools-3.10.0-1062.4.1.el7.x86_64 kernel-headers-3.10.0-1062.4.1.el7.x86_64 已加載插件:fastestmirror, langpacks 正在解決依賴關系 --> 正在檢查事務 ---> 軟件包 kernel.x86_64.0.3.10.0-862.el7 將被 刪除
2)方法二: yum-utils 工具
注:如果安裝的內核不多於 3 個,yum-utils
工具不會刪除任何一個。只有在安裝的內核大於 3 個時,才會自動刪除舊內核。
[root@localhost ~]# yum install yum-utils //安裝工具 已加載插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * elrepo: hkg.mirror.rackspace.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 軟件包 yum-utils-1.1.31-52.el7.noarch 已安裝並且是最新版本 無須任何處理 [root@localhost ~]# package-cleanup --oldkernels //刪除舊版本 已加載插件:fastestmirror, langpacks No old kernels to remove
-----------------------------------------------------------書山有路勤為徑,學海無涯苦作舟-------------------------------------------------------------