CentOS7.6 升级 openEuler22.03-LTS-SP4失败

CentOS7.6 虚拟机升级 openEuler22.03-LTS-SP4 时失败,控制台报错如下:

[ ERROR ] - [upgrade] - [rebuild_boot] - grub2-install result log info is -> 正在为 i386-pc 平台进行安装。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
grub2-install:错误: ../grub-core/kern/fs.c:122:未知文件系统.
[ ERROR ] - [upgrade] - [rebuild_boot] - failed to rebuild grub by grub2-install
[ ERROR ] - [upgrade] - [rebuild_boot] - make upgrade grub failed,start to recover the environment
[ INFO ] - [upgrade] - [rebuild_boot] - start to restore system environment
[ INFO ] - [upgrade] - [rebuild_boot] - start to rollback /boot
[ INFO ] - [upgrade] - [rebuild_boot] - rollback /boot done
[ INFO ] - [upgrade] - [rebuild_boot] - start to umount some key dirs
[ INFO ] - [upgrade] - [rebuild_boot] - umount done
[ INFO ] - [upgrade] - [rebuild_boot] - grub2-install result log info is -> Installing for i386-pc platform.
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
错误:attempt to read or write outside of partition。
Installation finished. No error reported.
[ INFO ] - [upgrade] - [rebuild_boot] - restore system environment done
[ ERROR ] - [upgrade] - [rebuild_boot] - rebuild_boot execution failed
[ ERROR ] - [upgrade] - [rebuild_boot] - do_rebuild_boot failed
[ ERROR ] - [upgrade] - [rebuild_boot] - rebuild boot failed
[ ERROR ] - [upgrade] - [rebuild_boot] - upgrade failed
[ ERROR ] - [upgrade_entrance] - [upgrade]- do upgrade failed

答案内容由AI生成,仅供参考:

:white_check_mark: 总结:建议操作流程

  1. 停止自动化升级流程,避免反复失败破坏系统。
  2. 备份当前系统状态(快照或镜像)。
  3. 检查启动模式(BIOS/UEFI)和分区结构
  4. 确保 /boot 为独立标准分区,文件系统为 ext4 或 xfs
  5. 确认 grub2-toolsgrub2-common 版本兼容性
  6. 使用 x2openEuler 仅完成 CentOS → openEuler 22.03-LTS-SP4 的迁移
  7. 迁移完成后,再评估是否升级至更高版本(需单独规划)
点击此处查看详细分析解答

CentOS 7.6 升级至 openEuler 22.03-LTS-SP4 失败分析与解决方案

根据您提供的错误日志,系统在从 CentOS 7.6 虚拟机升级至 openEuler 22.03-LTS-SP4 时,在 rebuild_boot 阶段失败。核心问题出现在 GRUB2 引导程序的重建过程中。


:magnifying_glass_tilted_left: 错误现象总结

在升级过程中,控制台输出以下关键错误信息:

[ ERROR ] - [upgrade] - [rebuild_boot] - grub2-install result log info is → Installing for i386-pc platform.
错误: ../grub-core/kern/disk_common.c:26:尝试在分区之外进行读取或写入操作。
...
grub2-install:错误: ../grub-core/kern/fs.c:122:未知文件系统.
[ ERROR ] - [upgrade] - [rebuild_boot] - failed to rebuild grub by grub2-install
[ ERROR ] - [upgrade] - [rebuild_boot] - rebuild boot failed
[ ERROR ] - [upgrade] - [rebuild_boot] - upgrade failed

此外,系统尝试回滚 /boot 分区以恢复环境。


:puzzle_piece: 问题根源分析

结合错误日志和知识库内容,可定位出以下关键原因:

1. 磁盘写入越界:尝试在分区之外读写

错误: 尝试在分区之外进行读取或写入操作

  • 这通常表示 GRUB2 在安装到磁盘时,无法正确识别目标磁盘(如 /dev/sda)的分区结构。
  • 可能原因包括:
    • 虚拟机磁盘使用了 非标准分区表(如 GPT + BIOS 混用)。
    • /boot 分区大小不足或未正确挂载。
    • 使用了 LVM 或软 RAID,但 GRUB 未正确配置支持。
    • 虚拟化平台(如 VMware、VirtualBox)的磁盘控制器设置不兼容。
2. 文件系统不被支持:未知文件系统

../grub-core/kern/fs.c:122:未知文件系统

  • GRUB2 不支持目标 /boot 分区的文件系统类型。
  • 常见于:
    • /boot 分区使用了 XFSBtrfs 等较新文件系统,而旧版 GRUB2 模块缺失。
    • 或者 /boot 实际是 LVM 逻辑卷,但 grub2 缺少 lvm.mod 支持。
3. grub2-install 目标平台为 i386-pc(BIOS 模式)

Installing for i386-pc platform

  • 表示系统正在以 传统 BIOS 模式 安装引导程序。
  • 如果原系统是使用 UEFI 启动(例如较新的虚拟机模板),但 /boot/efi 分区未正确识别或挂载,则会导致 GRUB 安装到不正确的路径,从而引发 unknown filesystem 错误。

