创建本地 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/README 添加自定义规则/etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper 以了解更多信息。

  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

您应该看到以下文本:Pool default broken

8. 取消定义池

$ virsh pool-undefine default

您应该看到以下文本:Pool default has been undefined

9. 定义一个名为“default”的新池

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

您应该看到以下文本:Pool default defined

10. 将池设置为在 libvirt 守护进程启动时启动

$ virsh pool-autostart default

您应该看到以下文本:池默认标记为自动启动

11. 启动池

$ virsh pool-start default

您应该看到以下文本:Pool default started

12.检查池的状态

$ virsh pool-list

您应该看到以下文本:

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

现在,在创建虚拟机时,虚拟机管理器会将 qcow2 文件保存到 /media/username/Shared/kvm 目录中。

创建新的客户机或 qcow2 文件

13. 运行 virt-manager

$ virt-manager

14.为虚拟机创建磁盘映像或创建新机器。

答案4

就我而言,这是一个错误 - 不是特别明显。我试图在目录中创建存储池,所以dir:Filesystem Directory

有两个步骤:

  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 就会修复它们。

希望它能够对某人有所帮助。

相关内容