建立本機virt-manager儲存池

建立本機virt-manager儲存池

我想創建一個儲存池對於 virt-manager 的 qcow2 影像在我的主目錄中但我收到一個奇怪的錯誤:

Error creating pool: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

建立池時出錯

問題

  • 是否可以將儲存池放在我的主目錄中?
  • virt-manager 是否需要特殊權限才能存取該目錄?

完整的錯誤回溯

Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/createpool.py", line 442, in _async_pool_create poolobj = self._pool.install(create=True, meter=meter, build=build) File "/usr/share/virt-manager/virtinst/storage.py", line 531, in install raise RuntimeError(_("Could not define storage pool: %s") % str(e)) RuntimeErError creating pool: Could not define storage poror: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'

答案1

您可以建立池,但需要考慮一些事項。

  1. 「名稱」確實必須不含一組特殊字符,例如「/」。如果您想建立一個 /tmp/test 池,您可以將其命名為“測試」(在第 1 步(共 2 步))並給它路徑“/tmp/測試」(在第 2 步(共 2 步))並且它會起作用。

  2. 如果你走得太不常見,apparmor 會阻止你如果你在某個時候走出這些路徑,預設允許的路徑是有限的。virt-aa-助手將無法再存取這些文件。但這是必需的,以便允許存取每個客戶的自訂設定檔。請參閱現有規則/etc/apparmor.d/usr.lib.libvirt.virt-aa-helper並透過/etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper 查看 /etc/apparmor.d/local/README 新增自訂規則以了解更多資訊。

  3. apparmor 尚無法處理某些池類型。 virt-manager 的預設池類型為“目錄” 那沒問題。但是還有更高級的類型,例如“LVM組",對於這些類型,無法動態為來賓建立 Apparmor 規則(看到這個錯誤),在這些情況下,您需要透過變更 來允許您需要的額外路徑/etc/apparmor.d/abstractions/libvirt-qemu

答案2

是的,您可以為您的主目錄建立一個池。您可能嘗試建立一個名為“/home/matthias/virtual-guests/virt-manager”的池,其中包含“/”符號。以後建立池時,輸入名稱時不帶“/”符號。

您將來可能需要在另一個分割區上建立QCOW2檔案(磁碟映像檔),請參閱此中的步驟指導
另外你可能會發現這很有用指導

答案3

在另一個分割區上建立 qcow2 磁碟映像文件

本指南在 Ubuntu 22.04 LTS、22.10、23.04、23.10 上進行了測試。

自動將目錄連結到區塊(自動分割區掛載)

1. 新建目錄

$ sudo mkdir /media/username
$ sudo mkdir /media/username/Shared
$ sudo mkdir /media/username/Shared/kvm

重要的!目錄名稱 kvm 帶小寫字母。

2. 執行blkid 指令顯示可用區塊設備的資訊。您將需要通用唯一識別碼 (UUID)

$ sudo blkid

結果應該類似:

/dev/sda1: LABEL="Ubuntu" UUID="azazazaz-azaz-azaz-azaz-azazazazazaz" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Ubuntu" PARTUUID="a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1"
/dev/sda2: LABEL="Shared" UUID="abababab-abab-abab-abab-abababababab" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Shared" PARTUUID="a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2"

3. 編輯fstab 檔案。

$ sudo nano /etc/fstab

在 fstab 檔案中新增以下兩行以及正確的 UUID:

# Shared
UUID=abababab-abab-abab-abab-abababababab       /media/username/Shared        ext4    defaults        0       2

最終結果應該類似於:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p3 during installation
UUID=azazazaz-azaz-azaz-azaz-azazazazazaz /               ext4    errors=remount-ro 0       1
# Shared
UUID=abababab-abab-abab-abab-abababababab       /media/username/Shared        ext4    defaults        0       2

4.運行mount -a命令

$ sudo mount -a

可能的問題:

  1. 模擬器可能沒有路徑“/media/username/Shared/kvm/Disk.qcow2”的搜尋權限
  2. 啟動網域時發生錯誤:無法存取儲存檔案「/media/username/Shared/kvm/Disk.qcow2」(如 uid:10101,gid:101):權限被拒絕

5.修復權限問題

$ sudo chown root:root '/media'
$ sudo chmod 775 '/media'

$ sudo chown root:root '/media/username'
$ sudo chmod 775 '/media/username'

$ sudo chown username:username '/media/username/Shared'
$ sudo chmod 775 '/media/username/Shared'

$ sudo chown username:username '/media/username/Shared/kvm'
$ sudo chmod 777 '/media/username/Shared/kvm'

更改 libvirt 的預設儲存池

6. 列出目前池

$ virsh pool-list

您應該得到以下文字:

Name                 State      Autostart 
-------------------------------------------
default              active     yes 

7. 銷毀預設池。

$ virsh pool-destroy default

您應該收到以下文字:池預設已損壞

8.取消池的定義

$ virsh pool-undefine default

您應該得到以下文字:池預設值已未定義

9. 定義一個名為「default」的新池

$ virsh pool-define-as --name default --type dir --target /media/username/Shared/kvm

您應該得到以下文字:池預設已定義

10. 將池設定為在 libvirt 守護程式啟動時啟動

$ virsh pool-autostart default

您應該得到以下文字:池預設標記為自動啟動

11.啟動池

$ virsh pool-start default

您應該收到以下文字:池預設已啟動

12.檢查池的狀態

$ virsh pool-list

您應該得到以下文字:

Name                 State      Autostart 
-------------------------------------------
default              active     yes 

現在,在建立虛擬機器時,Virtual Machine Manager 會將 qcow2 檔案儲存到 /media/username/Shared/kvm 目錄中。

建立新的來賓電腦或 qcow2 文件

13.運行virt-manager

$ virt-manager

14. 為虛擬機器建立磁碟映像或建立新機器。

答案4

就我而言,這是一個錯誤——不是特別明顯。我試圖在目錄中建立儲存池,所以dir:Filesystem Directory

有 2 個步驟:

  1. 您指定typename,但這裡name 不是路徑。例子:test
  2. 下一步,Target Path這將為您提供建議的路徑/var/lib/libvirt/images/**test**. Simple **change**/var/lib/libvirt/images to whatever you want. Example:/libvirt-images-pool2/ (which will result in/libvirt-images-pool2/test```

注意:您可能需要擺弄所有權和權限,但我認為一旦您單擊“完成”,libvirt 就會修復它們。

希望它能幫助別人。

相關內容