Как установить grub на новый диск?

У меня есть виртуальная коробка, работающая с CentOS, я прикрепляю новый диск к существующей виртуальной машине centos и пытаюсь установить grub на этот недавно подключенный виртуальный диск. Позже я открою вторую виртуальную машину с недавно подготовленным загрузочным жестким диском с пользовательской корневой файловой системой и ядром.

Я пробовал следующие шаги,

  • Присоединение нового виртуального диска к существующей рабочей системе centos.
  • Создал новый раздел с fdisk /dev/sdb . При порционировании, учитывая параметры первичного раздела, номер раздела 1 и другие параметры по умолчанию.
  • Отформатирован диск с помощью mkfs.ext3 /dev/sdb1 .
  • /media/new_drive диск в /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 VM висит с черным экраном только с текстовым GRUB .

Почему grub-install / dev / sdb1 не модифицирует MBR для sdb1? Разве это не правильный способ установки grub на новый диск?

Я не эксперт grub2 (извините), но попробуйте добавить --skip-fs-probe в вашу строку для установки grub. Я обнаружил, что это предотвращает создание /boot/grub/device.map что может привести к загрузке запроса grub , Я думаю, что без этого параметра grub-install вместо того, чтобы делать то, что вы говорите, думает, что он умнее вас, и может сделать что-то другое.

Другое дело – убедиться, что вы используете правильную grub-install (т.е. для grub2, а не для оригинальной grub). Это не проблема, если вы находитесь внутри Centos, но с SystemRecoveryCD доступны обе версии, поэтому вам нужно использовать grub2-install . Я узнал на своей шкуре…

И как отметил @Wurtel (kudos), вы должны указать диск, а не раздел. Grub2 устанавливается в секторе 0 всего диска, и этот «заглушка» – это то, что выполняется во время загрузки, но ему нужно знать, где находится на диске, он должен установить файлы для следующего этапа загрузки – вот что: --root-directory . (Я думаю.)

Чтение man grub-install и googling Я вижу, что --root-directory не предназначен для использования в версиях grub2 версии 1.99 ++, хотя он работает в моем опыте. Вы должны использовать --boot-directory и ссылаться на фактический каталог загрузки, поэтому это даст вам:

 grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot