Ausführen von QEMU mit einem Stammdateisystemverzeichnis anstelle eines Disk-Image

Ausführen von QEMU mit einem Stammdateisystemverzeichnis anstelle eines Disk-Image

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 -initrdOption 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 newcdas 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

  1. Bootmenü in der virtuellen Maschine aktivieren
  2. Schließen Sie das externe Laufwerk an, auf dem sich Ihr Dateisystem inklusive Kernel befindet.
  3. 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

gpt0Durch die richtige Partition und /dev/sdBden richtigen Buchstaben ersetzen /dev/sdb1oder /dev/sdb(falls der USB keine Partition hat)

verwandte Informationen