总结:我手误操作了grub-install
,然后“正确地”重新发布了它,将 /boot 文件系统作为目标,/dev/sda1
但它无法读取,grub/grub.conf
除非我使用 grub 提示工具明确告诉它在哪里查找。我该如何解决这个问题?
我有一个关键的 CentOS 5 系统,其中有多个不支持热插拔的硬盘。顺便说一句,这不是一个好主意。
第一个驱动器包含 /boot,然后是两个用于操作系统和数据的镜像 mdraid 分区。第二个驱动器仅包含两个 mdraid 分区。
第一个驱动器正在缓慢地损坏,因此我添加了第三个驱动器以防万一。我复制了第一个驱动器的分区布局,将其添加到 mdraid 镜像中,然后用于dd
将 sda1 克隆到 sdc1。
昨晚我遇到了硬件维护窗口,无论如何都需要重新启动机器,所以我想我会抓住机会将 sdc 切换到启动驱动器。由于我只复制了分区布局和第一个分区,而不是整个驱动器,所以我认为 sdc 不可启动。因此,在调整 fstab 后,我使 sdc1 可启动,并确保grub-install
grub 可以处理所有事情。
只是我手指笨拙地输入了命令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
进入启动菜单,但我本应该假定如果我一开始就正确地发出了命令,那么它就会立即看到菜单。
所以,我的关键系统运行良好。我近期只能重启一次,所以我想解决这个问题正确地。
所以,我的问题是:
- 当前启动进入 grub 但看不到任何配置的问题是否可以在不重新运行的情况下修复
grub-install
?我现在很害怕这件事。 - 如果我必须
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