QEMU Windows来宾和Linux主机之间的共享文件夹


24

过去,我使用过Virtual Box,它为与Windows guest虚拟机共享主机上的文件夹提供了很好的支持。我正在寻找QEMU的类似功能。

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

-net user,smb对QEMU 的选择感到不走运。它所做的全部工作就是启动smbd(由于端口冲突,该服务与在本地运行的其他服务冲突)。可以说,这是无法使用的,尤其是考虑到多个客人。(对于Linux,-virtfs(计划9)可用于轻松共享文件夹。)

Samba的其他问题是它不仅限于文件夹共享,还可以进行打印机共享,用户映射和whatsnot。我需要与Windows guest虚拟机共享一个(或多个?)文件夹。

是否存在与Windows guest虚拟机一起使用的QEMU的替代文件夹共享方法?

还是有一种方法可以将Samba配置为将自身限制为一组非常有限的功能并将其集成到QEMU中?这应该:

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


1
@CiroSantilli包子露宪六四事件法轮功这个问题被Linux标记为在哪里-virtfs工作得很好(另请参见此问题),但是我不知道Windows的9p驱动程序。
Lekensteyn'3

是的,不是说这是骗子或其他什么,只是相关。
Ciro Santilli新疆改造中心法轮功六四事件

Answers:


14

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 \
    ...

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

操作模式

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

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

由于QEMU v2.2.0打印机共享是通过samba配置完全禁用的,因此,这里不再需要担心。

速度取决于网络适配器,因此建议在Windows下使用virtio netkvm驱动程序

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

其他警告

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

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

...
[qemu]
路径= / home / peter / windows 
只读= 
来宾ok = true
强制用户= peter 
acl允许执行总是= true

我使用了此选项,我需要两个读写访问权限。我已经重新启动了qemu服务并相应地更新了conf。Windows guest虚拟机的资源管理器中的网络文件夹中没有任何内容。另外,在这种情况下,如何找到主机IP(我假设是10.0.2.4)?我对此NIC的访客IP为10.0.2.15。@Lekensteyn-有什么想法吗?
tsar2512 '18 -10-19

@ tsar2512通常,我转到资源管理器,然后使用Map Network Drive向分配一个字母\\10.0.2.4\qemu。最近,我跳过了这一步,直接从“运行”对话框中打开了所述路径。
Lekensteyn '18 -10-21

6

2018年,在Linux主机和Windows虚拟机之间共享文件夹的一种简单方法是在Windows中启用RDP并使用Remmina远程桌面客户端guest连接到并启用共享文件夹:vm

Remmina RDP设置

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

Windows Guest文件夹共享

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

  • libvirt/ 下进行了测试,virt-manager但可以与任何虚拟化一起使用。


有趣的技术是,文件系统重定向似乎是RDP功能。该xfreerdp /drive:shared-folder-name,/home/user/shared选项也应该起作用。源代码参考:Remmina配置FreeRDP库代码
Lekensteyn '18 -10-11

这是一个安全的解决方案,而没有任何潜在攻击者的危险吗?
戴夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.