:white_check_mark: 解决方案建议

以下措施可依据实际情况逐一排查:


:white_check_mark: 1. 确保使用正确的启动模式(BIOS vs UEFI)
  • 检查目标虚拟机是否为 UEFI 启动
    • 若是 UEFI 模式,必须确保:
      • 存在一个 EFI 系统分区(ESP),通常为 FAT32 格式,挂载于 /boot/efi
      • 分区大小 ≥ 512MB。
      • x2openEuler 或升级脚本能识别并挂载该分区。
  • 若为 BIOS 模式,请确保 /boot 是独立的标准分区(非 LVM),推荐大小 ≥ 1GB。

:light_bulb: 建议:为避免兼容性问题,推荐在 BIOS 模式下使用标准 MBR 分区 + ext4 /boot


:white_check_mark: 2. 手动检查并修复 /boot 分区

在升级前,登录系统执行以下命令:

# 查看分区挂载情况
df -h | grep -E "(boot|efi)"

# 检查文件系统类型
blkid | grep -E "(boot|efi)"

# 确保 /boot 为 ext4 或 xfs(GRUB2 通常支持)

如果 /boot 是 LVM 逻辑卷,请确保已加载 LVM 模块:

# 检查是否加载 lvm 模块
lsmod | grep dm_mod

# 手动激活卷组
vgchange -ay

:white_check_mark: 3. 验证 grub2-commongrub2-tools 版本兼容性

根据知识库,grub2-common 包版本过低可能导致升级失败。

# 检查当前 grub2-tools 版本
rpm -q grub2-tools grub2-common

# 目标系统要求更高版本(如 2.04-8 或以上)

请确保源系统中已安装兼容版本,或在升级工具包中包含更新后的 GRUB 工具。


:white_check_mark: 4. 检查磁盘空间与分区布局
  • 至少保留:
    • /boot:≥ 1GB(推荐 2GB)
    • / 根分区:≥ 20GB
  • 使用 fdisk -lparted -l 检查是否有分区边界对齐问题(尤其是虚拟磁盘)。

:white_check_mark: 5. 避免使用 x2openEuler 直接跨大版本升级

根据知识库中的讨论(如参考 ID 1),从 CentOS 7openEuler 22.0324.03 是不推荐的链式升级路径。

:warning: openEuler 22.03 与 24.03 不完全兼容,不应通过 yum update 或 x2openEuler 直接跳转。

推荐路径

  • 使用 x2openEuler 仅用于 CentOS 7 → openEuler 22.03-LTS-SP4
  • 后续升级应参考官方迁移文档,而非直接 dnf/yum update

:white_check_mark: 6. 查看完整日志定位具体失败点

收集以下日志进一步分析:

# x2openEuler 升级日志(常见路径)
/usr/local/x2openEuler/portal/logs/backend/task_manager.log

# 系统日志
/var/log/messages
/var/log/boot.log

重点关注:

  • /boot/grub2/grub.cfg 是否生成成功
  • grub2-mkconfig 是否执行成功
  • grub2-install 是否尝试写入正确的设备(如 /dev/sda

:hammer_and_wrench: 临时规避方案:手动修复引导

若已失败,可尝试进入救援模式手动修复:

# 1. 重新生成 GRUB 配置
grub2-mkconfig -o /boot/grub2/grub.cfg

# 2. 重新安装 GRUB(根据实际架构选择)
grub2-install /dev/sda

# 3. 若为 UEFI,还需安装 EFI 版本
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=openEuler

确保 EFI 目录存在且挂载正确。


:books: 相关知识库支持点

问题 来源依据
GRUB 引导失败导致升级中断 CentOS 2 openEuler Upgrade 因缺失内核文件失败
grub2-editenv 缺失导致 GRUB 环境更新失败 grub2-editenv 在 initramfs 中不可用
grub.cfg 缺失导致启动失败 missing grub.cfg 被视为关键错误
GRUB 在虚拟机中无法检测第二块硬盘 grubhd1 检测问题报告
升级后 grubenv 重命名失败 Grub2InstallGrubenv 重命名失败

:white_check_mark: 总结:建议操作流程

  1. 停止自动化升级流程,避免反复失败破坏系统。
  2. 备份当前系统状态(快照或镜像)。
  3. 检查启动模式(BIOS/UEFI)和分区结构
  4. 确保 /boot 为独立标准分区,文件系统为 ext4 或 xfs
  5. 确认 grub2-toolsgrub2-common 版本兼容性
  6. 使用 x2openEuler 仅完成 CentOS → openEuler 22.03-LTS-SP4 的迁移
  7. 迁移完成后,再评估是否升级至更高版本(需单独规划)

若您能提供:

  • 系统是 BIOS 还是 UEFI 启动?
  • /boot 是否为独立分区?格式是什么?
  • 是否使用 LVM 或 RAID?

我们可以进一步给出针对性修复命令。