引用:centos7升级内核至最新

应用背景

最近在接触docker,其对内核版本要求较高,就连目前使用的centos7.x默认内核版本为3.10.0-xxx,也是刚好满足其最低要求,故借此机会记录一下升级内核的操作步骤。

操作步骤

小版本升级

  1. 查看当前和可升级版本

    1
    2
    3
    4
    5
    6
    7
    8
    yum list kernel

    # 以下是输出
    Installed Packages
    # 当前版本(有下划线标识)
    kernel.x86_64 3.10.0-327.el7 @anaconda
    Available Packages
    kernel.x86_64 3.10.0-514.16.1.el7 updates

  2. 升级

    1
    yum update kernel -y
  3. 重启并检查

    1
    2
    reboot  
    uname -r

大版本升级

  1. 载入公钥

    1
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  2. 升级安装ELRepo

    1
    2
    rpm -Uvh \
    http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

  3. 载入elrepo-kernel元数据

    1
    yum --disablerepo=\* --enablerepo=elrepo-kernel repolist

  4. 查看可用的rpm包

    说明:

    • lt :long term support,长期支持版本
    • ml:mainline,主线版本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*

    # 以下是输出
    Installed Packages
    # 当前版本(有下划线标识)
    kernel.x86_64 3.10.0-327.el7 @anaconda
    kernel-tools.x86_64 3.10.0-327.el7 @anaconda
    kernel-tools-libs.x86_64 3.10.0-327.el7 @anaconda

    Available Packages
    # 安装目标版本
    kernel-lt.x86_64 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-lt-devel.x86_64 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-lt-doc.noarch 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-lt-headers.x86_64 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-lt-tools.x86_64 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-lt-tools-libs.x86_64 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-lt-tools-libs-devel.x86_64 4.4.231-1.el7.elrepo elrepo-kernel
    kernel-ml.x86_64 5.7.10-1.el7.elrepo elrepo-kernel
    kernel-ml-devel.x86_64 5.7.10-1.el7.elrepo elrepo-kernel
    kernel-ml-doc.noarch 5.7.10-1.el7.elrepo elrepo-kernel
    kernel-ml-headers.x86_64 5.7.10-1.el7.elrepo elrepo-kernel
    kernel-ml-tools.x86_64 5.7.10-1.el7.elrepo elrepo-kernel
    kernel-ml-tools-libs.x86_64 5.7.10-1.el7.elrepo elrepo-kernel
    kernel-ml-tools-libs-devel.x86_64 5.7.10-1.el7.elrepo elrepo-kernel

  5. 安装你选择的目标版本的kernel

    1
    yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt.x86_64 -y

  6. 删除旧版本工具包

    1
    yum remove kernel-tools.* -y

  7. 安装新版本工具包

    1
    2
    yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt-tools.* \
    -y --skip-broken

  8. 查看内核插入顺

    1
    2
    3
    4
    5
    6
    awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

    # 以下是输出
    0 : CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)
    1 : CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
    2 : CentOS Linux (0-rescue-6f16a7323dcc49f69530668d8e1df48c) 7 (Core)

    说明:默认新内核是从头插入,默认启动顺序也是从0开始(当前顺序还未生效),或者使用:

    1
    2
    3
    4
    5
    6
    grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2

    # 以下是输出
    CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)
    CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
    CentOS Linux (0-rescue-6f16a7323dcc49f69530668d8e1df48c) 7 (Core)

    其中文件/etc/grub2.cfg/boot/grub2/grub.cfg内容一致

  9. 查看当前实际启动顺序

    1
    2
    3
    4
    grub2-editenv list

    # 以下是输出
    saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
  10. 设置默认启动

    1
    2
    3
    4
    5
    6
    7
    # 来源 => 第8步【查看内核插入顺】
    grub2-set-default 'CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)'
    # 查看当前实际启动顺序
    grub2-editenv list

    # 以下是输出
    saved_entry=CentOS Linux (4.4.231-1.el7.elrepo.x86_64) 7 (Core)

    或者直接设置数值

    1
    2
    3
    4
    # 0代表当前第一行,也就是上面的4.20.12版本那一行内容
    grub2-set-default 0
    grub2-editenv list
    saved_entry=0
  11. 重启并检查

    1
    2
    3
    4
    5
    reboot
    uname -r

    # 以下是输出(说明成功)
    4.4.231-1.el7.elrepo.x86_64