我最近开始尝试在最新版本的 KVM/QEMU/libvirt 中支持直通文件系统。使文件系统可用于读取访问“刚刚奏效”,但我对写入访问应该如何工作感到有些困惑。在客户机中挂载文件系统后:
# mount -t 9p -o trans=virtio /fs/data /mnt
Run Code Online (Sandbox Code Playgroud)
如果现有文件具有 mode ,我可以修改它o+w:
# cd /mnt/work
# ls -l foo
-rw-rw-rw-. 1 root root 17 Dec 20 11:16 foo
# cat foo
this is line one
# echo this is line two >> foo
# cat foo
this is line one
this is line two
Run Code Online (Sandbox Code Playgroud)
但是无论目录权限如何,我都无法创建新文件或目录:
# ls -ld /mnt/work
drwxrwxrwx. 2 root root 4096 Dec 20 11:16 /mnt/work
# cd /mnt/work
# …Run Code Online (Sandbox Code Playgroud) 我的目标是为 KVM 来宾设置对 9p 共享的完全写入访问权限。主机和来宾都具有相同 ID 的相同用户/组。主机和来宾都应该能够使用相同的用户名写入共享,我不想区分文件是由主机写入还是由来宾写入。kvm 进程以 root 身份运行——我在 /etc/libvirt/qemu.conf 中设置了user和groupto root。
在主机上的guest定义中,共享定义如下:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/storage/data'/>
<target dir='data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</filesystem>
Run Code Online (Sandbox Code Playgroud)
在来宾中,共享安装为:
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
Run Code Online (Sandbox Code Playgroud)
问题是来宾中的 root 用户无法写入主机上非 root 用户拥有的文件/文件夹。更奇怪的是,guest 的 root 可以重命名和删除此类文件。也就是说,当我在主机上以非 root 用户身份创建文件时,即使我可以重命名和删除它,我也无法以访客的 root 用户身份编辑它!
我还发现,在主机上以非 root 用户创建的文件夹的权限设置为 777,来宾的 root 可以写入(即在其中创建文件)。但是,这不适用于文件 - 无论权限如何,它们仍然无法编辑。
主机和来宾都运行 Linux 服务器 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux。在 Debian 中,SELinux 默认是禁用的,我没有启用它。我尝试了所有三种可用的 9p 访问模式(passthrough、mapped和 …
我正在配置服务,该服务将 nginx 上传的大量文件存储在主机系统的 /srv/storage 目录中。这些文件由工作 KVM 来宾处理,它们可能会创建新文件或为现有文件分配扩展属性。文件永远不会被覆盖,但最终会被其中一名工作人员删除。
因此主机服务器的文件写入速度约为 177MB/s。KVM 映像是存储在主机文件系统上的 QCOW2 文件,由于此 virtio 设置,映像在 KVM 实例内达到了约 155MB/s:
<driver name='qemu' type='raw' cache='none' io='native'/>
Run Code Online (Sandbox Code Playgroud)
但是我无法为共享文件夹获得这样的结果。我使用virtfs aka virtio 9p获得了最大 40MB/s 的速度。似乎没有挂载的 AIO 等效项:
mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage
Run Code Online (Sandbox Code Playgroud)
我也在想:
那么如何使用扩展属性有效地与 KVM 来宾共享主机的文件夹)。
我有一台 CentOS 6.3 机器,目前正在通过 KVM/QEMU/Libvirt 运行 2 台虚拟化的 CentOS 6.2 机器。我正在尝试在来宾和主机之间设置文件系统直通。但是,该选项在 Virtualization Manager 中呈灰色显示,并显示消息“不支持此管理程序/libvirt 组合”。
此外,如果我尝试使用
virsh edit [VM name]
Run Code Online (Sandbox Code Playgroud)
VM 沿着“QEMU 不支持直通”这一行在引导时引发错误(抱歉,我现在没有确切的错误。我无法访问机器,下次我在前面时会更新其中)。
我似乎无法找到有关此问题的大量信息。CentOS 和文件系统直通之间是否存在兼容性问题?
谢谢。