Skip to main content

使用 yum 升级 CentOS 7 内核版本(Elrepo)

升级到发行版官方最新版

没啥好说的,升级到发行版官方最新内核。

sudo yum list kernel
sudo yum update -y kernel


升级到 ELRepo 最新版

ELRepo 包含四个通道,我们要用到即为内核通道。

ELRepo 项目专注于硬件相关的软件包,以增强您使用 Enterprise Linux 的体验。这包括文件系统驱动程序、图形驱动程序、网络驱动程序、声音驱动程序、网络摄像头和视频驱动程序。

elrepo-kernel 通道使用源代码提供长期支持内核和最新的稳定主线内核。
请参阅 kernel-lt  kernel-ml 页面以获取更多详细信息。
此通道可以在 /etc/yum.repos.d/elrepo.repo 文件中启用或与 'yum --enablerepo=elrepo-kernel' 一起使用。

内核配置基于默认的 RHEL 配置,并酌情启用了附加功能。这些包被有意命名为 kernel-lt/ml,以免与默认 RHEL 内核冲突,因此,它们可以与常规内核一起安装和更新。

这些软件包按“原样”提供,不提供任何暗示担保或支持。使用 kernel-lt/ml 可能会使您的系统面临安全、性能和或数据损坏问题。由于 ELRepo 项目可能无法及时更新,最终用户有最终责任决定是否继续在常规服务中使用 kernel-lt/ml 软件包。这些包没有为 SecureBoot 签名。

摘自 https://elrepo.org (经过翻译)


1.安装源

升级到 elrepo 的最新内核,通常也就是最新版。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  • 安装公钥;
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
  • 安装 ELRepo 源(Centos 7);
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
  • 缓存 elrepo-kernel 部分的元数据,不做也行;
yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*
  • 看看有什么版本能装,想更新到最新不必执行;

当前最新内核列表可以到 kernel.org 查看,elrepo 源会慢一点点。


2.安装内核
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64
  • 安装最新版本的 kernel-ml (最新稳定版)
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-devel.x86_64
  • 安装最新版本的 kernel-ml-devel (开发工具)


  • kernel-ml(mainline stable),elrepo-kernel 中代表的是最新的稳定主线版本。对应 kernel.org 的 stable 和 mainline 版;
  • kernel-lt(long term support),elrepo-kernel 中代表的是最新的长期支持版本。对应 kernel.org 的 longterm 版;

3.升级内核工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64
  • 删除老版本的内核工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64
  • 安装新版本的内核工具包


4.设置为默认内核

仅 Centos 7 需要,Centos 8 及以后已不需要更改内核启动顺序。

传统 BIOS 启动

grub2-set-default 0
grub2-mkconfig -o /etc/grub2.cfg
  • 启动时自动选择第一个内核
  • 重新生成启动配置,会自动将新内核排到第一个,因此即使你是远程机器,也会自动使用。

现代 UEFI 启动

grub2-set-default 0
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg


5.安全启动?

详见 https://elrepo.org/wiki/doku.php?id=secureboot

6.手动删除旧内核

虽然 yum 会自动保留一定数量的内核并删掉多余的,但是有时候还是会空间不足,比如:
installing package kernel-core-4.18.0-553.8.1.el8_10.x86_64 needs 2MB on the /boot filesystem

这时候你可以把 /etc/yum.conf 中的 installonly_limit 调小。
例如,installonly_limit=3 将在系统上维护 3 个内核包。达到 3 个包以后,最旧的版本会在你下一次操作时被删除。
当然,你不能设置 installonly_limit=1,因为这会使 yum 删除正在运行的内核

如果你已经空间不足,那么就需要手动删除旧内核:

首先查看系统上有哪些内核包

rpm -qa | grep kernel

然后用通配符删除指定版本即可,比如要删除 6.8.8-1 版本:

yum remove kernel-*6.8.8-1*

 

 

日后一键操作

传统 BIOS 启动

yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-devel.x86_64
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64
grub2-set-default 0
grub2-mkconfig -o /etc/grub2.cfg

现代 UEFI 启动

yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-devel.x86_64
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64
grub2-set-default 0
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

不设置启动项(CentOS 8+)

yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-devel.x86_64
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64