Dotyczy to wersji Grub-pc 1.98 + 20100804-5ubuntu3 (Maverick Meerkat).
Instalator grub2 może zainstalować na sprzężeniu zwrotnym, ale jeśli montujesz za pomocą mapera urządzeń, to się pomyli i uwierzy, że masz schemat LVM, który w tajemniczy sposób kończy się niepowodzeniem z powodu skargi na brak abstrakcji.
Zamiast tego należy samodzielnie skonfigurować urządzenie sprzężenia zwrotnego dla partycji o nazwie, która musi pasować do wzorca „/ dev / loop [0-9]”, tj. Bez oznaczenia partycji na końcu:
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(Uwaga: jeśli chcesz, aby grub-mkconfig / update-grub działał na tym woluminie, wówczas pętla partycji musi być podłączona do pętli dyskowej w / dev, a nie bezpośrednio do pliku obrazu).
Ponieważ użyłeś fdisk do podzielenia obrazu na partycje, masz tablicę partycji w stylu msdos (aka label) i uruchamiasz się za pomocą BIOS-u. Oprócz umieszczenia stage1 / boot.img w MBR, stage1.5 / core.img zostanie umieszczony w obszarze osadzania w niepartycjonowanej przestrzeni (!), Zaraz po nim, i musi być na to miejsce.
Sztuką jest teraz powiedzieć instalatorowi Grub2 poprzez mapę urządzenia, w jaki sposób twoja konfiguracja sprzężenia zwrotnego będzie mapowana na dyski BIOS na maszynie wirtualnej. (W starszej wersji grub1 zrobiono to bezpośrednio w powłoce). Prawdopodobnie planujesz uruchomić ten obraz jako pierwszy dysk, więc sądzę, że odpowiednie mapowanie to:
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
Tutaj umieściłem mapę urządzenia w obrazie dysku gościa, aby można było wygenerować plik konfiguracyjny rozruchu grub.cfg:
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(Uwaga: poinstalacyjny pakiet grub-pc uruchomi sondę, która zastąpi mapę urządzenia (!), Więc będziesz musiał napisać ją po instalacji i samemu uruchomić grub-mkconfig / update-grub).
Teraz uruchom instalator z hosta , wskazując na instalację gościa:
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
Na koniec odmontuj wszystko ustawione tutaj przed uruchomieniem qemu na swoim obrazie:
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0