Kernel (內核)是操作系統的核心,掌握所有硬件設備的控制權,也就是說,你所希望計算機幫你完成的各項工作,都需要通過內核的幫助才能完成,當然,如果我們想完成的某個功能是內核沒有的,則內核不會操控計算機來幫你完成這項工作,如果我們想讓內核去完成這個功能,那么我們就必須將該功能的模塊添加到內核當中,這就類似於驅動程序,有了這樣一個“驅動程序”的支持后,我們的硬件才能完成之前所不能完成的功能。
那么內核到底是什么呢?其實內核就是系統上面的一個文件而已,這個文件包含了驅動主機各項硬件的檢測程序和驅動模塊,在系統啟動過程中,我們知道,系統讀完BIOS並加載MBR中的Boot Loader之后,就能夠加載內核到內存當中了,然后就去開始檢測硬件設備,掛載根目錄來獲取內核模塊來驅動所有的硬件設備,之后就開始讓/sbin/init進程來完成系統的啟動,同時講到了內核文件就是在/boot 目錄下的一個以vmlinuz 開頭的文件,有時候我們會發現,/boot目錄下有好幾個以vmlinuz 開頭的文件,也就是說主機可以有多個內核,但是啟動后,只能選擇一個來加載,所以說linux系統是單內核,模塊化體系。
模塊化可以這樣理解,一個程序可以完成很多功能,那么每個獨立的功能就可以稱之為模塊,這些獨立的功能模塊組合起來就可以完成一系列大的功能,內核也是一樣。
當我們需要實現的功能內核不能提供時,這時我們就需要對內核進行更新升級,來實現滿足我們要有功能需要,下面我就演示一下在centos7中升級最新版本內核步驟:
使用 uname -sr 查看自己內核版本號:
1 [root@localhost ~]# uname -sr 2 Linux 3.10.0-862.el7.x86_64
然后我們在瀏覽器中輸入 www.kernel.org,查看centos,最新內核版本為:4.18
一:、安裝elrepo的yum源
elrepo是CentOS十分有用的穩定的軟件源,這是一個第三方倉庫,可以將內核升級到最新版本。我們可以在命令行中輸入:
首先導入public key:
1 [root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 2 [root@localhost ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm 3 Retrieving http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm 4 Retrieving http://elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 5 Preparing... ################################# [100%] 6 Updating / installing... 7 1:elrepo-release-7.0-3.el7.elrepo ################################# [100%]
倉庫啟用后,我們可以使用下面的命令列出可用的內核相關包:
1 yum --disablerepo="*" --enablerepo="elrepo-kernel" list available 2 3 Loaded plugins: fastestmirror, langpacks 4 Repository 'QJC' is missing name in configuration, using id 5 Loading mirror speeds from cached hostfile 6 * elrepo-kernel: hkg.mirror.rackspace.com 7 elrepo-kernel | 2.9 kB 00:00:00 8 elrepo-kernel/primary_db | 1.8 MB 00:00:00 9 Available Packages 10 kernel-lt.x86_64 4.4.152-1.el7.elrepo elrepo-kernel 11 kernel-lt-devel.x86_64 4.4.152-1.el7.elrepo elrepo-kernel 12 kernel-lt-doc.noarch 4.4.152-1.el7.elrepo elrepo-kernel 13 kernel-lt-headers.x86_64 4.4.152-1.el7.elrepo elrepo-kernel 14 kernel-lt-tools.x86_64 4.4.152-1.el7.elrepo elrepo-kernel 15 kernel-lt-tools-libs.x86_64 4.4.152-1.el7.elrepo elrepo-kernel 16 kernel-lt-tools-libs-devel.x86_64 4.4.152-1.el7.elrepo elrepo-kernel 17 kernel-ml.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 18 kernel-ml-devel.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 19 kernel-ml-doc.noarch 4.18.5-1.el7.elrepo elrepo-kernel 20 kernel-ml-headers.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 21 kernel-ml-tools.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 22 kernel-ml-tools-libs.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 23 kernel-ml-tools-libs-devel.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 24 perf.x86_64 4.18.5-1.el7.elrepo elrepo-kernel 25 python-perf.x86_64 4.18.5-1.el7.elrepo elrepo-kernel
二:升級內核
在yum的elrepo源中有ml和lt兩種內核,其中ml(mainline)為最新版本的內核,lt為長期支持的內核。
如果要安裝ml內核,使用如下命令:
yum --enablerepo=elrepo-kernel -y install kernel-ml
如果要安裝lt內核,使用如下命令:
yum --enablerepo=elrepo-kernel -y install kernel-lt
在此我們安裝的是ml內核,如下:
1 yum --enablerepo=elrepo-kernel install kernel-ml 2 Loaded plugins: fastestmirror, langpacks 3 Repository 'QJC' is missing name in configuration, using id 4 Loading mirror speeds from cached hostfile 5 * elrepo: hkg.mirror.rackspace.com 6 * elrepo-kernel: hkg.mirror.rackspace.com 7 file:///media/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /media/repodata/repomd.xml" 8 Trying other mirror. 9 elrepo | 2.9 kB 00:00:00 10 elrepo/primary_db | 469 kB 00:00:00 11 Resolving Dependencies 12 --> Running transaction check 13 ---> Package kernel-ml.x86_64 0:4.18.5-1.el7.elrepo will be installed 14 --> Finished Dependency Resolution 15 16 Dependencies Resolved 17 18 ===================================================================================== 19 Package Arch Version Repository Size 20 ===================================================================================== 21 Installing: 22 kernel-ml x86_64 4.18.5-1.el7.elrepo elrepo-kernel 45 M 23 24 Transaction Summary 25 ===================================================================================== 26 Install 1 Package 27 28 Total download size: 45 M 29 Installed size: 203 M 30 Is this ok [y/d/N]: y 31 Downloading packages: 32 kernel-ml-4.18.5-1.el7.elrepo.x86_64.rpm | 45 MB 00:00:04 33 Running transaction check 34 Running transaction test 35 Transaction test succeeded 36 Running transaction 37 Warning: RPMDB altered outside of yum. 38 Installing : kernel-ml-4.18.5-1.el7.elrepo.x86_64 1/1 39 Verifying : kernel-ml-4.18.5-1.el7.elrepo.x86_64 1/1 40 41 Installed: 42 kernel-ml.x86_64 0:4.18.5-1.el7.elrepo 43 44 Complete!
內核升級完畢后,不會立即生效,還需要我們修改grub.conf文件。
三:修改grub.conf文件
內核升級完畢后,需要我們修改內核的啟動順序,默認啟動的順序應該為1,升級以后內核是往前面插入為0,打開並編輯 /etc/default/grub並設置GRUB_DEFAULT=0。一般新安裝的內核在第一個位置,所以設置default=0,意思是 GRUB 初始化頁面的第一個內核將作為默認內核。
接下來運行下面的命令來重新創建內核配置。
1 grub2-mkconfig -o /boot/grub2/grub.cfg 2 Generating grub configuration file ... 3 Found linux image: /boot/vmlinuz-4.18.5-1.el7.elrepo.x86_64 4 Found initrd image: /boot/initramfs-4.18.5-1.el7.elrepo.x86_64.img 5 Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64 6 Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img 7 Found linux image: /boot/vmlinuz-0-rescue-619aa3de60a746919cbffe30b3f3329b 8 Found initrd image: /boot/initramfs-0-rescue-619aa3de60a746919cbffe30b3f3329b.img 9 done 10 [root@localhost ~]#
然后reboot系統
再次查看內核版本號:
[root@localhost ~]# uname -sr Linux 4.18.5-1.el7.elrepo.x86_64 [root@localhost ~]#
內核升級完成!
當我們想開機手動選擇內核版本時候,將上一步的0改為1,1 是手動選擇在開機時候按方上下方向鍵 界面會停留在選擇內核的界面如圖所示:
完畢!