Я пытаюсь подготовить образ, который можно скопировать на диск или загрузить с помощью 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 и получил точно такой же результат.
Возможно, это слишком поздно, но для меня оказалось, что мне нужно смонтировать раздел / 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
успешно.