意外错误地运行了 grub-install,现在有 grub 提示符但没有菜单

意外错误地运行了 grub-install,现在有 grub 提示符但没有菜单

总结:我手误操作了grub-install,然后“正确地”重新发布了它,将 /boot 文件系统作为目标,/dev/sda1但它无法读取,grub/grub.conf除非我使用 grub 提示工具明确告诉它在哪里查找。我该如何解决这个问题?


我有一个关键的 CentOS 5 系统,其中有多个不支持热插拔的硬盘。顺便说一句,这不是一个好主意。

第一个驱动器包含 /boot,然后是两个用于操作系统和数据的镜像 mdraid 分区。第二个驱动器仅包含两个 mdraid 分区。

第一个驱动器正在缓慢地损坏,因此我添加了第三个驱动器以防万一。我复制了第一个驱动器的分区布局,将其添加到 mdraid 镜像中,然后用于dd将 sda1 克隆到 sdc1。

昨晚我遇到了硬件维护窗口,无论如何都需要重新启动机器,所以我想我会抓住机会将 sdc 切换到启动驱动器。由于我只复制了分区布局和第一个分区,而不是整个驱动器,所以我认为 sdc 不可启动。因此,在调整 fstab 后,我使 sdc1 可启动,并确保grub-installgrub 可以处理所有事情。

只是我手指笨拙地输入了命令grub-install /dev/sda

它警告我未在 BIOS 驱动器列表中找到该驱动器,因此我假定它没有做任何有害的事情。我重新发出命令 targetting /dev/sda1,但得到了同样的错误。嗯。哦,它可能什么也没做,对吧?是的。不。

当系统重启后没有恢复时(在控制台上反复打印 GRUB GRUB GRUB),我知道我完蛋了。显然我所做的是令人恼火的常见

我将机器启动到一张实时 CD 中,用于dd清除 sda 和 sdc 上的 MBR,挂载 sda1 的 /boot 副本,发出正确的命令(包括要求它探测驱动器列表并提供实际的文件系统位置),然后重新启动。出现的是 grub shell。我能够发出root (hd0,0)configfile grub/grub.conf进入启动菜单,但我本应该假定如果我一开始就正确地发出了命令,那么它就会立即看到菜单。

所以,我的关键系统运行良好。我近期只能重启一次,所以我想解决这个问题正确地

所以,我的问题是:

  1. 当前启动进入 grub 但看不到任何配置的问题是否可以在不重新运行的情况下修复grub-install?我现在很害怕这件事。
  2. 如果我必须grub-install再次调用,正确的方法应该是什么?我曾经grub-install --recheck --root-directory=/path/to/sda1/boot /dev/sda1让它进入​​当前状态。

答案1

我有类似的配置:通常我在镜像 mdraid 分区上创建 /boot,然后在每个驱动器的 MBR 上安装 grub,以便在任何驱动器发生故障时服务器可以启动,其余部分(即除 MBR 程序阶段之外的所有内容)无论如何都会使用 mdraid 复制,

赶紧跑

grub-install --recheck /dev/sda
grub-install --recheck /dev/sdb

您需要在 MBR 上安装 grub,而不是第一个分区。它将拾取阶段 1.5 文件并启动内核,然后切换到 mdraid 分区的根目录等。

这是我的配置的样子,实际上没有什么特别的事情要做,是的,这是 Centos 6,但它是同样的事情:

设备图

[root@main ~]# cat /boot/grub/device.map 
# this device map was generated by anaconda
(hd0)     /dev/sda
(hd1)     /dev/sdb
(hd2)     /dev/sdc
(hd3)     /dev/sdd

菜单列表

[root@main ~]# cat /etc/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_main-lv_main_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/md0
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title CentOS (2.6.32-358.14.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.14.1.el6.x86_64 ro root=/dev/mapper/vg_main-lv_main_root rd_NO_LUKS LANG=en_US.UTF-8 rd_MD_UUID=7d8cff6b:744c0786:023226e9:536570ed rd_LVM_LV=vg_main/lv_main_root rd_LVM_LV=vg_main/lv_main_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM quiet
        initrd /initramfs-2.6.32-358.14.1.el6.x86_64.img

相关内容