在KVM主机和来宾之间设置共享文件夹

创建新的虚拟机后,您可能需要在KVM主机和KVM虚拟机之间共享文件和文件夹。 在本简要指南中,我们将了解如何使用Linux中的Virt-manager在KVM主机和来宾虚拟机之间设置共享文件夹。

在配置共享文件夹之前,请确保已在KVM主机上安装了Virt-manager。

  • 如何使用Virt-Manager管理KVM虚拟机

如果您已经安装了完整的KVM虚拟化软件包组,则无需单独安装Virt-manager。 Virt-manager是KVM虚拟化软件包组的一部分。 否则,您可能需要如上面的链接所示安装它。

从Virt-manager界面创建一个新的虚拟机。 这非常简单明了! 暂时不要启动虚拟机。 我们需要在KVM主机中创建共享文件夹。

在KVM主机中创建共享文件夹

在您要共享给客户机的KVM主机系统中创建一个新的共享文件夹。

为了本指南的目的,我创建了一个共享文件夹,名为 KVM_Share 在我的 $HOME 目录。

[[email protected] ~]$ mkdir ~/KVM_Share

接下来,为共享文件夹设置所需的权限。 我想从我的来宾虚拟机上编辑和修改此共享文件夹的内容,因此我授予了共享文件夹的完全权限。

[[email protected] ~]$ chmod 777 ~/KVM_Share

接下来将SELinux设置为 permissive 模式。 我还不知道如何为KVM共享文件夹设置适当的SELinux策略,所以我暂时将SELinux模式设置为 targetedpermissive 使用以下命令:

[[email protected] ~]$ sudo setenforce 0

此更改仅对当前运行时会话有效。 要使更改永久生效,请编辑 /etc/selinux/config 文件:

[[email protected] ~]$ sudo vi /etc/selinux/config

将SELinux模式设置为宽松:

[...]
SELINUX=permissive
[...]

保存并关闭文件。 重新引导系统以使更改生效。 现在是时候在Virt-manager中配置共享文件夹了。

如果未将SELinux设置为宽松模式,则在启动VM时会遇到以下错误。

Error starting domain: internal error: qemu unexpectedly closed the monitor: 2021-05-06T09:30:21.239353Z qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.5,addr=0x0: cannot initialize fsdev 'fsdev-fs0': failed to open '/home/sk/KVM_Share': Permission denied
 Traceback (most recent call last):
   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 65, in cb_wrapper
     callback(asyncjob, *args, *kwargs)   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 101, in tmpcb     callback(args, **kwargs)
   File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 57, in newfn
     ret = fn(self, *args, **kwargs)
   File "/usr/share/virt-manager/virtManager/object/domain.py", line 1329, in startup
     self._backend.create()
   File "/usr/lib64/python3.9/site-packages/libvirt.py", line 1353, in create
     raise libvirtError('virDomainCreate() failed')
 libvirt.libvirtError: internal error: qemu unexpectedly closed the monitor: 2021-05-06T09:30:21.239353Z qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.5,addr=0x0: cannot initialize fsdev 'fsdev-fs0': failed to open '/home/sk/KVM_Share': Permission denied

因此,暂时将SELinux设置为宽松的现代版本,然后继续后续步骤。

在KVM主机和来宾之间设置共享文件夹

打开Virt-manager并确保客户机系统已关闭。 选择来宾计算机,然后单击 打开 菜单栏上的按钮以显示虚拟机控制台和详细信息。

在Virt-manager中显示虚拟机控制台和详细信息

在下一个窗口中,单击 “显示虚拟硬件详细信息” 菜单栏上的按钮,然后单击 “添加硬件” 左窗格上的按钮。

单击Virt-manager中的“添加硬件”按钮

单击左窗格上的“文件系统”,然后在“源”路径中输入共享文件夹的位置,然后在“目标”路径下输入安装标签。 在这里,我正在分享 "~/KVM_Share" 目录,我的挂载标签是 /hostshare。 您可以根据需要指定mount_tag的名称。 请注意,mount_tag不是路径。 mount_tag只是用于标识主机共享的名称。 单击完成并应用以更新更改。

在KVM主机和来宾之间设置共享文件夹在KVM主机和来宾之间设置共享文件夹

您应该做的最后一件事是 选择适当的访问模式 用于访问共享文件夹。

在Virt-manager中选择用于访问共享文件夹的安全模式在Virt-manager中选择用于访问共享文件夹的安全模式

有三个可能的值。 他们是 passthroughmappedsquash

  • 直通 -指定使用来宾虚拟机内部设置的用户权限设置来访问源(即共享文件夹)。 即,文件使用与在来宾上创建的相同的凭据存储。 如果未指定,则这是默认的访问模式。
  • 映射的 -指定使用管理程序的权限设置访问源。 如果要具有来宾计算机的读写访问权限,则必须选择此模式。
  • 壁球 -与“通过”类似,例外是特权操作失败,例如 chown 被忽略。 这使得类似passthrough的模式可用于以非root用户身份运行虚拟机管理程序的用户。

选择首选访问方式后,单击“应用”按钮。 现在,我们已经从Virt-manager为KVM主机和来宾系统配置了共享文件夹。

现在,启动来宾虚拟机,并在来宾计算机中创建一个挂载点以挂载KVM主机系统的共享文件夹:

[[email protected] ~]$ mkdir ~/hostfiles

最后,使用以下命令将共享文件夹安装在来宾计算机中:

[[email protected] ~]$ sudo mount -t 9p -o trans=virtio /hostshare hostfiles/

共享文件夹 ~/KVM_Share 安装在 hostfiles 虚拟机中的目录。 从现在开始,您可以从来宾虚拟机访问共享文件夹的内容。 您还可以在KVM主机和来宾系统上编辑和删除共享文件夹的内容。

要在每次引导时自动挂载共享文件夹,请将以下行添加到 /etc/fstab 客户系统中的文件:

/hostshare /hostfiles 9p trans=virtio,version=9p2000.L,rw 0 0

希望这可以帮助。

资源:

文件共享基于内核的虚拟机KVMLinux共享文件夹虚拟化

Sidebar