Я сделал следующее:
- создал пустой файл .img с помощью dd
- связал его с / dev / loop0 с losttup
- создал раздел в нем с помощью fdisk
- отформатировал такой раздел с помощью mke2fs
- скопировал пользовательскую систему GNU / Linux в этот раздел
Теперь я хотел бы сделать файл .img загрузочным, установив grub в каталог MBR и / boot. Моя цель - загрузить файл .img с помощью qemu. Было бы лучше, если бы grub2 использовался вместо grub legacy.
Спасибо.
Ответы:
Это с grub-pc версии 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
Установщик grub2 может устанавливать на устройства с обратной связью, но если вы монтируете его с помощью устройства отображения карт, он запутается и поверит в то, что у вас есть схема LVM, таинственно провалившаяся с жалобой на отсутствующую абстракцию.
Вместо этого вам следует самостоятельно настроить петлевое устройство для раздела с именем, которое должно соответствовать шаблону "/ dev / loop [0-9]", т.е. без какого-либо обозначения раздела в конце:
(Обратите внимание, что если вы хотите, чтобы grub-mkconfig / update-grub работал на этом томе, то петлевой раздел должен быть подключен к петле диска на / dev, а не напрямую к файлу образа).
Поскольку вы использовали fdisk для разбиения образа, у вас есть таблица разделов в стиле msdos (она же метка) и загружаетесь с помощью BIOS. В дополнение к помещению stage1 / boot.img в MBR, stage1.5 / core.img будет помещен в область встраивания в неразмеченное пространство (!) Сразу после него, и для этого должно быть место.
Теперь хитрость заключается в том, чтобы через установщик устройства сообщить установщику grub2, как ваши настройки loopback будут сопоставляться с дисками BIOS на виртуальной машине. (В grub1 legacy это было сделано прямо в оболочке). Вы, вероятно, планируете загрузить этот образ как первый диск, поэтому я думаю, что соответствующее сопоставление будет:
Здесь я поместил карту устройства в образ гостевого диска, чтобы вы могли сгенерировать загрузочный конфигурационный файл grub.cfg:
(Помните, что после установки пакета grub-pc будет запущен зонд, который перезаписывает карту устройства (!), Поэтому вам придется написать его после установки и запустить grub-mkconfig / update-grub самостоятельно).
Теперь запустите установщик с хоста , указав на гостевую установку:
Наконец, размонтируйте все, что настроено здесь, перед запуском qemu на вашем изображении:
источник
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
не получается, потомуgrub-mkconfig
что на диске .img нет или какой-либо двоичный файл, и/mnt
он уже смонтирован. Было бы здорово, если бы вы пошли по шагам и написали все детали / команды.losetup -P
это еще один хороший способ монтирования отдельного раздела: stackoverflow.com/a/15200862/895245/usr/sbin/grub-probe: warning: the device.map entry 'hd0,1' is invalid. Ignoring it. Please correct or delete your device.map.
так что этот ответ бесполезен.Большое спасибо за эти объяснения. Я интегрировал ваше решение в свои собственные сценарии со следующими изменениями (переведенными в ваши обозначения / переменные):
это работает по крайней мере на сжатие Debian. Проверьте правильность /boot/grub/grub.cfg.
источник
cat > /mnt/boot/grub/device.map
быть сделано в изолированной среде? Если так, путь должен быть/boot/grub/device.map
.Предположения:
Вот как я загрузил qemu в меню GRUB:
Затем появляется оболочка GRUB:
Если вы скопировали ядро и ram-диск в / dev / loop0p1, вы можете загрузить его:
А вот оболочка Linux по умолчанию (потому что в этом случае / sbin / init не было)
источник