How to upgrade kernel for CentOS 7

步骤 1:检查已安装的内核版本

让我们安装了一个发行版,它包含了一个特定版本的内核。为了展示当前系统中已安装的版本,我们可以:

1
2
# uname -sr
Linux 3.10.0-862.2.3.el7.x86_64

步骤 2:在 CentOS 7 中升级内核

大多数现代发行版提供了一种使用 yum 等包管理系统和官方支持的仓库升级内核的方法。

但是,这只会升级内核到仓库中可用的最新版本 - 而不是在 https://www.kernel.org/ 中可用的最新版本。不幸的是,Red Hat 只允许使用前者升级内核。

与 Red Hat 不同,CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。

要在 CentOS 7 上启用 ELRepo 仓库,请运行:

1
2
[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

另一篇上说用这个:

1
[root@localhost ~]# rpm -Uvh http://elrepo.org/linux/kernel/el7/x86_64/RPMS/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

需要确认,但是我用上面一个是OK的。

仓库启用后,你可以使用下面的命令列出可用的内核相关包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* elrepo-kernel: hkg.mirror.rackspace.com
可安装的软件包
kernel-lt.x86_64 4.4.174-1.el7.elrepo elrepo-kernel
kernel-lt-devel.x86_64 4.4.174-1.el7.elrepo elrepo-kernel
kernel-lt-doc.noarch 4.4.174-1.el7.elrepo elrepo-kernel
kernel-lt-headers.x86_64 4.4.174-1.el7.elrepo elrepo-kernel
kernel-lt-tools.x86_64 4.4.174-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs.x86_64 4.4.174-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs-devel.x86_64 4.4.174-1.el7.elrepo elrepo-kernel
kernel-ml.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
kernel-ml-doc.noarch 4.20.10-1.el7.elrepo elrepo-kernel
kernel-ml-headers.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
kernel-ml-tools.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs-devel.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
perf.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
python-perf.x86_64 4.20.10-1.el7.elrepo elrepo-kernel
  • lt : long term support
  • ml : mainline stable

主线稳定版本:

1
kernel-ml.x86_64                           4.20.10-1.el7.elrepo         elrepo-kernel

接下来,安装最新的主线稳定内核:

1
[root@localhost ~]# yum --enablerepo=elrepo-kernel install kernel-ml

最后,重启机器并应用最新内核,接着运行下面的命令检查最新内核版本:

1
2
[root@localhost ~]# uname -sr
Linux 4.20.10-1.el7.elrepo.x86_64

步骤 3:设置 GRUB 默认的内核版本

为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置:

打开并编辑 /etc/default/grub 并设置 GRUB_DEFAULT=0

意思是 GRUB 初始化页面的第一个内核将作为默认内核。

1
2
3
4
5
6
7
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 rhgb quiet nouveau.modeset=0"
GRUB_DISABLE_RECOVERY="true"

接下来运行下面的命令来重新创建内核配置。

  1. 普通MBR引导模式
1
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
  1. UEFI引导模式
1
[root@localhost ~]# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

重启并验证最新的内核已作为默认内核。

步骤4:交换新旧版本kernel-headers

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[root@localhost ~]# yum --enablerepo=elrepo-kernel -y swap kernel-headers -- kernel-ml-headers
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* elrepo: elrepo.org
* elrepo-kernel: elrepo.org
* epel: ftp.jaist.ac.jp
* epel-debuginfo: ftp.tsukuba.wide.ad.jp
* epel-source: ftp.jaist.ac.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
Resolving Dependencies
--> Running transaction check
---> Package kernel-headers.x86_64 0:3.10.0-693.17.1.el7 will be erased
---> Package kernel-ml-headers.x86_64 0:4.20.10-1.el7.elrepo will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
kernel-ml-headers x86_64 4.20.10-1.el7.elrepo elrepo-kernel 1.2 M
Removing:
kernel-headers x86_64 3.10.0-693.17.1.el7 @updates 3.5 M

Transaction Summary
================================================================================
Install 1 Package
Remove 1 Package

Total download size: 1.2 M
Downloading packages:
kernel-ml-headers-4.20.10-1.el7.elrepo.x86_64.rpm | 1.2 MB 00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : kernel-ml-headers-4.20.10-1.el7.elrepo.x86_64 1/2
Erasing : kernel-headers-3.10.0-693.17.1.el7.x86_64 2/2
Verifying : kernel-ml-headers-4.20.10-1.el7.elrepo.x86_64 1/2
Verifying : kernel-headers-3.10.0-693.17.1.el7.x86_64 2/2

Removed:
kernel-headers.x86_64 0:3.10.0-693.17.1.el7

Installed:
kernel-ml-headers.x86_64 0:4.20.10-1.el7.elrepo

Complete!

步骤5:交换新旧版本kernel-tools-libs

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[root@localhost ~]# yum --enablerepo=elrepo-kernel -y swap kernel-tools-libs -- kernel-ml-tools-libs

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* elrepo: elrepo.org
* elrepo-kernel: elrepo.org
* epel: ftp.jaist.ac.jp
* epel-debuginfo: ftp.tsukuba.wide.ad.jp
* epel-source: ftp.jaist.ac.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
Resolving Dependencies
--> Running transaction check
---> Package kernel-ml-tools-libs.x86_64 0:4.20.10-1.el7.elrepo will be installed
---> Package kernel-tools-libs.x86_64 0:3.10.0-693.17.1.el7 will be erased
--> Processing Dependency: kernel-tools-libs = 3.10.0-693.17.1.el7 for package: kernel-tools-3.10.0-693.17.1.el7.x86_64
--> Running transaction check
---> Package kernel-tools.x86_64 0:3.10.0-693.17.1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
kernel-ml-tools-libs x86_64 4.20.10-1.el7.elrepo elrepo-kernel 58 k
Removing:
kernel-tools-libs x86_64 3.10.0-693.17.1.el7 @updates 18 k
Removing for dependencies:
kernel-tools x86_64 3.10.0-693.17.1.el7 @updates 259 k

Transaction Summary
================================================================================
Install 1 Package
Remove 1 Package (+1 Dependent package)

Total download size: 58 k
Downloading packages:
kernel-ml-tools-libs-4.20.10-1.el7.elrepo.x86_64.rpm | 58 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : kernel-ml-tools-libs-4.20.10-1.el7.elrepo.x86_64 1/3
Erasing : kernel-tools-3.10.0-693.17.1.el7.x86_64 2/3
Erasing : kernel-tools-libs-3.10.0-693.17.1.el7.x86_64 3/3
Verifying : kernel-ml-tools-libs-4.20.10-1.el7.elrepo.x86_64 1/3
Verifying : kernel-tools-libs-3.10.0-693.17.1.el7.x86_64 2/3
Verifying : kernel-tools-3.10.0-693.17.1.el7.x86_64 3/3

Removed:
kernel-tools-libs.x86_64 0:3.10.0-693.17.1.el7

Dependency Removed:
kernel-tools.x86_64 0:3.10.0-693.17.1.el7

Installed:
kernel-ml-tools-libs.x86_64 0:4.20.10-1.el7.elrepo

Complete!

步骤6:安装新版本kernel-ml-tools

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[root@localhost ~]# yum --enablerepo=elrepo-kernel -y install kernel-ml-tools
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* elrepo: elrepo.org
* elrepo-kernel: elrepo.org
* epel: ftp.jaist.ac.jp
* epel-debuginfo: ftp.tsukuba.wide.ad.jp
* epel-source: ftp.jaist.ac.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
Resolving Dependencies
--> Running transaction check
---> Package kernel-ml-tools.x86_64 0:4.20.10-1.el7.elrepo will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
kernel-ml-tools x86_64 4.20.10-1.el7.elrepo elrepo-kernel 152 k

Transaction Summary
================================================================================
Install 1 Package

Total download size: 152 k
Installed size: 350 k
Downloading packages:
kernel-ml-tools-4.20.10-1.el7.elrepo.x86_64.rpm | 152 kB 00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : kernel-ml-tools-4.20.10-1.el7.elrepo.x86_64 1/1
Verifying : kernel-ml-tools-4.20.10-1.el7.elrepo.x86_64 1/1

Installed:
kernel-ml-tools.x86_64 0:4.20.10-1.el7.elrepo

Complete!

步骤7:交换老旧版本kernel-devel

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[root@localhost ~]# yum --enablerepo=elrepo-kernel -y swap kernel-devel -- kernel-ml-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* elrepo: elrepo.org
* elrepo-kernel: elrepo.org
* epel: ftp.jaist.ac.jp
* epel-debuginfo: ftp.tsukuba.wide.ad.jp
* epel-source: ftp.jaist.ac.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
Resolving Dependencies
--> Running transaction check
---> Package kernel-devel.x86_64 0:3.10.0-693.17.1.el7 will be erased
---> Package kernel-ml-devel.x86_64 0:4.20.10-1.el7.elrepo will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
kernel-ml-devel x86_64 4.20.10-1.el7.elrepo elrepo-kernel 12 M
Removing:
kernel-devel x86_64 3.10.0-693.17.1.el7 @updates 36 M

Transaction Summary
================================================================================
Install 1 Package
Remove 1 Package

Total download size: 12 M
Downloading packages:
kernel-ml-devel-4.20.10-1.el7.elrepo.x86_64.rpm | 12 MB 00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : kernel-ml-devel-4.20.10-1.el7.elrepo.x86_64 1/2
Erasing : kernel-devel-3.10.0-693.17.1.el7.x86_64 2/2
Verifying : kernel-ml-devel-4.20.10-1.el7.elrepo.x86_64 1/2
Verifying : kernel-devel-3.10.0-693.17.1.el7.x86_64 2/2

Removed:
kernel-devel.x86_64 0:3.10.0-693.17.1.el7

Installed:
kernel-ml-devel.x86_64 0:4.20.10-1.el7.elrepo

Complete!

步骤8:删除老版本kernel

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
26
27
28
29
30
31
32
33
[root@localhost ~]# yum -y remove kernel

Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-693.17.1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Removing:
kernel x86_64 3.10.0-693.17.1.el7 @updates 59 M

Transaction Summary
================================================================================
Remove 1 Package

Installed size: 59 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Erasing : kernel-3.10.0-693.17.1.el7.x86_64 1/1
Verifying : kernel-3.10.0-693.17.1.el7.x86_64 1/1

Removed:
kernel.x86_64 0:3.10.0-693.17.1.el7

Complete!

至此,内核和相关的文件基本上都升级完成。

参考

  1. 如何在 CentOS 7 中安装或升级最新的内核
  2. How to install kernel 4.x on CentOS 7.x