共享模式定义了虚拟化(p9fs)文件系统向客户机呈现的方式。这对于权限映射有重要影响。要理解这一点,重要的是要记住,虚拟文件系统需要管理文件的权限,而它们在主机和客户机中可能不相同。
我找到的关于模式的最好文档来自 libvirt docs:
文件系统块有一个可选属性 accessmode
,指定访问源的安全模式(自 0.8.5)。目前,这仅适用于 QEMU/KVM 驱动程序的 type='mount'
。可能的值为:
passthrough
以客户机内部用户的权限访问source
。如果未指定,则为默认的accessmode
。更多信息。请注意,对权限/所有权的更改将影响使用该文件系统的所有客户机。此模式通常非常快速。mapped
以超级监视程序(QEMU进程)的权限访问源。更多信息。
这意味着您需要确保超级监视程序上的文件对QEMU进程(我的设置中的用户名为libvirt-qemu
)可访问。优点是,文件属性和权限在客户机中被“映射”,因此它们是独立于其他地方的更改(只要文件仍然可访问)。如果您的主机系统支持ACL,此模式还将允许客户机正确支持ACL。此模式通常比透传模式稍慢。squash
与“透传”类似,但特殊之处在于忽略了“chown”等特权操作的失败。这使得像我这样以非root用户运行超级监视程序的人可以使用类似透传的模式。更多信息我曾经遇到一个非常类似的问题,即提供共享文件夹的读写访问权限。我可以读取文件,但不能将文件写入共享源路径文件夹。
Unix & Linux - KVM / QEMU / Virt-Manager:如何将文件存储在挂载的共享文件夹中
根本原因是客户系统正在以 libvirt-qemu
用户身份运行。要在运行中的客户系统中的挂载共享文件夹中创建文件,需要执行以下步骤:
在 Virt-Manager
中 -> 添加硬件
-> 文件系统
,选择 映射
作为虚拟机的 模式
设置。
更改共享文件夹的权限:sudo chmod -R 777 /<path-to-shared-folder>
将所有者更改为您的用户名:sudo chown -R user:user /<path-to-shared folder>
sudo chmod -R 777 /
将所有者更改为您的用户名:sudo chown -R user:user /
将您的用户名添加到libvirtd
组:sudo usermod -G libvirtd -a
给libvirt-qemu
用户完全权限:sudo setfacl -R -m u:libvirt-qemu:rwx /*
注意:* = 指定要授予libvirt-qemu
权限的文件夹目录层次结构。Mode
指定了访问源的安全模式。Mapped
表示使用虚拟机监视器的权限设置来访问源。Passthrough
表示使用用户在虚拟客户机内设置的权限来访问源。这是默认模式。Squash
与Passthrough
类似,不同之处在于忽略特权操作(如chown
)的失败,这使得Passthrough
模式适用于没有提升权限运行虚拟机监视器的用户。
Mapping
及其相关内容的含义。 - anatoly techtonikpassthrough
是如何工作的,因为我在主机上没有vagrant:vagrant
用户。如果我在虚拟机中以root
用户运行,那么它能够访问主机上的所有内容吗?只是因为名称匹配而处于passthrough
模式? - anatoly techtonikchmod 777
并不是真正必要的,对于我来说,给予libvirt-qemu
读写执行权限已经足够了。 - polynomial_donut