Eu quero criar umconjunto de armazenamentopara imagens qcow2 do virt-managerno meu diretório pessoalmas recebo um erro estranho:
Error creating pool: Could not define storage pool: XML error: name /home/matthias/virtual-guests/virt-manager cannot contain '/'
questões
- É possível ter o pool de armazenamento no meu diretório inicial?
- Preciso de permissões especiais para o virt-manager acessar o diretório?
rastreamento de erro completo
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 '/'
Responder1
Você pode criar pools, mas há algumas coisas a serem consideradas.
O "nome" realmente não precisa de um conjunto de caracteres especiais, como '/'. Se você deseja criar um pool /tmp/test você pode nomeá-lo "teste" (no passo 1 de 2) e dê o caminho "/tmp/teste" (na etapa 2 de 2) e funcionará.
o apparmor irápara-lo se você for muito incomum Existeum conjunto limitado de caminhos que são permitidos por omissão, se você sair deles em algum momentovirt-aa-ajudantenão será mais capaz de acessar os arquivos. Mas isso seria necessário para permitir o acesso ao perfil personalizado por convidado. Veja as regras existentes
/etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
e adicione regras personalizadas em/etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper
/etc/apparmor.d/local/README para obter mais informações.Alguns tipos de pool ainda não podem ser manipulados pelo apparmor. O tipo de pool padrão do virt-manager será "diretório" e tudo bem. Mas existem tipos mais avançados como "grupos lvm", para esses tipos de regras de apparmor não podem ser criadas para o convidado instantaneamente (veja bug sobre isso), nesses casos você precisará permitir os caminhos extras necessários alterando
/etc/apparmor.d/abstractions/libvirt-qemu
.
Responder2
Sim, você pode criar um pool para seu diretório inicial. Você provavelmente tentou criar um pool chamado "/home/matthias/virtual-guests/virt-manager" que contém os símbolos "/". No futuro, ao criar um pool, insira um nome sem o símbolo "/".
Você pode precisar criar um arquivo QCOW2 (arquivo de imagem de disco) em outra partição no futuro, veja os PASSOS desteGUIA.
Além disso, você pode achar útil issoGUIA.
Responder3
Criando um arquivo de imagem de disco qcow2 em outra partição
Este guia foi testado no Ubuntu 22.04 LTS, 22.10, 23.04, 23.10.
Vinculando automaticamente um diretório a um bloco (montagem automática de partição)
1. Crie novos diretórios
$ sudo mkdir /media/username
$ sudo mkdir /media/username/Shared
$ sudo mkdir /media/username/Shared/kvm
Importante!Nome do diretório kvm com letras minúsculas.
2. Execute o comando blkid para exibir informações sobre os dispositivos de bloco disponíveis. Você precisará de um identificador universalmente exclusivo (UUID)
$ sudo blkid
O resultado deve ser algo como:
/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. Edite o arquivo fstab.
$ sudo nano /etc/fstab
Adicione as duas linhas a seguir com o UUID correto no arquivo fstab:
# Shared
UUID=abababab-abab-abab-abab-abababababab /media/username/Shared ext4 defaults 0 2
O resultado final deve ser algo como:
# <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. Execute mount -a
o comando
$ sudo mount -a
Possíveis problemas:
- O emulador pode não ter permissões de pesquisa para o caminho '/media/username/Shared/kvm/Disk.qcow2'
- Erro ao iniciar o domínio: não é possível acessar o arquivo de armazenamento '/media/username/Shared/kvm/Disk.qcow2' (como uid:10101, gid:101): permissão negada
5. Corrija problemas de permissão
$ 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'
Alterando o pool de armazenamento padrão para libvirt
6. Liste os pools atuais
$ virsh pool-list
Você deve obter o seguinte texto:
Name State Autostart
-------------------------------------------
default active yes
7. Destrua o pool padrão.
$ virsh pool-destroy default
Você deverá obter o seguinte texto: Pool padrão destruído
8. Indefinir o pool
$ virsh pool-undefine default
Você deverá obter o seguinte texto: O padrão do pool foi indefinido
9. Defina um novo pool chamado “default”
$ virsh pool-define-as --name default --type dir --target /media/username/Shared/kvm
Você deve obter o seguinte texto: Pool padrão definido
10. Defina o pool para iniciar quando os daemons libvirt iniciarem
$ virsh pool-autostart default
Você deverá obter o seguinte texto: Pool padrão marcado como iniciado automaticamente
11. Inicie a piscina
$ virsh pool-start default
Você deverá obter o seguinte texto: Pool padrão iniciado
12. Verifique o estado da piscina
$ virsh pool-list
Você deve obter o seguinte texto:
Name State Autostart
-------------------------------------------
default active yes
Agora, ao criar máquinas virtuais, o Virtual Machine Manager salvará os arquivos qcow2 no diretório /media/username/Shared/kvm.
Criando uma nova máquina convidada ou arquivo qcow2
13. Execute o virt-manager
$ virt-manager
14. Crie uma imagem de disco para a máquina virtual ou crie uma nova máquina.
Responder4
No meu caso, foi um erro - não particularmente óbvio. Eu estava tentando criar um pool de armazenamento no diretório, entãodir:Filesystem Directory
Existem 2 etapas:
- Você especifica
type
ename
, mas aquiname
não é caminho. Exemplo:test
- Próxima etapa,
Target Path
isso fornecerá o caminho sugerido/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```
Nota: pode ser necessário mexer na propriedade e na permissão, mas acho que a libvirt os corrige assim que você clica em Concluir.
Espero que ajude alguém.