Ich habe folgendes gemacht:
- hat mit dd eine leere .img Datei erstellt
- verband es mit / dev / loop0 mit losetup
- habe mit fdisk eine Partition darin erstellt
- formatierte eine solche Partition mit mke2fs
- hat ein benutzerdefiniertes GNU / Linux-System in diese Partition kopiert
Jetzt möchte ich die IMG-Datei bootfähig machen, indem ich grub in das MBR- und / boot-Verzeichnis installiere. Mein Ziel ist es, die .img-Datei mit qemu zu laden. Es wäre besser, grub2 anstelle von grub legacy zu verwenden.
Vielen Dank.
Antworten:
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:
(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:
Hier habe ich die Gerätezuordnung in das Gastdatenträger-Image eingefügt, damit Sie die Startkonfigurationsdatei grub.cfg generieren können:
(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:
Zum Schluss hängen Sie alles, was Sie hier eingerichtet haben, aus, bevor Sie qemu auf Ihrem Image starten:
quelle
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
scheitert leider , weil es keinegrub-mkconfig
oder keine Binärdatei für diese Angelegenheit in der .img-Disk gibt und/mnt
bereits gemountet ist. Es wäre großartig, wenn Sie Schritt für Schritt alle Details / Befehle schreiben würden.losetup -P
ist eine weitere gute Möglichkeit, eine einzelne Partition zu mounten/usr/sbin/grub-probe: warning: the device.map entry 'hd0,1' is invalid. Ignoring it. Please correct or delete your device.map.
Also diese Antwort ist nutzlos.Vielen Dank für diese Erklärungen. Ich habe Ihre Lösung mit folgenden Änderungen (übersetzt in Ihre Notation / Variablen) in meine eigenen Skripte integriert:
das funktioniert zumindest bei debian squeeze. Überprüfen Sie die Datei '/boot/grub/grub.cfg' auf Richtigkeit.
quelle
cat > /mnt/boot/grub/device.map
in der Chroot-Umgebung erfolgen? Wenn ja, sollte der Pfad sein/boot/grub/device.map
.Annahmen:
So habe ich qemu in das GRUB-Menü gebootet:
Dann erscheint die GRUB-Shell:
Wenn Sie einen Kernel und eine RAM-Festplatte nach / dev / loop0p1 kopiert haben, können Sie es booten:
Und hier ist die Standard-Linux-Shell (da in diesem Fall kein / sbin / init verfügbar war)
quelle