Создать локальный пул хранения virt-manager

Создать локальный пул хранения virt-manager

Я хочу создатьпул хранениядля образов qcow2 virt-managerв моем домашнем каталогено я получаю странную ошибку:

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 остановит вас, если вы пойдете слишком необычно. Существует ограниченный набор путей, разрешенных по умолчанию, если вы выйдете за их пределы в какой-то моментвирт-аа-помощникбольше не сможет получить доступ к файлам. Но это необходимо, чтобы разрешить доступ для настраиваемого профиля гостя. Смотрите существующие правила в /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

Добавьте следующие две строки с правильным UUID в файл fstab:

# 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 destruction

8. Отменить определение пула

$ virsh pool-undefine default

Вы должны получить следующий текст: Значение по умолчанию для пула не определено.

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 

Теперь при создании виртуальных машин Virtual Machine Manager будет сохранять файлы qcow2 в каталоге /media/username/Shared/kvm.

Создание новой гостевой машины или файла qcow2

13. Запустить virt-manager

$ virt-manager

14. Создайте образ диска для виртуальной машины или создайте новую машину.

решение4

В моем случае это была ошибка - не особенно очевидная. Я пытался создать пул хранения в каталоге, поэтомуdir:Filesystem Directory

Есть 2 шага:

  1. Вы указываете typeи name, но здесь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 исправит их, как только вы нажмете «Готово».

Надеюсь, это кому-нибудь поможет.

Связанный контент