Это с grub-pc версии 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
Установщик grub2 может устанавливать на устройства с обратной связью, но если вы монтируете его с помощью устройства отображения карт, он запутается и поверит в то, что у вас есть схема LVM, таинственно провалившаяся с жалобой на отсутствующую абстракцию.
Вместо этого вам следует самостоятельно настроить петлевое устройство для раздела с именем, которое должно соответствовать шаблону "/ dev / loop [0-9]", т.е. без какого-либо обозначения раздела в конце:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Обратите внимание, что если вы хотите, чтобы grub-mkconfig / update-grub работал на этом томе, то петлевой раздел должен быть подключен к петле диска на / dev, а не напрямую к файлу образа).
Поскольку вы использовали fdisk для разбиения образа, у вас есть таблица разделов в стиле msdos (она же метка) и загружаетесь с помощью BIOS. В дополнение к помещению stage1 / boot.img в MBR, stage1.5 / core.img будет помещен в область встраивания в неразмеченное пространство (!) Сразу после него, и для этого должно быть место.
Теперь хитрость заключается в том, чтобы через установщик устройства сообщить установщику grub2, как ваши настройки loopback будут сопоставляться с дисками BIOS на виртуальной машине. (В grub1 legacy это было сделано прямо в оболочке). Вы, вероятно, планируете загрузить этот образ как первый диск, поэтому я думаю, что соответствующее сопоставление будет:
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
Здесь я поместил карту устройства в образ гостевого диска, чтобы вы могли сгенерировать загрузочный конфигурационный файл grub.cfg:
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(Помните, что после установки пакета grub-pc будет запущен зонд, который перезаписывает карту устройства (!), Поэтому вам придется написать его после установки и запустить grub-mkconfig / update-grub самостоятельно).
Теперь запустите установщик с хоста , указав на гостевую установку:
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
Наконец, размонтируйте все, что настроено здесь, перед запуском qemu на вашем изображении:
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0