CentOS7升級Linux核心
CentOS7升級Linux核心
什麼是Linux核心
雖然時候使用 Linux 來表示整個作業系統,嚴格地說,Linux 只是個核心,而發行版的作業系統是一個完整功能的系統,它建立在核心之上,具有各種各樣的應用程式工具和庫。在正常操作期間,核心負責執行兩個重要任務:
- 作為硬體和系統上執行的軟體之間的介面
- 儘可能高效地管理系統資源
為此,核心通過內建的驅動程式或以後可作為模組安裝的驅動程式與硬體通訊。例如,當你計算機上執行的程式想要連線到無線網路時,它會將該請求提交給核心,核心又會使用正確的驅動程式連線到網路。隨著新的裝置和技術更新,如果想充分利用它們,保持最新的核心就很重要。此外,更新核心更好的利用新的核心函式,並保護系統免受先前版本中發現的漏洞的攻擊。
檢視正在使用的核心版本
命令列執行 uname -sr
- [root@hadoop104~]#uname-sr
- Linux5.4.123-1.el7.elrepo.x86_64
檢視所有已安裝的核心版本
在CentOS作業系統啟動時會有一個介面展示所有已安裝的Linux核心,可以通過鍵盤上的上下箭頭按鍵控制啟動作業系統所使用的核心版本,如果不做任何操作會等待幾秒鐘自動現在預設的核心版本
yum線上升級ELRepo倉庫中最新核心版本
通過yum install -y kernel直接升級核心是最保險的升級方式,因為安裝的是作業系統發行廠商驗證過相容性的rpm包,升級風險一般很小。但是,這隻會升級核心到倉庫中可用的最新版本,而不是在
CentOS7啟用 ELRepo 倉庫
在命令列執行如下命令啟用ELRepo 倉庫
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- [root@localhost~]#rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- [root@localhost~]#rpm-Uvhhttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- Retrievinghttp://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- Retrievinghttp://elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
- Preparing...#################################[100%]
- Updating/installing...
- 1:elrepo-release-7.0-4.el7.elrepo#################################[50%]
- Cleaningup/removing...
- 2:elrepo-release-7.0-3.el7.elrepo#################################[100%]
倉庫啟用後,可以使用下面的命令列出可用的核心相關包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
- [root@localhost~]#yum--disablerepo="*"--enablerepo="elrepo-kernel"listavailable
- Loadedplugins:fastestmirror
- Repodataisover2weeksold.Installyum-cron?Orrun:yummakecachefast
- Loadingmirrorspeedsfromcachedhostfile
- *elrepo-kernel:mirrors.neusoft.edu.cn
- AvailablePackages
- kernel-lt.x86_644.4.166-1.el7.elrepoelrepo-kernel
- kernel-lt-devel.x86_644.4.166-1.el7.elrepoelrepo-kernel
- kernel-lt-doc.noarch4.4.166-1.el7.elrepoelrepo-kernel
- kernel-lt-headers.x86_644.4.166-1.el7.elrepoelrepo-kernel
- kernel-lt-tools.x86_644.4.166-1.el7.elrepoelrepo-kernel
- kernel-lt-tools-libs.x86_644.4.166-1.el7.elrepoelrepo-kernel
- kernel-lt-tools-libs-devel.x86_644.4.166-1.el7.elrepoelrepo-kernel
- kernel-ml-devel.x86_644.19.8-1.el7.elrepoelrepo-kernel
- kernel-ml-doc.noarch4.19.8-1.el7.elrepoelrepo-kernel
- kernel-ml-headers.x86_644.19.8-1.el7.elrepoelrepo-kernel
- kernel-ml-tools.x86_644.19.8-1.el7.elrepoelrepo-kernel
- kernel-ml-tools-libs.x86_644.19.8-1.el7.elrepoelrepo-kernel
- kernel-ml-tools-libs-devel.x86_644.19.8-1.el7.elrepoelrepo-kernel
- perf.x86_644.19.8-1.el7.elrepoelrepo-kernel
- python-perf.x86_644.19.8-1.el7.elrepoelrepo-kernel
安裝最新的主線穩定核心
執行命令安裝最新版本的核心
yum--enablerepo=elrepo-kernelinstallkernel-ml-devel
安裝過程日誌截圖:
安裝指定版本的核心
如果最新版本較高,而使用的centos版本較低,則會導致升級完核心後導致啟動失敗,那麼就需要安裝指定版本的核心而不是最新版本,如使用centos7.4預設安裝核心版本列表發現為5.15,如果此時安裝最新的則系統不能正常啟動,並且舊核心沒刪(一個系統中可以同時存在多個核心),此時可以在重啟機器時選擇舊核心啟動,然後再進行操作
如果想要安裝指定版本的核心,則執行yum命令時將最後一個kernel-ml-devel修改為指定的版本如
yum --enablerepo=elrepo-kernel install kernel-lt.x86_64
重啟機器並應用最新核心
核心安裝完成之後重新啟動作業系統,在系統顯示核心列表時通過鍵盤的上下按鍵選擇需要使用的核心版本,啟動完成後然後通過 uname –sr 命令檢視正在使用的核心版本
設定 GRUB 預設的核心版本
新安裝的Linux核心並不會自動設定成預設的啟動核心版本,需要每次在作業系統啟動時手動制定,這樣很不方便,可通過修改 GRUB 配置讓新安裝的核心成為預設啟動選項,操作步驟如下
並編輯 /etc/default/grub 檔案 並設定 GRUB_DEFAULT=0 的值
- 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=autord.lvm.lv=centos/rootrd.lvm.lv=centos/swaprhgbquiet"
- GRUB_DISABLE_RECOVERY="true"
GRUB_DEFAULT=0。該值設定位0時表示 GRUB 初始化頁面的第1個核心將作為預設核心,GRUB 初始化頁面的核心列表從0開始計數,如果設定位1則表示 GRUB 初始化頁面的第2個核心將作為預設核心,依次類推,具體設定的值根據實際情況進行設定。
重新建立核心配置
執行下面的命令來重新建立核心配置
grub2-mkconfig -o /boot/grub2/grub.cfg
- [root@localhost~]#grub2-mkconfig-o/boot/grub2/grub.cfg
- Generatinggrubconfigurationfile...
- Foundlinuximage:/boot/vmlinuz-5.4.160-1.el7.elrepo.x86_64
- Foundinitrdimage:/boot/initramfs-5.4.160-1.el7.elrepo.x86_64.img
- Foundlinuximage:/boot/vmlinuz-4.19.8-1.el7.elrepo.x86_64
- Foundinitrdimage:/boot/initramfs-4.19.8-1.el7.elrepo.x86_64.img
- Foundlinuximage:/boot/vmlinuz-3.10.0-957.el7.x86_64
- Foundinitrdimage:/boot/initramfs-3.10.0-957.el7.x86_64.img
- Foundlinuximage:/boot/vmlinuz-0-rescue-3ff67f2764b042908e12a7b7b8a73c2d
- Foundinitrdimage:/boot/initramfs-0-rescue-3ff67f2764b042908e12a7b7b8a73c2d.img
重啟作業系統並驗證GRUB 初始化頁面選擇預設核心是否為設定的是否一致
手動編譯離線升級核心
手動編譯升級風險是比較大的,輕則可能會導致應用的相容性問題,重則系統可能就啟不來了(當然舊核心沒刪還是可以選舊核心來啟動,前提是顯示器能直連機器而不是ssh)
但如果想要升級到不是官方使用的核心版本,那麼只能使用手動編譯的方式升級核心
下載
Linux核心管閥下載地址
https://www.kernel.org/pub/linux/kernel/
這裡以4.19.99版本為例下載
編譯安裝
上傳檔案linux-4.19.99.tar.gz到伺服器
解壓:tar -zxvf linux-4.19.99.tar.gz
編譯,依次執行如下命令
cd linux-4.19.99 #編譯命令make必須要進入到解壓資料夾下執行
make mrproper
make clean
make oldconfig
make
make modules_install
make install
編譯命令表示的含義
make mrproper和make clean
這兩條用於清除之前編譯生成的.ko和.config
make oldconfig
設定核心配置,也可以使用make config和make default代替,不同方式表示的含義如下:
make oldconfig行表示使用當前核心一樣的配置,一般情況下新的功能要自己選擇而且項數還很多,好在新功能的選擇都有預設選項,如果不在意這些新功能可以直接一直回車即可。
make config是每項都要自己選擇,這個除了對配置非常熟悉且明白需要什麼配置,一般不建議使用。
make default是直接使用linux提供的預設配置,這個基本什麼也不用選,在執行下一步的make編譯命令時也會很快,但是也不建議用,編譯快是因為很多東西都沒啟用,使用這個核心系統基本重啟啟不來了,對升級核心也沒有什麼意義
make
編譯,一般會執行很長時間,通常在半小時以上
遇到的錯誤
錯誤1
- /bin/sh:bc:commandnotfound
- make[1]:***[include/generated/timeconst.h]Error1
- make:***[prepare0]Error2
缺少bc工具,執行yum命令安裝
yum install bc –y
錯誤2
- scripts/extract-cert.c:21:25:fatalerror:openssl/bio.h:Nosuchfileordirectory
- #include<openssl/bio.h>
- ^
- compilationterminated.
- make[1]:***[scripts/extrac
缺少openssl-devel工具,執行yum命令安裝
yum install openssl-devel -y
make modules_install
把編譯出的核心模組複製到/lib/modules/${KERNEL_VERSION}
make install
最後執行的安裝命令
安裝完成後重啟作業系統並使用最新安裝的核心,使用uname –sr檢視,核心是否成功替換,如果想更改啟動預設的核心版本請參考章節 設定 GRUB 預設的核心版本
在Ubuntu系統中升級核心請參考連結:https://linux.cn/article-8284-1.html
本文來自部落格園,作者:蓮藕淹,轉載請註明原文連結:https://www.cnblogs.com/meanshift/p/15576790.html