linux内核调度 宿主机,Qemu虚拟机与宿主机之间文件传输

您所在的位置:网站首页 虚拟机与虚拟机之间复制文件 linux内核调度 宿主机,Qemu虚拟机与宿主机之间文件传输

linux内核调度 宿主机,Qemu虚拟机与宿主机之间文件传输

2023-11-19 01:13| 来源: 网络整理| 查看: 265

Qemu虚拟机与宿主机之间实现文件传输,大概有四类方法:

1.虚拟机与宿主机之间,使用网络来进行文件传输。这个需要先在宿主机上配置网络桥架,在qemu-kvm启动配置网卡就可以实现文件传输。

2.使用9psetup协议实现虚拟机与宿主机之间文件传输。该方法先要宿主机需要在内核中配置了9p选项,qemu在编译时需要支持ATTR/XATTR。

3.通过在Qemu虚拟机中挂载宿主机中的一个文件为硬盘。

4.第四类方法是一种新方法,是用virtio-fs通过FUSE协议进行传输。

通过挂载硬盘的方法

1.用dd创建一个文件,作为虚拟机和宿主机之间传输桥梁

1$ dd if=/dev/zero of=$PWD/share.img bs=1M count=500

bs:一次读入/输出的块大小

count:拷贝块的个数

上述例子中最大可以传输的文件大小为500M。

2.格式化share.img文件

1$ mkfs.ext4 $PWD/share.img

3.在宿主机上创建一个文件夹

1

2$ mkdir /tmp/share

$ sudo mount -o loop $PWD/share.img /tmp/share

现在把宿主机上需要传输给虚拟机的文件放到/tmp/share下即可。

4.启动Qemu虚拟机,额外为虚拟机添加一块硬盘

1-drive file=$PWD/share.img,if=virtio

5.在虚拟机中mount上刚添加的硬盘,即可获得宿主机上放在/tmp/share文件夹下的文件。具体做法是:通过dmesg的输出找到新挂载的硬盘,然后将硬盘mount上来。

1$ mount -t ext4 /dev/vda /mnt/

该方法的缺点是宿主机和虚拟机文件传输不能实时进行,如果要传输新文件,需要重启虚拟机。

virtio-fs

需要编译的组件如下:

一个支持virtio-fs的客户机内核(Linux 5.4+)

一个支持virtio-fs的QEMU(QEMU 5.0+)

1.在客户机中编译Linux内核,启动下面的选项:

1

2

3

4

5

6CONFIG_VIRTIO

CONFIG_VIRTIO_FS

CONFIG_DAX

CONFIG_FS_DAX

CONFIG_DAX_DRIVER

CONFIG_ZONE_DEVICE

1make -j 8 && make -j 8 modules && make -j 8 modules_install && make -j 8 install

我用的主机是Ubuntu18.04,客户机系统是Debian10.5.0,在主机上编译好内核拷贝到客户机中进行安装。

2.编译QEMU

这里想要编译出virtiofsd需要安装一个libcap-ng的包,这个是从Makefile中看出来的,需要几个CONFIG_,在configure中可以看到,configure之后会生成config-host.mak,里面需要包含Makefile中所需的CONFIG_:

1

2

3$ sudo apt install libcap-ng-dev

$ ./configure --enable-kvm --enable-debug --enable-cap-ng --target-list=x86_64-softmmu

$ make all

3.启动QEMU

先要启动virtiofsd守护进程:

1./virtiofsd -o vhost_user_socket=/tmp/vhostqemu -o source=/tmp/shared -o cache=always

启动qemu:

1

2

3

4$ ./qemu-5.1.0/x86_64-softmmu/qemu-system-x86_64 -M pc -cpu host --enable-kvm -smp 2 \

-m 4G -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on -numa node,memdev=mem \

-chardev socket,id=char0,path=/tmp/vhostqemu -device vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=myfs \

-drive if=virtio,file=debian.qcow2

在客户机中挂载设备:

1$ mount -t virtiofs myfs /mnt



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3