RHEL7 upgrade to RHEL8

# 上传目标升级版本的 iso 镜像,以 8.10 为例

# 1. 取消订阅管理(没有订阅红帽仓库源)并安装升级软件(升级过程可以放在 tmux 会话中)

cat /etc/yum/pluginconf.d/subscription-manager.conf

sed -i 's/1/0/' /etc/yum/pluginconf.d/subscription-manager.conf

yum install -y tmux leapp  leapp-upgrade-el7toel8

# 2. 预升级

# 预升级评估不会修改系统配置,但它消耗 /var/lib/leapp 目录中不可忽略的空间。在大多数情况下,预升级评估最多需要 4 GB 空间,但实际大小取决于您的系统配置。如果在托管的文件系统上没有足够的空间,预升级报告可能无法显示分析的完整结果。要防止问题,请确定您的系统在 /var/lib/leapp 目录中有足够的空间,或者将目录移到一个专用的分区,以便空间消耗不会影响系统的其他部分

# leapp 工具收集有关系统的数据,评估可升级性,并生成一个预升级报告,报告存放于 /var/log/leapp/ 目录下,名为 leapp-report.txt 文件

leapp preupgrade --no-rhsm --iso /root/rhel-8.10-x86_64-dvd.iso

# 预检级别如下, error 和 Inhibitors 级别是必需处理的

Errors

Inhibitors

HIGH severity reports

MEDIUM severity reports

LOW severity reports

INFO severity reports

# 3. 预检问题处理

# 3.1:Possible problems with remote login using root account

设置允许 root 远程登录 (将 PermitRootLogin 参数改为 yes 并重启 sshd 服务)

vim /etc/ssh/sshd_config 

systemctl restart sshd

# 3.2:Use of NFS detected. Upgrade can't proceed

注释 /etc/fstab 中的 nfs 挂载,并 umount 已挂载的 nfs

# 3.3:Missing required answers in the answer file

leapp answer --section remove_pam_pkcs11_module_check.confirm=True

# 3.4:grub 相关报错:

GRUB Legacy is used on the system

Failed to call grubby to list available boot entries.

File "/etc/default/grub" does not exist!

如果需要升级的 RHEL7 版本是由 RHEL6 升级而来并且没有将 grub 替换为 grub2,那么则需要进行 grub 替换

查询是否安装 grub2 grub2-tools grubby

rpm -qa | egrep "grub2|grub2-tools|grubby"

配置 grub
cat >/etc/default/grub <<EOF
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="\$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="$(grep '^\s*kernel /vmlinuz-3' /boot/grub/grub.conf | head -1 | sed -r -e 's,^\s*kernel /vmlinuz\S+ ,,' -e 's,\<root=\S+ ,,' -e 's,\<ro,,')"
GRUB_DISABLE_RECOVERY="true"
EOF

将 grub2 安装到物理磁盘。指定根目录所在磁盘 本示例为 sda

grub2-install /dev/sda

生成新的 grub 并重启生效

grub2-mkconfig -o /boot/grub2/grub.cfg && reboot

# 3.5:Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.

由于该模块在 rhel8 中不在支持,需要移除改模块,查询报告模块名称

cat /var/log/leapp/leapp-report.txt

示例:modprobe -r floppy pata_acpi && lsmod |grep -E 'floppy|pata_acpi'

# 4. 升级

执行 leapp preupgrade --no-rhsm --iso /root/rhel-8.10-x86_64-dvd.iso 后确保 Errors 和 Inhibitors 的值为0,然后执行:

leapp upgrade --no-rhsm --iso /home/rhel-8.10-x86_64-dvd.iso

# 5. 升级后的操作

从 /etc/dnf/dnf.conf 配置文件中的排除列表中删除任何剩余的 Leapp 软件包,包括 snactor 软件包。在原位升级过程中,使用 Leapp 工具安装的 Leapp 软件包会自动添加到 排除列表中,以防止删除或更新重要的文件。原位升级后,您必须在从系统中删除它们之前,从排除列表中删除这些 Leapp 软件包。

# 查看 exclude 

cat /etc/dnf/dnf.conf

# 删除对应软件包

 yum config-manager --save --setopt exclude=''

# 在原位升级过程中,Leapp 会将 SELinux 的模式设置为 permissive,且 firewalld 服务会被打开。确保升级完成后记得关闭 SELinux 和 firewalld 服务

# 删除旧版本内核,可能存在多个

cd /lib/modules && ls -d *.el7*

# 从旧内核中删除弱模块。如果您有多个旧内核,请对每个内核重复此步骤:

# 命令:[ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules --remove-kernel <version>

# 示例如下:

[ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules --remove-kernel 3.10.0-1160.el7.x86_64

# 从引导装载程序条目中删除旧内核。如果您有多个旧内核,请对每个内核重复此步骤:

# 示例如下:

/bin/kernel-install remove 3.10.0-1160.el7.x86_64 /lib/modules/3.10.0-1160.el7.x86_64/vmlinuz

# 删除旧内核软件包

rpm -qa | grep -e '.el[67]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | xargs yum remove -y

yum remove kernel-workaround kernel-3.10.0-1160.el7.x86_64

 将旧的救援内核和初始 RAM 磁盘替换为当前的内核和磁盘

ls /boot/vmlinuz-*rescue* /boot/initramfs-*rescue*

mv /boot/vmlinuz-*rescue* /boot/initramfs-*rescue* /opt/

/usr/lib/kernel/install.d/51-dracut-rescue.install add "$(uname -r)" /boot "/boot/vmlinuz-$(uname -r)"

# 验证

验证旧内核是否已从引导装载程序条目中删除

grubby --info=ALL | grep "\.el7" || echo "Old kernels are not present in the boot loader."

# 验证已为当前内核创建了之前删除的救援内核和救援初始 RAM 磁盘文件:

ls /boot/vmlinuz-*rescue* /boot/initramfs-*rescue*  输出如下:

/boot/initramfs-0-rescue-dd6065cbbe3d7f328b9eabc300000006.img

/boot/vmlinuz-0-rescue-dd6065cbbe3d7f328b9eabc300000006

# 输出结果是否为 OK 

lsinitrd /boot/initramfs-*rescue*.img | grep -qm1 "$(uname -r)/kernel/" && echo "OK" || echo "FAIL"

验证救援引导条目是否指向现有救援文件。请查看 grubby 输出:

grubby --info $(ls /boot/vmlinuz-*rescue*)  输出结果示例如下:

index=1

kernel="/boot/vmlinuz-0-rescue-dd6065cbbe3d7f328b9eabc300000006"

args="ro rd.luks=0 rd.locale.LANG=en_US.UTF-8 rd.md=0 rd.lvm.lv=VolGroup/lv_swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=VolGroup/lv_root KEYBOARDTYPE=pc vconsole.keymap=us rd.dm=0 rhgb quiet crashkernel=auto LANG=en_US.UTF-8 $tuned_params"

root="/dev/mapper/VolGroup-lv_root"

initrd="/boot/initramfs-0-rescue-dd6065cbbe3d7f328b9eabc300000006.img $tuned_initrd"

title="Red Hat Enterprise Linux (0-rescue-dd6065cbbe3d7f328b9eabc300000006) 8.10 (Ootpa)"

id="dd6065cbbe3d7f328b9eabc300000006-0-rescue"

posted @ 2025-11-26 09:36  demoduan  阅读(1)  评论(0)    收藏  举报