Dies ist mit Grub-PC-Version 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
Das grub2-Installationsprogramm kann auf Loopback-Geräten installiert werden. Wenn Sie jedoch die Gerätezuordnung verwenden, wird dies verwirrt und Sie glauben, dass Sie ein LVM-Schema haben, das auf mysteriöse Weise mit einer Beschwerde über eine fehlende Abstraktion scheitert.
Stattdessen sollten Sie Setup das Loopback - Device für die Partition selbst, mit einem Namen, der muss mit dem Muster übereinstimmen „/ dev / loop [0-9]“, dh ohne Partition Bezeichner am Ende:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Beachten Sie, dass, wenn grub-mkconfig / update-grub auf diesem Volume ausgeführt werden soll, der Partitions-Loopback mit dem Festplatten-Loopback unter / dev und nicht direkt mit der Image-Datei verbunden sein muss.)
Da Sie das Image mit fdisk partitioniert haben, verfügen Sie über eine Partitionstabelle im Stil von msdos (auch bekannt als label) und starten mit einem BIOS. Zusätzlich zum Einfügen der Datei stage1 / boot.img in den MBR wird die Datei stage1.5 / core.img unmittelbar danach in einen Einbettungsbereich in einem nicht partitionierten Bereich (!) Eingefügt. Dafür muss Platz vorhanden sein.
Der Trick besteht nun darin, dem grub2-Installationsprogramm über eine Gerätezuordnung mitzuteilen, wie Ihr Loopback-Setup den BIOS-Laufwerken in der virtuellen Maschine zugeordnet wird. (In grub1 Legacy wurde dies direkt in der Shell gemacht). Sie planen wahrscheinlich, dieses Image als erste Festplatte zu booten, daher würde die entsprechende Zuordnung lauten:
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
Hier habe ich die Gerätezuordnung in das Gastdatenträger-Image eingefügt, damit Sie die Startkonfigurationsdatei grub.cfg generieren können:
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(Beachten Sie, dass der Post-Installer des grub-pc-Pakets einen Test ausführt , der die Gerätezuordnung (!) Überschreibt. Sie müssen ihn also nach der Installation schreiben und grub-mkconfig / update-grub selbst ausführen.)
Führen Sie nun das Installationsprogramm vom Host aus und verweisen Sie auf die Gastinstallation:
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
Zum Schluss hängen Sie alles, was Sie hier eingerichtet haben, aus, bevor Sie qemu auf Ihrem Image starten:
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0