赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 服务支持
  5. 实例无法启动问题
  6. Linux实例无法启动的解决方案
  7. Linux实例的grub启动配置错误

Linux实例的grub启动配置错误

  • Linux实例无法启动的解决方案
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

Linux实例无法启动,并且通过诊断工具检测到grub启动配置错误时,您可以通过实例健康诊断工具进行问题修复。

前提条件

ECS实例已通过实例健康诊断工具诊断出grub格式检查异常的问题。

背景信息

问题描述:Linux实例中grub配置异常,导致Linux系统启动失败。

问题原因:Linux实例的grub配置中有一项是根文件系统参数,如果此参数未指向系统盘上根文件系统所在的分区(例如/dev/vda1),或者所指定的UUID与系统盘上的根文件系统的UUID不匹配,那么系统启动时可能由于内核无法正确加载根文件系统,从而导致系统启动失败。

准备工作

本文提供的解决方案仅支持Legacy启动方式的Linux系统,不支持UEFI启动方式的Linux系统。因此在操作前需要检查下Linux是否为Legacy启动方式。

  1. 找到一个相同实例规格的Linux实例。

    如果您没有相同规格的Linux实例,也可以新建一个相同规格的Linux实例。具体操作,请参见自定义购买实例。

  2. 登录相同实例规格的ECS实例。具体操作,请参见使用VNC登录实例。

  3. 检查实例是否为Legacy启动方式。

    执行以下命令:

    ls /sys/firmware/

    返回结果如下所示:

    acpi  dmi  memmap  qemu_fw_cfg
    • 如果查询结果不存在EFI目录,表示本实例使用Legacy启动方式,后续处理请参见通过修复盘修复grub启动配置或通过中转实例修复grub启动配置。

    • 如果查询结果存在EFI目录,表示本实例使用UEFI启动方式,请提交工单。

通过修复盘修复grub启动配置

说明

此解决方案仅支持Legacy启动方式的Linux系统,不支持UEFI启动方式的Linux系统。

  1. 远程连接问题实例。
    当ECS实例处于正在挂载修复盘的模式下时,只能通过VNC远程连接。具体操作,请参见使用VNC登录实例。
  2. 查看问题实例原有系统盘的挂载信息。
    在临时挂载的修复盘中,问题实例原有系统盘的文件系统会被挂载到某一临时目录下。您可以通过以下任一方式查看所在的临时目录信息:
    • 在系统盘详情页的挂载实例进行查看,对应的临时目录格式示例为:/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,其中bp19bspzms79kqse****为实例原有系统盘的云盘序列号。
    • 在临时挂载的修复盘中,运行mount命令查看。例如,问题实例原有系统盘的设备路径为/dev/vda,命令示例如下所示:
      mount | grep /dev/vda
      返回结果如下所示:
      /dev/vda1 on /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse**** type ext4 (rw,relatime)
  3. 为了后续操作中grub2-mkconfig命令能够正常识别根分区系统,将当前系统上的/dev、/proc和/sys等虚拟文件系统挂载到chroot环境的根目录下。

    命令示例如下所示:

    mount --bind /dev /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****/dev
    mount --bind /proc /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****/proc
    mount --bind /sys /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****/sys
  4. 运行chroot命令,将根目录切换为问题实例原有系统盘所在的临时路径,并进入chroot环境。
    您需要在问题实例原有系统盘所在的临时路径中进行文件修复。例如,临时路径为/tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****,命令如下所示:
    chroot /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****
  5. 备份grub配置文件。

    将grub配置文件/boot/grub2/grub.cfg备份到/root/grub.cfg,以备后续误操作时可以恢复。

    cp /boot/grub2/grub.cfg /root/grub.cfg
  6. 重新生成grub配置文件。

    执行以下命令会自动识别根文件系统的UUID并写入grub配置文件。

    grub2-mkconfig -o /boot/grub2/grub.cfg
  7. 检查grub配置文件中根文件系统参数是否正确。

    命令示例如下所示:

    grep -n -E "(kernel|linux[16]*[efi]*)[[:space:]]+(/boot)?/vmlinuz-.*root=" /boot/grub2/grub.cfg /boot/grub2/grubenv

    返回结果如下所示:

    /boot/grub2/grub.cfg:99:     linux16 /boot/vmlinuz-3.10.0-514.26.2.el7.x86_64 root=UUID=48609326-10e3-40c2-93b3-3f0d9798**** ro crashkernel=auto   net.ifnames=0  console=tty0 console=ttyS0,115200n8
    /boot/grub2/grub.cfg:114:    linux16 /boot/vmlinuz-3.10.0-327.el7.x86_64 root=UUID=48609326-10e3-40c2-93b3-3f0d9798**** ro crashkernel=auto   net.ifnames=0  console=tty0 console=ttyS0,115200n8
    /boot/grub2/grub.cfg:128:    linux16 /boot/vmlinuz-0-rescue-36dc953195bb4389870d2591ff6bfea5 root=UUID=48609326-10e3-40c2-93b3-3f0d9798**** ro crashkernel=auto   net.ifnames=0  console=tty0 console=ttyS0,115200n8
  8. 修复完成后,退出修复环境,然后检查问题实例的当前状态。

    1. 运行exit命令,退出chroot环境。

    2. 卸载前面步骤中挂载的虚拟文件系统。

      命令示例如下所示:

      umount /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****/dev
      umount /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****/proc
      umount /tmp/ecs-offline-diagnose_disk-bp19bspzms79kqse****/sys
    3. 在ECS控制台的离线诊断页面,卸载修复系统并恢复问题实例至正常模式。

    4. 远程连接已修复的ECS实例,确认成功登录。

