概述
腾讯云的 CVM,安装了 CentOS 7.9 系统,查看内核版本。
1
2
|
# uname -r
3.10.0-1160.66.1.el7.x86_64
|
太低了点,因为最近研究 runc
和 criu
,所以内核必须在 5.2 以上,所以需要手动操作一下。
操作
下面的操作必须保证跟外网是正常连接的前提下,如果是想在国内环境搞的话,建议切换到国内的源,当然国内的源不一定有你想要的内核版本,源厂家也可能没有同步。
1
2
3
4
5
6
7
8
9
|
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# yum --disablerepo="*" --enablerepo="elrepo" list available
# 查看elrepo-kernel的版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 安装可能会稍微卡一下,耐心等待正常结束,默认会安装最新的版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" install -y kernel-ml kernel-devel kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel
grub2-set-default 0
sudo reboot
|
重启机器,再次检查,内核已经更新到最新版了。
1
2
|
# uname -r
5.18.5-1.el8.elrepo.x86_64
|
如何希望清理内核软件包,释放一些空间,可以执行下面的命令。
1
|
rpm -qa | grep kernel|grep -i 3.10 | xargs yum remove -y
|
在执行上面的 yum install
过程中,有可能会遇到下面的报错,解决的方法可以通过手动删除相关的包 yum remove -y kernel-headers-3.10.0-1160.71.1.el7.x86_64
,再重新执行。
在线升级内核
可以参考下面的文章 Kernel patching with kexec: updating a CentOS 7 kernel without a full reboot,归纳一下,正常来说如果 ssh
登录主机的 session 会断开,之所以叫不重启升级内核,不是说不影响所有服务,也不是完全意义的不重启,按照参考文章说,只是不是完整意义的重启,也就是不需要通过 reboot
命令来重启机器的意思,所以正常来说,通过 uptime
看,还是能看到内核启动的时间是有变化的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 这一步跟上面是一样的,都需要安装新的内核文件
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# 安装可能会稍微卡一下,耐心等待正常结束
yum remove -y kernel-headers kernel-tools kernel-tools-libs
yum --disablerepo="*" --enablerepo="elrepo-kernel" install -y kernel-ml kernel-devel kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel
yum --disablerepo="*" --enablerepo="elrepo-kernel" install -y kernel-ml.x86_64.0.5.4.230-1.el7.elrepo kernel-devel kernel-ml-headers kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel
# 查看新老版本
rpm -qa | grep kernel | sort
# 安装kexec-tools工具
yum install -y kexec-tools
kexec -u
# 这里/boot下面几个文件的具体名字取决于安装的内核的具体的版本,可以提前ls /boot查看一下
kexec -l /boot/vmlinuz-5.19.9-1.el7.elrepo.x86_64 --initrd=/boot/initramfs-5.19.9-1.el7.elrepo.x86_64.img --reuse-cmdline
systemctl kexec
|
查看内核日志,从内核日志也可以很明显看到重启机器在执行完 systemctl kexec
内核是会重新加载的。
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
|
# dmesg -T
[六 9月 17 14:28:34 2022] Linux version 5.19.9-1.el7.elrepo.x86_64 (mockbuild@Build64R7) (gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2), GNU ld version 2.32-16.el7) #1 SMP PREEMPT_DYNAMIC Thu Sep 15 09:00:56 EDT 2022
[六 9月 17 14:28:34 2022] Command line: root=UUID=4b499d76-769a-40a0-93dc-4a31a59add28 ro net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 crashkernel=2G-8G:256M,8G-16G:512M,16G-:768M intel_idle.max_cstate=1 intel_pstate=disable processor.max_cstate=1 amd_iommu=on iommu=pt
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR' [六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x020: 'AVX-512 opmask'
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x040: 'AVX-512 Hi256'
[六 9月 17 14:28:34 2022] x86/fpu: Supporting XSAVE feature 0x080: 'AVX-512 ZMM_Hi256'
[六 9月 17 14:28:34 2022] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
[六 9月 17 14:28:34 2022] x86/fpu: xstate_offset[3]: 832, xstate_sizes[3]: 64
[六 9月 17 14:28:34 2022] x86/fpu: xstate_offset[4]: 896, xstate_sizes[4]: 64
[六 9月 17 14:28:34 2022] x86/fpu: xstate_offset[5]: 960, xstate_sizes[5]: 64
[六 9月 17 14:28:34 2022] x86/fpu: xstate_offset[6]: 1024, xstate_sizes[6]: 512
[六 9月 17 14:28:34 2022] x86/fpu: xstate_offset[7]: 1536, xstate_sizes[7]: 1024
[六 9月 17 14:28:34 2022] x86/fpu: Enabled xstate features 0xff, context size is 2560 bytes, using 'compacted' format.
[六 9月 17 14:28:34 2022] signal: max sigframe size: 3632
[六 9月 17 14:28:34 2022] BIOS-provided physical RAM map:
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x0000000000000100-0x000000000009fbff] usable
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x0000000000100000-0x00000000bffddfff] usable
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x00000000bffde000-0x00000000bfffffff] reserved
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
[六 9月 17 14:28:34 2022] BIOS-e820: [mem 0x0000000100000000-0x000000013fffffff] usable
[六 9月 17 14:28:34 2022] NX (Execute Disable) protection: active
|
参考资料
- Kernel patching with kexec: updating a CentOS 7 kernel without a full reboot
- Linux CentOS内核升级
- 内核不同命名的介绍
- centos7和centos8的一些区别
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。