虚拟机virt-manager-2:host与guest文件共享
由于虚拟机的客户机在理论上与主机是完全隔离的,所以,虽然安全性很高,但客户机与主机之间如果需要交换或者共享文件,就需要一些额外的设置和操作才能实现。您可以参考下面介绍的三个方案来解决。
- 约定:
下面的阐述中,主机=host,虚拟机=客户机=guest,不再另行说明。
方案一、命令行操作
如果从极限安全的角度考虑,可以使用virt-copy-in和virt-copy-out这两个命令,无论guest是Linux还是windows,都可以使用。并且,命令运行时,guest是关机的状态,相对安全性更有保障。
如果想使用virt-copy-in/out命令,需要host上安装一个工具libguestfs-tools,在主机的命令行终端中运行下面的命令:
sudo apt install libguestfs-tools
此工具安装好以后,假设virt-manager虚拟机文件(.qcow2)保存在主机的pool目录,文件名为debian12.qcow2;主机当前目录有一个video.mp4需要拷贝到虚拟机中,那么打开主机命令行终端,把目录切换到debian12.qcow2文件所在的pool目录,再执行下面的命令:
virt-copy-in -a ./debian12.qcow2 ./video.mp4 /home/
上面的命令中,-a
表示通过虚拟机的文件名来指定虚拟机,本例文件名是debian12.qcow2;video.mp4
表示要被拷贝的文件,/home/
表示要拷贝到的目标目录是虚拟机的/home/目录。
如果把上面的命令写成下面的样子,则表示从虚拟机(debian12.qcow2)里把/home/目录中的video.mp4文件拷贝到主机的当前目录:
virt-copy-out -a ./debian12.qcow2 /home/video.mp4 .
下面命令会把win10虚拟机中C:001目录中的video.mp4拷贝到主机当前目录:
virt-copy-out -a ./win10.qcow2 /001/video.mp4 .
virt-copy-in/out命令不仅可以对文件进行操作,也可以对目录进行操作。例如下面的命令表示把虚拟机的/home目录整体拷贝到主机的当前目录:
virt-copy-out -a ./debian12.qcow2 /home .
virt-copy-in/out命令方式在以下环境中实测有效:
host: Debian12 (Gnome、KDE)
guest: Debian12(XFCE、Gnome、KDE)、Win10
方案二、FTP操作
如果不想使用命令行,可以借助SSH来使用FTP操作。FTP软件可以使用FileZilla,协议可以使用加密的SFTP。特点是操作时guest必须为开机运行的状态;并且,guest和host分别需要配置好SSH相关的参数设置 。
此方案对于Linux和windows的guest来说,操作没有差异,也都需要在guest中配置和启用SSHD服务。
此方案安全性不如前面介绍的命令行方式,但可以避免每一次都使用输入命令,适合懒且对安全性没有那么高要求的人。
这个方案需要做下面几件事:
guest安装ssh-server,并配置sshd以备ssh密钥连接
host通过ssh-keygen生成公钥和私钥
host通过ssh-copy-id把公钥上传到guest
host安装FileZilla
host运行FileZilla,配置好后连接guest,传输文件
具体操作如下:(未完待续)
方案三、共享文件夹
除了上面两种方式,您还可以通过共享文件夹的方式来实现guest与host的文件交换,此方式同样需要在guest和host中做一些配置,但安全性是最低的。
这种方式主要是使用virtio-fs。
具体配置如下:
1. 客户机为Linux:
这里是针对虚拟机为Linux系统的情况。
关闭guest电源,打开virt-manager虚拟机的界面,切换到 详情>内存,勾选Enable shared memory
。点击 应用 按钮。
详情页左侧底部点击 添加硬件>文件系统,驱动程序选择virtiofs
,源路径选择host上准备共享的目录;目标路径用来指定共享名称,比如可以填写hostshare
。点击 完成 按钮。
运行此虚拟机,创建一个用于挂载主机上共享文件夹的目录,比如
mkdir /home/peter/host
这表示在虚拟机的/home/peter/目录中创建了一个host目录。
接下来,把主机上的共享目录持载到虚拟机上这个host目录即可:
sudo mount -t virtiofs hostshare /home/peter/host
好了,您已经可以在host和guest之间通过共享目录来交换文件了。
2. 客户机为Windows:
这里是针对虚拟机为Windows系统的情况。
关闭guest电源,打开virt-manager虚拟机的界面,切换到 详情>内存,勾选Enable shared memory
。点击 应用 按钮。
详情页左侧底部点击 添加硬件>文件系统,驱动程序选择virtiofs
,源路径选择host上准备共享的目录;目标路径用来指定共享名称,比如可以填写hostshare
。点击 完成 按钮。
下载两个文件,这两个文件需要在windows虚拟机里安装:
运行windows虚拟机,在虚拟机中安装上面两个文件。安装好以后,重启虚拟机,找到服务>VirtioFsSvc服务,启动此服务,并设置为开机自动启动。(我的电脑 右键>管理>服务与应用)
接下来,你可以打开 我的电脑,其中有C盘,也有我们刚才设置的共享目录(默认通常是Z盘)
(参考资料)
好了,您已经可以在host和guest之间通过共享目录来交换文件了。
总结
上面三种方案中,驿窗推荐方案一结合方案二使用。由于方案二要使用到SSH相关的技术,与SSH相关的说明,请参考附录中SSH相关内容。
未完稿