在qemu环境下,实现宿主机和虚拟机之间的数据传输

it2025-09-11  6

    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

完成从虚拟机到宿主机的数据传输

最新回复(0)