
Um das Root-Dateisystem zu testen, muss ich QEMU mit dem erstellten Disk-Image als Root-Dateisystem ausführen. QEMU akzeptiert -kernel, was zum direkten Angeben des Kernels verwendet werden kann, ohne ihn im Root-Dateisystem bereitzustellen. Ich benötige jedoch eine ähnliche Funktion für das Root-Dateisystem, um den Pfad des extrahierten Root-Dateisystems anzugeben, anstatt ein Disk-Image zu erstellen und es mit den Optionen -hda oder -usbdisk zu verwenden.
ist das überhaupt mit QEMU allein möglich?! Oder mit Tools von Drittanbietern (wie z. B. einem virtuellen Disk-Image-Emulator)
Mein Ziel ist es, ein Tar-Archiv des Root-Dateisystems zu testen, ohne ein Disk-Image zu erstellen
Antwort1
Wenn Ihr Root-Dateisystem nicht zu groß ist, können Sie ein Initd verwenden. Verwenden Sie die -initrd
Option für qemu und stellen Sie eine (komprimierte) CPIO-Datei mit dem Root-Dateisystem bereit. Wenn Sie also eine Tar-Datei haben, müssen Sie diese entpacken und stattdessen eine CPIO-Datei erstellen. Sie müssen -H newc
das Format für CPIO verwenden. Beispiel:
mkdir /tmp/rootfs
cd /tmp/rootfs
tar xf /path/to/rootfs.tar
find | cpio --quiet -o -H newc | bzip2 -c > /tmp/rootfs.cpio
Das Schöne ist, dass Sie hierfür weder Root noch Sudo benötigen.
Antwort2
Sie können Ihr Dateisystem auf ein USB-Laufwerk schreiben und dieses dann mit der virtuellen QEMU-Maschine verbinden.
Mounten Sie es dann als Ihr Root-Dateisystem mit Kernel-Optionen bei GRUB
- Bootmenü in der virtuellen Maschine aktivieren
- Schließen Sie das externe Laufwerk an, auf dem sich Ihr Dateisystem inklusive Kernel befindet.
- Wenn Ihr Dateisystem über Kernel und Grub verfügt, ist alles in Ordnung. Andernfalls schließen Sie auch eine beliebige Linux-Live-CD mit der virtuellen Maschine an. Bearbeiten Sie die GRUB-Befehlszeile und verwenden Sie Ihren Kernel und Ihr Root-Dateisystem.
Angenommen, Ihr USB-Stick ist /dev/sdB
(unter der Annahme, dass Sie auch ein Festplatten-Image angehängt haben und das ist /dev/sdA
, wie auch immer Sie es finden können), dann sollte Ihr Grub-Befehl wie folgt aussehen:
kernel (hd1,gpt0)/location_of-kernel root=/dev/sdB
initramfs mention_if_you_have
boot
gpt0
Durch die richtige Partition und /dev/sdB
den richtigen Buchstaben ersetzen /dev/sdb1
oder /dev/sdb
(falls der USB keine Partition hat)