背景
买到的设备安装Centos7系统,但是新的处理器已经不支持低版本的Linux内核了。而且在 CentOS 使用过程中,高版本的应用环境可能需要更高版本的内核才能支持,所以难免需要升级内核。
内核种类
关于内核种类:
kernel-ml:
kernel-ml 中的ml是英文【 mainline stable 】的缩写,elrepo-kernel中罗列出来的是最新的稳定主线版本。
kernel-lt:
kernel-lt 中的lt是英文【 long term support 】的缩写,elrepo-kernel中罗列出来的长期支持版本。ML 与 LT 两种内核类型版本可以共存,但每种类型内核只能存在一个版本。
升级步骤
先在机器上安装好Centos7, 然后正常启动会遇上Kernel panic无法启动的问题.这个问题的主要原因是Centos7默认的Kernel 3.10不支持Ryzen, 需要安装5.2以上版本才能支持.
由于系统无法正常启动,这个时候需要用iso启动一个Rescue系统进去安装内核。用Centos7的Rescue或者用systemrescuecd都可以.
启动救援模式
当CentOS操作系统崩溃,无法正常启动时,可以通过救援模式或者紧急模式进行系统登录。
启动界面
启动CentOS, 当出现下面界面时,按e进入编辑界面。
修改参数:救援模式
在编辑界面里,加入参数:systemd.unit=rescue.target ,然后Ctrl-X启动进入救援模式。
修改参数:紧急模式
在编辑界面里,加入参数:systemd.unit=emergency.target, 然后Ctrl-X进入紧急模式。
模式切换
救援模式与紧急模式可以相互切换:
Switch to Emergency mode(target)
To switch to Emergency target, simply run following command as root:# systemctl emergencyBroadcast message from root@geeklab on pts/1 (Mon 2016-08-17 00:44:58 EDT):The system is going down to emergency mode NOW!
Switch to Rescue mode(target)
To switch to rescue target, simply run following command as root:# systemctl rescueBroadcast message from root@geeklab on pts/0 (Mon 2016-08-17 00:22:44 EDT):The system is going down to rescue mode NOW!
安装内核
启动好Rescue后的处理步骤大致如下:
导入yum源
# 1、更新yum源仓库
yum -y update
# 2、导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 3、安装ELRepo仓库的yum源
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# 4、查询可用内核版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
挂载升级
mount /dev/磁盘分区/mnt ;
cd /mnt
mount -o bind /dev dev/
mount -o bind /sys sys/
mount -o bind /proc proc/
mount -o bind /sys sys/
chroot /mnt
chroot后就可以用yum进行安装高版本的内核了.
如果是chroot进去后可以用mknod创建文件:
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
1. 查看版本
查看当前内核版本信息
uname -a
# 仅查看版本信息
uname -r
# 通过绝对路径查看查看版本信息及相关内容
cat /proc/version
# 通过绝对路径查看查看版本信息
cat /etc/redhat-release
2. 选择安装
选择 ML 或 LT 版本安装
# 安装 最新版ML 版本
# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
# 安装 最新版LT 版本
# yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y# 不带版本号就安装最新版本,这里我们安装 LT 5.4.225-1.el7.elrepo版本
# 安装 LT 版本,K8S全部选这个
yum --enablerepo=elrepo-kernel install kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64 kernel-lt-5.4.225-1.el7.elrepo.x86_64 -y
直接升级
不选择版本,Centos7.8后可以安装官方的5.4内核:
yum -y update centos-release
yum install -y yum-utils epel-release
yum-config-manager --enable centos-kernel
yum install kernel -y
安装完成后需要设置 grub2,即内核默认启动项。
设置启动
内核安装好后,需要设置 grub2即设置为默认启动选项并重启后才会生效。
查看系统上的所有可用内核:
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
刚刚安装的内核即0 : CentOS Linux (5.4.225-1.el7.elrepo.x86_64) 7 (Core)
我们需要把grub2默认设置为0
可以通过 grub2-set-default 0
命令或编辑 /etc/default/grub
文件来设置
方法1:通过 grub2-set-default 0 命令设置
grub2-set-default 0
方法2:编辑 /etc/default/grub 文件
# 将GRUB_DEFAULT设置为0,如下
vim /etc/default/grub
生成配置
生成 grub 配置文件。
GRUB2 的配置文件通常为 /boot/grub2/grub.cfg,虽然此文件很灵活,但是我们并不需要手写所有内容。可以通过程序自动生成,或是直接修改生成之后的文件。通常情况下简单配置文件 /etc/default/grub
,然后用程序 grub-mkconfig
来产生文件 grub.cfg
。
grub2-mkconfig -o /boot/grub2/grub.cfg或grub2-mkconfig --output /boot/grub2/grub.cfg一样的。
重启
# 重启(默认30秒)
reboot
# 立即重启
reboot -h now
验证
验证是否升级成功
uname -a
# 仅查看版本信息
uname -r
# 通过绝对路径查看查看版本信息及相关内容
cat /proc/version
# 通过绝对路径查看查看版本信息
cat /etc/redhat-release
删除旧内核(可选)
查看系统中的全部内核,确认升级完重启, 可以卸载3.10的内核了.
rpm -qa | grep kernel
# yum remove kernel-版本
yum remove kernel-3.10.0-1160.el7.x86_64 kernel-3.10.0-1160.71.1.el7.x86_64 kernel-tools-3.10.0-1160.71.1.el7.x86_64 kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64
或者
yum remove $(rpm -qa | grep kernel | grep "3\.10")
补充:
也可以离线rpm安装:
查找 kernel rpm 历史版本:Coreix Mirrors
下载内核 RPM
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.225-1.el7.elrepo.x86_64.rpm
安装内核
rpm -ivh kernel-lt-5.4.225-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm
确认已安装内核版本
rpm -qa | grep kernel
之后步骤如上。