使用根文件系统目录而不是磁盘映像运行 QEMU

e.j*_*dar 5 linux qemu root-filesystem buildroot disk-image

为了测试根文件系统,我需要使用创建的磁盘映像作为根文件系统运行 QEMU,QEMU 接受 -kernel 可用于直接指定内核而无需将其部署在根文件系统中,但是我需要类似的功能为 root文件系统指定提取的根文件系统的路径而不是创建磁盘映像并将其与 -hda 或 -usbdisk 选项一起使用。

单独使用 QEMU 有可能吗?!或使用第三方工具(如虚拟磁盘映像模拟器)

我的目标是在不创建磁盘映像的情况下测试根文件系统的 tar 存档

lge*_*man 5

如果您的 rootfs 不太大,您可以使用 initd。使用-initrdqemu 选项并提供带有 rootfs 的(压缩的)cpio 文件。因此,如果您有 tar 文件,则必须将其解压并创建 cpio。您必须使用-H newccpio 格式。例子;

mkdir /tmp/rootfs
cd /tmp/rootfs
tar xf /path/to/rootfs.tar
find | cpio --quiet -o -H newc | bzip2 -c > /tmp/rootfs.cpio
Run Code Online (Sandbox Code Playgroud)

一件好事是您不需要 root 或 sudo 来执行此操作。


Abh*_*ose 1

您可以将文件系统写入 USB 驱动器,然后将其与 QEMU 虚拟机连接。

然后使用 GRUB 中的内核选项将其挂载为根文件系统

  1. 激活虚拟机中的启动菜单
  2. 连接包含内核的文件系统所在的外部驱动器。
  3. 如果你的文件系统有内核和 grub,那就没问题了。另外,还可以将任何 Linux Live CD 与虚拟机一起附加。编辑 GRUB 命令行并使用您的内核和根文件系统。

假设你的随身碟是/dev/sdB(考虑到你还附加了一个硬盘映像,也就是说/dev/sdA,无论如何你都可以找到它)你的 grub 命令应该是这样的

kernel (hd1,gpt0)/location_of-kernel root=/dev/sdB
initramfs mention_if_you_have
boot
Run Code Online (Sandbox Code Playgroud)

替换gpt0为正确的分区和/dev/sdB正确的字母/dev/sdb1或/dev/sdb(如果 USB 没有分区)