TIP: 在 QEMU 中可以使用 9P 文件系统挂载宿主目录作为根目录!

2019-12-26 15:31:16 +08:00
 codehz

作用就是与宿主共享文件和目录更方便了,还能通过这种方法直接重用 docker 镜像

(记得补上 init,如 openrc 和 systemd 包)而不用重新打包到一个镜像文件里,也不用折腾复杂的分区操作,启动起来就像容器一样简单(加个-nographic 就更像了)

不知道有没有火星,直接贴主要代码 :)

#!/bin/bash
kernel=out/arch/x86_64/boot/bzImage
qemu-system-x86_64 \
-enable-kvm \
-cpu host \
-kernel "$kernel" \
-initrd initramfs-linux.img \
-net nic,model=virtio \
-net user \
-fsdev local,id=r,path=root,security_model=none \
-device virtio-9p-pci,fsdev=r,mount_tag=r \
-append 'init=/init'

/init:(就是 initramfs 里的,记得带上 busybox)

#!/bin/sh
hostname virtual
mount -t 9p -o trans=virtio r /mnt
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -t devtmpfs none /mnt/dev
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
exec /sbin/switch_root /mnt /sbin/init

前提要求:内核开启 9p 文件系统支持(而且不要用模块的,虽然理论上可以把模块打到 initrd 里,但是多麻烦呢)

5076 次点击
所在节点    Linux
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632567

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX