如何在新驅動器上安裝 GRUB?
我有一個執行 CentOS 的虛擬機。
我已經將一個新的虛擬磁碟附加到現有的 CentOS VM 上,現在我正在嘗試在這個新附加的磁碟上安裝 GRUB。
稍後,我將使用新準備的可引導硬碟啟動第二個 VM,該硬碟具有自定義根文件系統和核心。
我嘗試了以下步驟:
- 將一個新的虛擬磁碟附加到現有的 CentOS 機器上。
- 用 . 創建了一個新分區
fdisk /dev/sdb
。分區時,我選擇了選項主分區、分區號 1 和其他預設選項。- 用 . 格式化磁碟
mkfs.ext3 /dev/sdb1
。- 將磁碟安裝到
/media/new_drive
.- 安裝了 GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
。之後,第二台新準備的硬碟虛擬機沒有啟動;我得到了錯誤:
could not read from the boot medium
。之後似乎 MBR 沒有更新,但我可以看到新驅動器grub-install
下安裝了 GRUB 。/boot/grub
但最糟糕的是,它破壞了我現有的 CentOS GRUB:CentOS 虛擬機掛起,顯示黑屏,唯一的文本是
GRUB
.為什麼不
grub-install /dev/sdb1
修改sdb1的MBR?這不是在新驅動器上安裝 GRUB 的正確方法嗎?
我不是 grub2 專家(對不起),但嘗試添加
--skip-fs-probe
到您的 grub-install 行,我發現這會阻止創建/boot/grub/device.map
可能導致引導到 grub 提示符的創建。我認為沒有這個參數的grub-install,不是按照你說的去做,而是認為它比你聰明,可能會做一些不同的事情。另一件事是確保您使用的是正確的 grub-install(即用於 grub2 而不是用於原始 grub)。如果您在 Centos 中,這不是問題,但使用 SystemRecoveryCD 兩個版本都可用,因此您必須使用
grub2-install
. 我學得很辛苦…正如@wurtel 指出的那樣(贊),您應該指定一個驅動器而不是分區。Grub2 安裝在整個磁碟驅動器的第 0 扇區,這個“存根”是在引導時執行的,但它需要知道磁碟上的位置,它應該為下一階段的引導安裝文件——這就是
--root-directory
參數為了。(我認為。)閱讀
man grub-install
和Google搜尋我發現這--root-directory
並不是真的要用於 grub2 版本 1.99++,儘管它在我的經驗中確實有效。您應該使用--boot-directory
並參考實際的引導目錄,因此這將為您提供:grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot