QEMU Windows 客户机和 Linux 主机之间的共享文件夹

Lek*_*eyn 31 file-sharing samba windows qemu

过去我使用过 Virtual Box,它非常支持与 Windows 来宾共享主机上的文件夹。我正在为 QEMU 寻找类似的功能。

该文档建议公开运行在网络某处的 Samba 服务器,或使用-net user,smb=/path/to/folder来启动 samba 服务器。

-net user,smb对 QEMU的选择不走运。它所做的只是启动smbd(由于端口冲突,它与本地运行的另一个服务冲突)。可以说,这是无法使用的,尤其是考虑到多个客人时。(对于Linux,-virtfs(Plan 9)可用于轻松共享文件夹。)

Samba 的其他问题是它不仅限于文件夹共享,它还可以共享打印机、用户映射等等。我所需要的只是与 Windows 来宾共享一个(或多个?)文件夹。

是否存在适用于 Windows 客户机的 QEMU 的替代文件夹共享方法?

或者有没有办法配置 Samba 以将其自身限制为一组非常有限的功能并将其集成到 QEMU 中?这应该:

  • 并非网络中的每个人都应该能够访问该文件夹。
  • 包括本地用户(如果可行)。
  • 不提供其他功能(打印机共享)。
  • 用例:将一个git目录暴露给Windows,在Windows中编译并使用Linux进行分析。
  • 有一个可接受的速度,Windows 使用 virtio-scsi 和 virtio-net。
  • 能够与 Windows 7 来宾共享来自 Linux 主机的文件夹。

Lek*_*eyn 19

QEMU 内置的 Samba 服务

无法运行的-net user,smb选项是由于与较新的 Samba 版本 (>= 4) 不兼容造成的。这已在 QEMU v2.2.0 及更新版本中通过以下更改得到修复:

(Debian 已将后两个补丁向后移植到 Jessie 中的 2.1+dfsg-6。)

用法

您可以像\\10.0.2.4\qemu使用用户网络一样导出一个文件夹:

qemu-system-x86_64 \
    -net user,smb=/absolute/path/to/folder \
    -net nic,model=virtio \
    ...
Run Code Online (Sandbox Code Playgroud)

使用这些选项成功启动 QEMU 后,/tmp/qemu-smb.*-*/将创建一个包含smb.conf. 如果您足够快,则可以修改此文件以将路径设为只读或导出更多文件夹。

操作模式

每当通过“用户”网络访问端口 139 或 445 时,就会执行 samba 守护程序。通信通过 smbd 进程的标准输入/输出/错误发生。这就是较新的守护进程失败的原因,它会将错误消息写入管道而不是协议消息。

由于这种操作方法,守护进程不会侦听主机端口,因此只能由来宾访问。因此网络中的其他客户端甚至本地用户都无法使用此守护程序访问文件夹。

由于 QEMU v2.2.0 打印机共享是通过 samba 配置完全禁用的,所以另一个担心就没有了。

速度取决于网卡,所以建议使用Windows下的virtionetkvm驱动

另请注意,守护程序按/usr/sbin/smbd编译时指定的绝对路径(通常为)执行(使用--smbd选项)。每当您需要尝试新的二进制文件或 interpose 时smbd,您都需要修改该路径下的文件。

其他注意事项

可执行文件 ( *.exe) 必须在主机 ( chmod +x FILE)上可执行,来宾才能拥有执行权限。要允许执行任何文件,请将acl allow execute always = True选项添加到共享。

允许执行任何文件的只读smb.conf 配置示例(基于 QEMU v2.2.0):

...
[qem]
路径= /home/peter/windows
只读=
客人好=真
force user= peter 
acl allow execute always = True


Stu*_*all 12

2018一个简单的方法来共享之间的文件夹的Linux主机及的Windows虚拟机,以使RDP在Windowsguest和连接到vmRemmina远程桌面客户端与启用共享文件夹:

Remmina RDP 设置

这个下创建一个文件夹此PCLinux上的共享文件夹hostname)一个\\tsclient\shared-folder-name内部网络共享guest。您还可以映射网络驱动器:

Windows 来宾文件夹共享

  • 该解决方案并没有要求samba在运行。

  • libvirt/下测试,virt-manager但应该适用于任何虚拟化。