Grub2 не может обнаружить разделы, если он был установлен в файл

Я пытаюсь подготовить образ, который я могу скопировать на диск или загрузить с помощью PXE.

Некоторый контекст : Я создаю образ, разделяю его с помощью sfdisk (MBR), создаю устройства цикла для всего диска и основного раздела, форматирую основной раздел как ext4, монтирую его и устанавливаю базовую систему + ядро ​​и пакеты grub-pc с помощью debootstrap, затем генерирую initramfs, смонтируйте dev, proc и sys в корневой каталог раздела и установите grub.

Вывод fdisk -l для / dev / loop0 (устройство цикла для всего образа):

Disk /dev/loop0: 1,1 GiB, 1211572224 bytes, 2366352 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfdf8e68d

Device       Boot   Start     End Sectors  Size Id Type
/dev/loop0p1 *       2048 2097151 2095104 1023M 83 Linux
/dev/loop0p2      2097152 2359295  262144  128M 82 Linux swap / Solaris

Команды установки Grub :

chroot $ROOT grub-install --target=i386-pc /dev/loop0
chroot $ROOT update-grub

Конфигурация Grub сгенерирована правильно с обнаружением ядра и initramfs. Но когда я пытаюсь загрузить систему, используя полученный образ, grub2 не может найти ни одного раздела:

Loading boot sector... booting...
error: no such device: some-file-system-UUID
error: unknown filesystem.
Entering rescue mode...
grub rescue> ls
(hd0)
grub rescue> insmod ext2
grub rescue> ls
(hd0)

Что могло быть не так на моих этапах установки grub? Как grub2 не может увидеть раздел, который присутствует в выводе fdisk?

PS: BIOS настроен для устаревшего режима. Я также протестировал свое изображение с помощью kvm и получил точно такой же результат.

0
задан 17 July 2018 в 18:59
1 ответ

Это, вероятно, слишком поздно, но для меня это оказалось out Мне нужно было смонтировать раздел / dev / loopX, используя

losetup -P -n / dev / loop0 test.img

. В результате был создан / dev / loop0p1, на который я смог смонтировать и установить grub поверх. Вы также должны убедиться, что вы установили ядро ​​linux внутри образа с помощью

sudo chroot / mnt apt-get install linux-image

Затем вы можете переустановить grub на / dev / loop0 и запустить update-grub успешно.

0
ответ дан 5 December 2019 в 05:34

Теги

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