qemu为测试环境,在该环境下没有开通网络接口,所以在与宿主机的进行数据传输时,采用挂载伪设备的方式来实现的,在unxi环境下,the loop device 被称为伪设备(pseudo-device),它可以让我们象访问块文件一样访问一个文件,在实际操作中,当loop与一个文件连接时,就为用户提供一个访问的接口,如果该文件是一个文件系统,它就可以象外挂磁盘一样用mount装载起来。基于上述设想,所以可以在宿主机和虚拟机上mount装载同一个伪设备来实现共享存储空间。
1、使用dd命令创建文件
[root@0xb7 /]#dd if=/dev/zero of=/var/lib/libvirt/images/share.img bs=1M count=350
[root@0xb7 /]#mkdir /tmp/share
2、 格式化share.img文件 [root@0xb7 /]# mkfs.xfs /var/lib/libvirt/images/share.img
[root@0xb7 /]# mount /var/lib/libvirt/images/share.img /tmp/share -o loop
或者
[root@0xb7 /]# mount -o loop /var/lib/libvirt/images/share.img /tmp/share
3、检查下是否正常装载
[root@0xb7 /]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/loop0 xfs 347M 18M 329M 6% /tmp/share
4、如果需要卸载
[root@0xb7 /]# umount /tmp/share
5、执行行命令,启动qemu虚拟机,命令中的systest.img是前期从需要被虚拟的机器中使用dd命令生成的img文件
[root@0xb7 /]# qemu-system-x86_64 /home/docker-img/systest.img -drive file=/var/lib/libvirt/images/share.img,if=virtio
在虚拟机中执行
#df -Th /dev/vda xfs 347M 18M 329M 6% /mnt
可以看到vda设备
[root@0xb7 /]mkdir /home/vda [root@0xb7 /]mount /dev/vda /home/vda
如果需要卸载
[root@0xb7 /]#umount /home/vda
6、测试,分别在宿主机的写入文件,注意要虚拟机要重新卸载装载下。
[root@0xb7]cd /tmp/share
[root@0xb7 share]echo "ttt">test.txt
进入虚拟机
[root@vm071 /]umount /home/vda
[root@vm071 /]mount /dev/vda /home/vda
[root@vm71 /]ls /home/vda
test.txt
完成从宿主机向虚拟机的数据传输。
下面测试从虚拟机向宿主机数据传输
[root@vm071 /]#echo "111" >>/home/vda/test.txt
[root@]vm071 /]#cat /home/vda/test.txt
ttt
111
返回到宿主机
重新装载
[root@0x7b /]#mount /var/lib/libvirt/images/share.img /tmp/share -o loop
[root@0x7b /]cat /tmp/share/test.txt
ttt
111
完成从虚拟机到宿主机的数据传输