9p (libvirt/QEMU) 共享模式

ana*_*nik 8 virtualization qemu shared-folders

谁能解释一下 libvirt/QEMU 配置中的共享模式——默认、映射、passthrough、压缩——意味着什么?

在此处输入图片说明

我有这个共享passthrough模式。我看到在 VM 内部它归vagrant:vagrant用户所有(主机不存在)并且共享设置了 rw 位。但是尝试在那里创建文件会access denied出错。

我需要了解解决问题的方法。

小智 6

共享模式定义了虚拟化 (p9fs) 文件系统如何呈现给来宾机器。权限映射具有重要意义。要理解这一点,重要的是要记住虚拟化文件系统需要管理文件的权限,并且它们在主机中可能与在来宾中不同。

我发现的关于模式的最好的文档来自libvirt 文档

文件系统块有一个可选属性accessmode,用于指定访问源的安全模式(自 0.8.5 起)。目前这只适用type='mount'于 QEMU/KVM 驱动程序。可能的值为:

  • passthrough 使用source访客内部用户的权限访问。accessmode如果未指定,则这是默认值。更多信息。请注意,权限/所有权的更改将影响使用该文件系统的所有来宾。这种模式通常很快。
  • mapped 使用管理程序(QEMU 进程)的权限访问源。更多信息。这意味着您需要确保 QEMU 进程可以访问管理程序上的文件(libvirt-qemu我的设置中的用户名)。优点是文件属性和权限为来宾“映射”,以便它们在其他地方独立更改(只要文件保持可访问)。如果您的主机系统支持 ACL,此模式也将允许来宾中适当的 ACL 支持。这种模式通常比直通慢一点。
  • squash 与“passthrough”类似,例外是像“chown”这样的特权操作的失败被忽略。这使得类似 passthrough 的模式可供以非 root 身份运行虚拟机管理程序的人使用。更多信息


cl-*_*box 5

我曾经有一个非常相似的问题,提供对共享文件夹的读写访问。可以读取文件,但不允许我将文件写入共享源路径文件夹。

Unix & Linux - KVM / QEMU / Virt-Manager:如何将文件存储在挂载的共享文件夹中

根本原因是来宾系统以libvirt-qemu用户身份运行。要从已安装的共享文件夹中正在运行的来宾系统中创建文件,您应该执行以下步骤:

Virt-Manager-> Add Hardware->Filesystem选择Mapped作为ModeVM 的设置。

更改共享文件夹的权限: sudo chmod -R 777 /<path-to-shared-folder>

将所有者更改为您的用户名: sudo chown -R user:user /<path-to-shared folder>

更改虚拟磁盘文件的权限: sudo chmod -R 777 /<path-to-virtual-disks>

将所有者更改为您的用户名: sudo chown -R user:user /<path-to-virtual-disks>

将您的用户名添加到libvirtd组中:sudo usermod -G libvirtd -a <your-user-name>

授予libvirt-qemu用户完全权限:sudo setfacl -R -m u:libvirt-qemu:rwx /*

注意:* = 指定要授予libvirt-qemu权限的文件夹目录层次结构。

重新启动主机操作系统...现在您应该能够在来宾系统中创建文件。

有关 9p virtio 的信息 ->与来宾共享主机文件| QEMU 文档 9psetup

Mode指定访问源的安全模式。Mapped指定使用管理程序的权限设置访问源。Passthrough指定使用从虚拟客户机内部设置的用户权限设置访问源。这是默认模式。Squash与 类似Passthrough,不同之处在于chown忽略特权操作的失败,这使得一种Passthrough模式可用于运行没有提升特权的管理程序的用户。

  • 我认为没有必要在文件夹上使用 `chmod 777`,给予 `libvirt-qemu` `rwx` 权限对我来说就足够了。 (2认同)