Centos

意外執行 grub-install 不正確,現在有 grub 提示但沒有菜單

  • August 21, 2013

tl;博士:我粗心大意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 驅動器列表中找不到驅動器的警告,所以我認為它沒有做任何有害的事情。我重新發出了命令定位/dev/sda1,但得到了同樣的錯誤。唔。哦,好吧,它可能什麼也沒做,對吧?是的。不。

當系統在重新啟動後沒有恢復時(在控制台上一遍又一遍地列印 GRUB GRUB GRUB),我知道我被搞砸了。顯然,我所做的事很常見

我將機器啟動到一張 live CD 中,用於dd對 sda 和 sdc 上的 MBR 進行核對,安裝 sda1 的 /boot 副本,發出正確的命令(包括要求它探測驅動器列表並提供實際的文件系統位置),並且重新啟動。出現的是蠐螬殼。我能夠發出root (hd0,0)configfile grub/grub.conf進入啟動菜單,但我會假設如果我正確發出命令開始,那麼它會立即看到菜單。

所以,我的關鍵系統執行良好。我只能在不久的將來重新啟動它一次,所以我想正確處理這個問題。

所以,我的問題:

  1. 目前的引導進入 grub-but-not-seeing-any-configuration 是否可以在不重新執行的情況下修復grub-install?我現在很害怕這件事。
  2. 如果我必須grub-install再次呼叫,正確的方法應該是什麼?我曾經grub-install --recheck --root-directory=/path/to/sda1/boot /dev/sda1把它變成現在的狀態。

我有類似的配置:通常我在鏡像 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

菜單.lst

[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

引用自:https://serverfault.com/questions/532365