CentOS7升级Linux内核
CentOS7升级Linux内核
什么是Linux内核
虽然时候使用 Linux 来表示整个操作系统,严格地说,Linux 只是个内核,而发行版的操作系统是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库。在正常操作期间,内核负责执行两个重要任务:
- 作为硬件和系统上运行的软件之间的接口
- 尽可能高效地管理系统资源
为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信。例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,内核又会使用正确的驱动程序连接到网络。随着新的设备和技术更新,如果想充分利用它们,保持最新的内核就很重要。此外,更新内核更好的利用新的内核函数,并保护系统免受先前版本中发现的漏洞的攻击。
查看正在使用的内核版本
命令行执行 uname -sr
- [root@hadoop104 ~]# uname -sr
- Linux 5.4.123-1.el7.elrepo.x86_64
查看所有已安装的内核版本
在CentOS操作系统启动时会有一个界面展示所有已安装的Linux内核,可以通过键盘上的上下箭头按键控制启动操作系统所使用的内核版本,如果不做任何操作会等待几秒钟自动现在默认的内核版本
yum在线升级ELRepo仓库中最新内核版本
通过yum install -y kernel直接升级内核是最保险的升级方式,因为安装的是操作系统发行厂商验证过兼容性的rpm包,升级风险一般很小。但是,这只会升级内核到仓库中可用的最新版本,而不是在 https://www.kernel.org/ 中可用的最新版本,Red Hat (红帽linux系统)只允许使用yum方式升级内核。与 Red Hat 不同的是CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。
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 --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- [root@localhost ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- Retrieving http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- Retrieving http://elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
- Preparing... ################################# [100%]
- Updating / installing...
- 1:elrepo-release-7.0-4.el7.elrepo ################################# [ 50%]
- Cleaning up / removing...
- 2:elrepo-release-7.0-3.el7.elrepo ################################# [100%]
仓库启用后,可以使用下面的命令列出可用的内核相关包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
- [root@localhost ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
- Loaded plugins: fastestmirror
- Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
- Loading mirror speeds from cached hostfile
- * elrepo-kernel: mirrors.neusoft.edu.cn
- Available Packages
- kernel-lt.x86_64 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-lt-devel.x86_64 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-lt-doc.noarch 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-lt-headers.x86_64 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-lt-tools.x86_64 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-lt-tools-libs.x86_64 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-lt-tools-libs-devel.x86_64 4.4.166-1.el7.elrepo elrepo-kernel
- kernel-ml-devel.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
- kernel-ml-doc.noarch 4.19.8-1.el7.elrepo elrepo-kernel
- kernel-ml-headers.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
- kernel-ml-tools.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
- kernel-ml-tools-libs.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
- kernel-ml-tools-libs-devel.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
- perf.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
- python-perf.x86_64 4.19.8-1.el7.elrepo elrepo-kernel
安装最新的主线稳定内核
执行命令安装最新版本的内核
yum --enablerepo=elrepo-kernel install kernel-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=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
- 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
- Generating grub configuration file ...
- Found linux image: /boot/vmlinuz-5.4.160-1.el7.elrepo.x86_64
- Found initrd image: /boot/initramfs-5.4.160-1.el7.elrepo.x86_64.img
- Found linux image: /boot/vmlinuz-4.19.8-1.el7.elrepo.x86_64
- Found initrd image: /boot/initramfs-4.19.8-1.el7.elrepo.x86_64.img
- Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
- Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
- Found linux image: /boot/vmlinuz-0-rescue-3ff67f2764b042908e12a7b7b8a73c2d
- Found initrd image: /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: command not found
- make[1]: *** [include/generated/timeconst.h] Error 1
- make: *** [prepare0] Error 2
缺少bc工具,执行yum命令安装
yum install bc –y
错误2
- scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
- #include <openssl/bio.h>
- ^
- compilation terminated.
- 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY