Zrobiłem następujące:
- utworzył pusty plik .img z dd
- powiązał go z / dev / loop0 z losetup
- utworzył w niej partycję za pomocą fdisk
- sformatowano taką partycję za pomocą mke2fs
- skopiował niestandardowy system GNU / Linux na tę partycję
Teraz chciałbym, aby plik .img był bootowalny poprzez zainstalowanie gruba w jego katalogu MBR i / boot. Moim celem jest załadowanie pliku .img za pomocą qemu. Byłoby lepiej, gdyby użyto grub2 zamiast starszego typu grub.
Dzięki.
Odpowiedzi:
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:
(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:
Tutaj umieściłem mapę urządzenia w obrazie dysku gościa, aby można było wygenerować plik konfiguracyjny rozruchu 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:
Na koniec odmontuj wszystko ustawione tutaj przed uruchomieniem qemu na swoim obrazie:
źródło
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
nie udaje się, ponieważgrub-mkconfig
na dysku .img nie ma żadnych plików binarnych ani nic takiego i/mnt
jest już zamontowany. Byłoby wspaniale, gdybyś robił to krok po kroku i zapisywał wszystkie szczegóły / polecenia.losetup -P
to kolejny dobry sposób montowania pojedynczej partycji: 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.
więc ta odpowiedź jest bezużyteczna.wielkie dzięki za te wyjaśnienia. Zintegrowałem twoje rozwiązanie z własnymi skryptami z następującymi modyfikacjami (przetłumaczonymi na twoją notację / zmienne):
działa to przynajmniej w przypadku ściśnięcia Debiana. Sprawdź poprawność „/boot/grub/grub.cfg”.
źródło
cat > /mnt/boot/grub/device.map
należy to zrobić w środowisku chrootowanym? Jeśli tak, ścieżka powinna być/boot/grub/device.map
.Założenia:
Oto jak uruchomiłem qemu do menu GRUB:
Następnie pojawia się powłoka GRUB:
Jeśli skopiowałeś jądro i ram dysku do / dev / loop0p1, możesz go uruchomić:
Oto domyślna powłoka systemu Linux (ponieważ w tym przypadku nie było dostępne polecenie / sbin / init)
źródło