Grub2 вообще не обнаруживает никаких устройств

У меня есть образ жесткого диска 1 ГБ (созданный с помощью bximage для Bochs), на который я хочу установить Grub 2.

Я понимаю, что установка Grub состоит из 3 частей:

  • Образ boot.img, который занимает первый сектор
  • Образ core.img, который занимает место после первого сектора до начала следующей дорожки
  • И каталог / boot / grub /, в котором находятся grub.cfg и другие модули.

Сначала я использую образ boot.img из моего собственного каталога Linux / boot / grub /.

После этого я генерирую свой образ core.img с помощью следующей команды:

sudo grub-mkimage -v --format = i386-pc -o core.img -p \ (hd0, msdos1 \) / boot / grub ls ext2 part_msdos

И чтобы установить их в окончательный образ диска, я использую следующие команды:

  • sudo dd if = boot.img of = / dev / loop0 bs = 446 count = 1 размер блока 446 используется, чтобы не перезаписывать данные раздела, находящиеся в MBR
  • sudo dd if = core.img of = / dev / loop0 bs = 512 seek = 1 и здесь seek = 1 предназначен для того, чтобы не перезаписывать только что записанную MBR.

Диск, начиная с сектора 2048 и заканчивая последним, отформатирован с использованием раздела ext2 и содержит каталог boot / grub /, содержащий файл grub.cfg (с одним фальшивым элементом меню, который ничего не загружает) и модули в каталоге / boot / grub / i386-pc /.

Bochs успешно загружает эту установку grub вплоть до приглашения grub>. Как указано в В этом руководстве Ubuntu , такое поведение указывает на то, что grub.cfg не был найден.

После вызова ls я столкнулся с интересной проблемой - у меня вообще нет подключенных устройств!

Чтобы подробнее объяснить суть проблемы, я заметил, что при загрузке образа grub-mkrescue с подчиненного диска при вызове ls отображался собственный аварийный диск ] и ранее «несуществующий» основной диск вместе с разделом ext2. Я убедился, что /boot/grub.cfg действительно доступен.

Исходя из этого наблюдения, я мог бы предположить, что в моем собственном core.img отсутствует какой-то фундаментальный модуль или функциональность. Но что и как мне это исправить?


Я также провел это упражнение на физической машине, используя USB-накопитель, и произошло то же самое, поэтому я могу подтвердить, что проблема не в Bochs.

0
10.08.2016, 03:52
2 ответа

Как оказалось, мне действительно не хватало модуля, точнее драйвера диска, а именно biosdisk :

Из OSDev Wiki:

biosdisk -  This module is required for GRUB 2 to be able to boot from a LiveCD.
0
28.01.2020, 04:50

Несмотря на то, что первоначальный автор нашел причину сбоя в своем случае и поделился ею с остальным сообществом, я обнаружил другую проблему, которая вызывает точно такое же поведение:

ls, вызванный в оболочке спасения grub, не дает никаких устройств.

Если по какой-либо причине *.modфайлы лишены важной информации о символах, тогда grub-installавтоматически создает core.img, но этот core.imgне может использовать какие-либо модули, упакованные вместе.

Даже такой "безобидный" вариант очистки, как --strip-unneeded, приводит к потере двух важных символов grub_mod_initи grub_mod_fini. Без этих символов модули grub загружаются, но не инициализируются, поэтому их нельзя использовать.

Если вы действительно хотите удалить модули grub, вам следует добавить -K grub_mod_init -K grub_mod_finiв командную строку strip's.

0
28.01.2020, 04:50

Теги

Похожие вопросы