过去我使用过 Virtual Box,它对与 Windows 客户机共享主机上的文件夹有很好的支持。我正在寻找 QEMU 的类似功能。
该文档建议公开在网络中某处运行的 Samba 服务器,或使用 来-net user,smb=/path/to/folder
启动 Samba 服务器。
我没有选择-net user,smb
QEMU。它所做的只是启动smbd
(由于端口冲突,这与本地运行的另一个服务发生冲突)。可以说,这是无法使用的,尤其是在考虑到多名客人的情况下。 (对于Linux,-virtfs
(计划9)可用于轻松共享文件夹。)
Samba 的其他问题是它不仅限于文件夹共享,它还可以进行打印机共享、用户映射等等。我所需要的只是与 Windows 来宾共享一个(或多个?)文件夹。
QEMU 是否存在可与 Windows 客户机一起使用的替代文件夹共享方法?
或者有没有办法配置 Samba 将其自身限制为一组非常有限的功能并将其集成到 QEMU 中?它应该:
- 并非网络中的每个人都应该能够访问该文件夹。
- 包括本地用户(如果可行)。
- 不提供其他功能(打印机共享)。
- 用例:向Windows公开一个git目录,在Windows中编译并使用Linux进行分析。
- 有一个可以接受的速度,Windows使用virtio-scsi和virtio-net。
- 能够与 Windows 7 客户机共享 Linux 主机中的文件夹。
答案1
QEMU的内置Samba服务
该选项不起作用-net user,smb
是由于与较新的 Samba 版本 (>= 4) 不兼容造成的。此问题已在 QEMU v2.2.0 及更高版本中修复,并进行了以下更改:
- b87b8a8 slirp/smb:将 ncalrpc 目录移动到 tmp(自 v2.1.0 起)
- 44d8d2b net/slirp:为 smbd 指定 logbase(自 v2.2.0 起)
- 7912d04 slirp/smbd:修改/设置生成的 smbd.conf 中的几个参数(从 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 进程的标准输入/输出/错误进行。这就是较新的守护进程失败的原因,它会将错误消息而不是协议消息写入管道。
由于这种操作方法,守护进程不会侦听主机端口,因此只能由来宾访问。因此网络中的其他客户端甚至本地用户都无法使用此守护程序访问文件夹。
由于通过 samba 配置完全禁用了 QEMU v2.2.0 打印机共享,因此这里不再有另一个担心。
速度取决于网络适配器,因此建议使用virtionetkvm
驱动程序在Windows下。
/usr/sbin/smbd
另请注意,守护程序按编译时指定的绝对路径(通常为 )执行(使用--smbd
选项)。每当您需要尝试新的二进制文件或 interpose 时smbd
,您都需要修改该路径中的文件。
其他注意事项
可执行文件 ( *.exe
) 必须在主机 ( chmod +x FILE
) 上可执行,来宾才能拥有执行权限。要允许执行任何文件,请将该acl allow execute always = True
选项添加到共享。
例子只读smb.conf 配置允许执行任何文件(基于 QEMU v2.2.0):
... [qemu] 路径=/home/彼得/Windows 只读=是的 客人好=真 强制用户=彼得 acl 允许始终执行 = True
答案2
在2018年一种在不同用户之间共享文件夹的简单方法Linux主持人 &视窗虚拟机是使能够远程开发计划在 Windows 中并连接guest
到vm
Remmina 远程桌面客户端&启用共享文件夹:
这会在下面创建一个文件夹这台电脑(Linux 上的共享文件夹hostname
) &\\tsclient\shared-folder-name
内的网络共享guest
。您还可以映射网络驱动器:
这个解决方案确实不是需要
samba
运行。libvirt
在/下进行测试virt-manager
,但应该适用于任何虚拟化。
答案3
我设法使用匿名进行简单的工作设置网络文件系统出口。它需要启用“NFS 服务”在 Windows 客户机中并使用 regedit 设置匹配的 DWORD 值,AnonymousUid
并AnonymousGid
在Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
.
然后可以通过command.com命令挂载mount -o anon \\10.10.11.11\mnt\diskx\nfsshare Z:
,其中10.10.11.11是Linux主机的IP地址,\mnt\diskx\nfsshare
是定义的导出路径/etc/exports
。