答案1
共享模式定义了虚拟化 (p9fs) 文件系统如何呈现给客户机。权限映射具有重要意义。要理解这一点,重要的是要记住虚拟化文件系统需要管理文件的权限,并且主机和客户机中的权限可能不同。
我发现关于这些模式的最佳文档来自libvirt 文档:
文件系统块有一个可选属性accessmode
,用于指定访问源的安全模式(自 0.8.5 起)。目前,这仅适用于type='mount'
QEMU/KVM 驱动程序。可能的值包括:
passthrough
source
使用来宾内用户的权限进行访问。如果未指定,则这是默认 设置accessmode
。更多信息。请注意,权限/所有权的更改将影响使用该文件系统的所有客户机。此模式通常非常快。mapped
使用虚拟机管理程序(QEMU 进程)的权限来访问源。更多信息。这意味着您需要确保虚拟机管理程序上的文件可供 QEMU 进程(libvirt-qemu
我的设置中的用户名)访问。优点是文件属性和权限已为客户机“映射”,因此它们在其他地方不会发生独立更改(只要文件保持可访问)。如果您的主机系统支持 ACL,此模式还将允许客户机中提供适当的 ACL 支持。此模式通常比直通模式慢一点。squash
与“passthrough”类似,不同之处在于“chown”等特权操作的失败将被忽略。这使得以非 root 身份运行虚拟机管理程序的人可以使用类似 passthrough 的模式。更多信息
答案2
我曾经遇到过非常类似的问题,提供对共享文件夹的读写访问权限。可以读取文件,但不允许将文件写入共享源路径文件夹。
Unix & Linux - KVM / QEMU / Virt-Manager:如何在已挂载的共享文件夹中存储文件
根本原因是客户系统以libvirt-qemu
用户身份运行。您应该按照以下步骤在正在运行的客户系统中的已挂载共享文件夹中创建文件:
在Virt-Manager
-> Add Hardware
->Filesystem
选择Mapped
作为Mode
虚拟机的设置。
更改共享文件夹的权限: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