通过中转实例修复grub启动配置

您也可以将问题实例的系统盘卸载,然后挂载到中转实例(同地域的其他Linux实例),再修复grub启动配置。

  1. 卸载异常实例的系统盘,并将该云盘作为数据盘挂载到中转实例。具体操作,请参见如何通过挂载到ECS实例作为数据盘的方式登录异常系统盘的步骤一到步骤三章节。

    说明

    根据参考文档中操作,您只需要执行到mount /dev/vdb1 /mnt这一步骤,不需要执行chroot /mnt命令。如果已经执行chroot /mnt命令,请执行exit命令退出。

  2. 为了后续操作中grub2-mkconfig命令能够正常识别根分区系统,将当前系统上的/dev、/proc和/sys等虚拟文件系统挂载到chroot环境的根目录下。

    命令示例如下所示:

    mount --bind /dev /mnt/dev
    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
  3. 运行chroot命令,切换根目录并进入chroot环境。

    chroot /mnt

    此时您可以查看/dev、/proc和/sys等目录,应该已经包含正常ECS实例系统中对应内容的映射。

  4. 备份grub配置文件。

    将grub配置文件/boot/grub2/grub.cfg备份到/root/grub.cfg,以备后续误操作时可以恢复。

    cp /boot/grub2/grub.cfg /root/grub.cfg
  5. 重新生成grub配置文件。

    执行以下命令会自动识别根文件系统的UUID并写入grub配置文件。

    grub2-mkconfig -o /boot/grub2/grub.cfg
  6. 检查grub配置文件中根文件系统参数是否正确。

    命令示例如下所示:

    grep -n -E "(kernel|linux[16]*[efi]*)[[:space:]]+(/boot)?/vmlinuz-.*root=" /boot/grub2/grub.cfg /boot/grub2/grubenv

    返回结果如下所示:

    /boot/grub2/grub.cfg:99:     linux16 /boot/vmlinuz-3.10.0-514.26.2.el7.x86_64 root=UUID=48609326-10e3-40c2-93b3-3f0d9798**** ro crashkernel=auto   net.ifnames=0  console=tty0 console=ttyS0,115200n8
    /boot/grub2/grub.cfg:114:    linux16 /boot/vmlinuz-3.10.0-327.el7.x86_64 root=UUID=48609326-10e3-40c2-93b3-3f0d9798**** ro crashkernel=auto   net.ifnames=0  console=tty0 console=ttyS0,115200n8
    /boot/grub2/grub.cfg:128:    linux16 /boot/vmlinuz-0-rescue-36dc953195bb4389870d2591ff6bfea5 root=UUID=48609326-10e3-40c2-93b3-3f0d9798**** ro crashkernel=auto   net.ifnames=0  console=tty0 console=ttyS0,115200n8
  7. 修复完成后,退出修复环境,然后检查问题实例的当前状态。

    1. 运行exit命令,退出chroot环境。

    2. 卸载前面步骤中挂载的虚拟文件系统。

      命令示例如下所示:

      umount /mnt/dev
      umount /mnt/proc
      umount /mnt/sys
    3. 卸载异常ECS实例的系统盘。

      命令示例如下所示:

      umount /mnt
    4. 恢复异常ECS实例的系统盘。具体操作,请参见如何通过挂载到ECS实例作为数据盘的方式登录异常系统盘的步骤五。

    5. 远程连接已修复的ECS实例,确认ECS实例恢复正常。

相关文章

Linux实例中修改文件为Unix格式的方法 2025-04-01 12:00

在Linux实例中,如果一些关键文件的格式不是Unix格式,可能导致该实例无法被远程连接。您可以通过实例健康诊断工具进行问题修复。 前提条件 Linux实例已通过实例健

Linux实例中关键的系统用户不存在 2025-04-01 12:00

当Linux实例中关键的系统用户不存在时,可能导致无法远程登录。您可以通过实例健康诊断工具进行问题修复。 前提条件 Linux实例已通过实例健康诊断工具进行诊断,诊断结果中实

Linux实例的etcfstab文件配置错误导致系统启动异常问题解决方法 2025-04-01 12:00

在Linux系统中,/etc/fstab文件用于配置文件系统的自动挂载信息。如果未正确配置要自动挂载的文件系统信息或者存在已不可用的文件系统信息,重启系统后可能导致ECS实例的操作系统无法正常启动。

Linux实例的grub启动配置错误 2025-04-01 12:00

Linux实例无法启动,并且通过诊断工具检测到grub启动配置错误时,您可以通过实例健康诊断工具进行问题修复。 前提条件 ECS实例已通过实例健康诊断工具诊断出grub格式检查异常的问题。

Linux系统的ECS实例中,varlogmessages日志出现“EXT4-fs error (device XXX) __ext4_find_entryXXX”错误怎么办? 2025-04-01 12:00

本文介绍Linux系统的ECS实例中,/var/log/messages日志出现“EXT4-fs error (device XXX): __ext4_find_entry:XXX”错误的问题原因和解决方案。 问题现象 Linux系统的ECS实例中,

Linux系统的ECS实例中,系统日志中出现“blk_update_request IO error XXXX”错误怎么办? 2025-04-01 12:00

本文介绍在Linux系统的ECS实例中,/var/log/dmesg、/var/log/messages等日志中出现“blk_update_request: I/O error XXXX”错误的原因和解决方案。 问题现象

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号