
Para probar el sistema de archivos raíz, necesito ejecutar QEMU con la imagen de disco creada como sistema de archivos raíz, QEMU acepta -kernel que se puede usar para especificar el kernel directamente sin implementarlo dentro del sistema de archivos raíz, sin embargo, necesito una característica similar para root file system para especificar la ruta del sistema de archivos raíz extraído en lugar de crear una imagen de disco y utilizarla con las opciones -hda o -usbdisk.
¿Es posible con QEMU solo? O con herramientas de terceros (como un emulador de imagen de disco virtual)
Mi objetivo es probar un archivo tar del sistema de archivos raíz sin crear una imagen de disco.
Respuesta1
Si tu rootfs no es demasiado grande, puedes usar un initd. Utilice la -initrd
opción qemu y proporcione un archivo cpio (comprimido) con rootfs. Entonces, si tiene un archivo tar, debe descomprimirlo y crear un cpio en su lugar. Debe utilizar -H newc
el formato para cpio. Ejemplo;
mkdir /tmp/rootfs
cd /tmp/rootfs
tar xf /path/to/rootfs.tar
find | cpio --quiet -o -H newc | bzip2 -c > /tmp/rootfs.cpio
Lo bueno es que no necesitas root ni sudo para esto.
Respuesta2
Puede escribir su sistema de archivos en una unidad USB y luego conectarlo con la máquina virtual QEMU.
Luego móntelo como su sistema de archivos raíz con opciones de kernel en GRUB
- Activar menú de inicio en máquina virtual
- Conecte la unidad externa en la que está presente su sistema de archivos, incluido el kernel.
- Si su sistema de archivos tiene kernel y grub, todo está bien. De lo contrario, adjunte cualquier CD en vivo de Linux también con la máquina virtual. Edite la línea de comando de GRUB y use su kernel y sistema de archivos raíz.
Digamos que su pendrive es /dev/sdB
(teniendo en cuenta que también ha adjuntado una imagen de disco duro y eso es /dev/sdA
, de todos modos puede encontrarla) su comando grub se verá así
kernel (hd1,gpt0)/location_of-kernel root=/dev/sdB
initramfs mention_if_you_have
boot
Reemplace gpt0
con la partición adecuada y /dev/sdB
con la letra viva adecuada /dev/sdb1
o /dev/sdb
(en caso de que el USB no tenga partición)