对于没有网络的虚拟机,如果想要在qemu和host之间传递文件是比较麻烦的,一种简单的解决办法就是利用虚拟机的共享目录,这种方式需要有9p virtio fs支持。
使用9p virtio fs文件系统需要在虚拟机的启动命令行添加新的参数

-virtfs local,id=sfs,path=/tmp/shared,security_model=passthrough,mount_tag=shared

其中path参数指定了在host上使用的共享目录的位置
如果添加此参数后虚拟机启动报出错误

qemu-kvm: -virtfs local,id=sfs,path=shared,security_model=passthrough,mount_tag=shared: 'virtio-9p-pci' is not a valid device model name

则说明当前的qemu版本中不支持9p virtio fs,解决办法就是重新编译qemu
qemu不同版本的源码可以在https://download.qemu.org/中下载,
下载后添加参数重新编译qemu

./configure --enable-kvm --enable-virtfs
make -j44

编译完成后我们使用新编译的qemu二进制文件qemu-system-x86_64来启动虚拟机
虚拟机启动后我们需要在虚拟机中执行挂载命令:

mount -t 9p -o trans=virtio,version=9p2000.L shared /shared

其中/shared是在虚拟机中指定的挂载目录,如果执行挂载时报出

mount: unknown filesystem type '9p'

说明当前虚拟机的内核不支持9p类型的文件系统,需要开启相应的内核选项并重新编译
如果执行挂载时报出错误

mount: wrong fs type, bad option, bad superblock on shared,

说明当前虚拟机中没有加载9p文件系统对应的内核模块,需要执行

modprobe 9pnet_virtio

加载9p内核模块,然后再执行mount挂载操作
执行完成后我们在host上向/tmp/shared中拷贝文件就可以在虚拟机中获取到了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