使用 virt-manager 在 Linux 主机和 Windows 来宾之间共享文件?

Bla*_*ker 44 kvm file-sharing virt-manager

是否可以使用 virt-manager 中的“Filesystem Passthrough”虚拟硬件选项与我的 Windows 来宾共享 Linux 主机上的文件夹?我找到了一些关于如何使用 Linux 客户机执行此操作的教程,但是当我使用 Windows 客户机尝试此操作时,我在尝试启动 VM 时收到以下错误消息:

Error starting domain: Unable to read from monitor: Connection reset by peer

Traceback (most recent call last):   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 100, in cb_wrapper
    callback(asyncjob, *args, **kwargs)   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 122, in tmpcb
    callback(*args, **kwargs)   File "/usr/share/virt-manager/virtManager/domain.py", line 1210, in startup
    self._backend.create()   File "/usr/lib64/python2.7/site-packages/libvirt.py", line 698, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: Unable to read from monitor: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)

我尝试寻找一些文档,但我能找到的只是链接到常见问题解答和“一些屏幕截图”的官方页面

slm*_*slm 25

我不相信使用 Windows 来宾是可能的。我通常在 Linux KVM 主机上设置一个 Samba 服务器,然后使用它与我的 KVM 来宾共享一个文件夹。

文件系统直通

有关与 KVM 来宾 (Linux) 共享 KVM 主机目录的文档可在 virt-manager 网站上找到。该页面的标题为:与来宾共享主机文件示例

设置桑巴

linux-kvm 网站还包含设置 Samba 的说明。该文档可在此处获得,标题为:提示:如何使用 Samba 与 Windows 客户机共享 Linux 主机上的文件

  • @0xC0000022L 因为它不依赖于虚拟化器能够有效地欺骗来宾操作系统,如果操作系统发生变化,它可能会中断。Samba 是一种网络协议,因此客户操作系统对其可以做什么和不能做什么的期望较少。 (5认同)
  • @pqnet:你能说明一下它如何以及为什么更安全吗? (2认同)
  • 这对 windows 客人不适用 (2认同)

小智 15

Gnome 和 KDE 桌面环境的默认文件管理器都可以使用 SMB 协议轻松访问 Windows 共享资源。
您不需要在 Linux 主机上安装 samba 服务器,因为 Windows 操作系统已经带有内置的 samba 通信协议。

假设您的来宾操作系统是“ Windows XP ”,例如,选择您要共享的文件夹或为此目的创建一个文件夹,例如“hostshare”并右键单击它->属性->共享”选项卡->选择:“在网络上共享此文件夹”和“允许网络用户更改我的文件”。

此时请确保 Windows 的防火墙允许访问共享文件和打印机资源。转到“开始菜单->设置->控制面板->windows防火墙->例外”选项卡->选择:->“文件和打印机共享”。

确保可以通过网络从 Windows 来宾 VM 看到 Linux 主机。所以,从windows的命令行输入:ping 10.0.0.12在这种情况下(例如)“10.0.0.12”是主机IP地址;你必须把它改成你自己的。如果您没有 echo 的响应,则必须进行故障排除。
并从 Linux 命令行执行相同的操作:ping -c3 192.168.122.216,其中这些数字(作为示例)属于分配给来宾 VM 的 virt-IP 地址;你必须把它改成你自己的。

要获取 Windows IP 地址,请运行以下命令: ipconfig

要获取运行此命令的 Linux IP 地址可能会帮助您:

$ ifconfig
$ ip a
$ ip r
$ hostname -I
$ hostname -i
Run Code Online (Sandbox Code Playgroud)

从 Linux 主机打开“ Nautilus ”并转到“文件->连接到服务器->进入“服务器地址”框类型:smb://192.168.122.216 ->连接”。
Nautilus 窗口将打开,其中包含 Windows 内置 Samba 服务器的可浏览资源。您将能够查看和访问“ hostshare ”windows 文件夹的内容。就这样!


sxc*_*731 12

现在,您可以使用virtio-fs在来宾上实现主机导出的文件系统的高效共享。它非常高效,因为它依赖于主机和来宾之间的共享内存,而不是某些基于网络的解决方法。

最低先决条件(在撰写本文时)

  • 主持人:
    • 内核 5.4、QEMU 5.0 和 libvirt 6.2 以及
    • 用于来宾 RAM 分配的共享内存机制,例如大页或文件支持内存。
  • 客人:
    • Linux:内核 5.4
    • Windows:WinFSP(Windows 文件系统代理)

我已成功将其部署在托管 20.04 来宾的 Ubuntu 20.10 服务器上(此组合满足上述最低先决条件),RAM 由大页支持。

一些操作方法

深入的背景介绍

  • “virtio-fs:虚拟机共享文件系统”,作者:Stefan Hajnoczi,Fosdem20(PDF /完整演示


小智 11

对于快速且脏的副本,您还可以使用 libguestfs。

例子:

virt-copy-in -a windows10.qcow2 /tmp/data.zip /
Run Code Online (Sandbox Code Playgroud)

这会将文件 /tmp/data.zip 从主机复制到 Windows 来宾映像 windows10.qcow2 中的根 C:\ 目录。

在虚拟机关闭时执行此操作。


0xS*_*dog 6

我相信@slm 已经提供了最好的答案。然而,还有另一个用例。不过,这种替代方案有点麻烦。

粗略的指南。不要考虑这些明确的命令:

  1. 创建映像文件(ms-dos 软盘或 ISO-9660 CD)
  2. 使用文件系统格式化图像,例如 mkfs.msdos
  3. 根据需要复制和操作图像上的文件,例如使用 mcopy 等
  4. 将映像挂载到来宾 VM CD-ROM 或软盘驱动器上

这并不理想,但如果您的 Guest VM 不允许 dom0 和 Guest 之间的网络协议连接(例如在关闭的 VPN 会话期间),它可以工作。

更多信息请点击这里:

/sf/ask/784189451/