Я хочу создатьпул хранениядля образов 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
Вы можете создавать пулы, но следует учитывать несколько моментов.
"Имя" действительно должно быть без набора специальных символов, таких как '/'. Если вы хотите создать пул /tmp/test, вы можете назвать его "тест" (на шаге 1 из 2) и укажите ему путь "/tmp/тест" (на шаге 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.Некоторые типы пулов пока не могут быть обработаны 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
Возможные проблемы:
- Эмулятор может не иметь прав поиска по пути '/media/username/Shared/kvm/Disk.qcow2'
- Ошибка запуска домена: Невозможно получить доступ к файлу хранилища '/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 шага:
- Вы указываете
type
иname
, но здесьname
это не путь. Пример:test
- Следующий шаг,
Target Path
это даст вам предлагаемый путь/var/lib/libvirt/images/**test**. Simple **change**
/var/lib/libvirt/imagesto whatever you want. Example:
/libvirt-images-pool2/(which will result in
/libvirt-images-pool2/test```
Примечание: вам, возможно, придется повозиться с правами собственности и разрешениями, но я думаю, что libvirt исправит их, как только вы нажмете «Готово».
Надеюсь, это кому-нибудь поможет.