使用virt-manager在Linux主机和Windows guest虚拟机之间共享文件吗?


26

是否可以在virt-manager中使用“ Filesystem Passthrough”虚拟硬件选项与Windows guest虚拟机共享Linux主机上的文件夹?我找到了一些有关如何使用Linux guest虚拟机执行此操作的教程,但是当我使用Windows guest虚拟机进行尝试时,在尝试启动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

我尝试采购一些文档,但我只能找到链接到FAQ和“一些屏幕截图”的官方页面

Answers:


16

我认为使用Windows guest虚拟机不可能做到这一点。我通常在Linux KVM主机上设置一个Samba服务器,然后将一个共享的文件夹共享给我的KVM guest虚拟机。

文件系统直通

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

设置Samba

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


赞成“设置桑巴舞”部分。这是更安全的方法
pqnet 2014年

@pqnet:请问您如何以及为什么更安全?
0xC0000022L

4
@ 0xC0000022L,因为它不依赖于虚拟化程序能否有效地欺骗来宾操作系统,如果操作系统改变,它可能会中断。Samba是一种网络协议,因此来宾操作系统对可以做什么和不能做什么都没有什么期望。
pqnet

6

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地址;您必须将其更改为自己的。

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


2

我相信@slm提供了最佳答案。但是,还有另一个用例。不过,这种替代方法有点麻烦。

粗略的指南。不要考虑以下权威命令:

  1. 创建一个映像文件(ms-dos软盘或ISO-9660 CD)
  2. 使用文件系统(例如mkfs.msdos)格式化图像
  3. 根据需要复制和处理图像上的文件,例如使用mcopy等
  4. 在Guest VM CD-ROM或软盘驱动器上安装映像

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

更多信息在这里:

/programming//q/11202706/3407600


1

只读共享是可能的(Windows guest虚拟机具有R / W,Linux主机只能读取),因为Linux主机可以在回送设备上安装NTFS,所以假设您为Windows guest虚拟机使用“原始”类型的存储:

假设您有Win.img作为原始映像,它被模拟为磁盘。

  • 步骤1:使用fdisk查找文件系统(因为它是磁盘)的偏移量:
$ fdisk -lu Win.img

Disk Win.img: 16.3 GB, 16252928000 bytes
255 heads, 63 sectors/track, 1975 cylinders, total 31744000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3a793a79

    Device Boot      Start         End      Blocks   Id  System
    Win.img   *          63    31712309    15856123+   7  HPFS/NTFS/exFAT

现在,计算偏移量= 63 x 512 = 32256

  • 步骤2:安装
mount Win.img /mntpoint -o ro,loop,offset=32256

警告

您可以将其挂载为RW,因此Linux可以对其进行写入,但是您的文件系统将损坏!因为您的Linux和Windows都在同一时间访问文件系统!他们可以分配相同的空闲块来写入要写入的文件!

在少数情况下,Linux读取不稳定

使用此方法,文件系统是安全的,并且大多数情况下可以稳定读取。但是,正如我所说,它们同时访问文件系统,因此,当Windows尝试写入内容时,可能不会通知Linux,从而读取损坏的内容。但是,如果仔细使用它,读数应该非常稳定。


3
这有多可靠?数据可以在缓存中。相对于其他系统上的读取,写入不会是原子的。
ctrl-alt-delor


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.