Linux

如何在新驅動器上安裝 GRUB?

  • September 19, 2021

我有一個執行 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

引用自:https://unix.stackexchange.com/questions/191218