在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