Esse problema foi causado pela forma como o libvirt usa o apparmor.
O comportamento padrão é fornecer alguma proteção para o host em relação ao convidado, restringindo quais arquivos o processo de virtualização no host pode acessar. A libvirt sabe que o processo de virtualização (kvm, neste caso) precisa da imagem do disco para funcionar corretamente, então cria um perfil apparmor que permite acesso a windowsxp-1.qcow2
. No entanto, ele não sabe que windowsxp-1.qcow2
é suportado por basewindowsxp.qcow2
, portanto, o perfil apparmor não permite acesso a esse arquivo.
É lamentável que o relatório de erros do kvm seja tão mínimo. A falha subjacente foi quase certamente um EPERM ao abrir basewindowsxp.qcow
, mas aparentemente esse erro é achatado e a informação útil é perdida.
No entanto, a leitura dos registros do sistema revelará que o apparmor está fazendo alguma coisa. Por exemplo,
28 de maio 13:12:28 hostname kernel: [5338.835932] type = 1503 audit (1275066748.269: 42): operação="abrir" pid = 10601 pai = 1 profile="libvirt-b1a29fd0-698c-11df-9c21- f78cb972735d "requested_mask=" :: w "denied_mask=" :: w "fsuid = 0 ouid = nome 1001=" / var / lib / libvirt / images / basewindowsxp.img "
Isso mostra o que acontece quando um perfil apparmor nega acesso de gravação a um arquivo para um processo. Cada vez que a inicialização da VM falhou por causa dessa configuração incorreta, esta mensagem de log apareceu em / var / log / messages.
Existem várias soluções possíveis para o problema.
1) Desativar a proteção do apparmor. Isso é controlável por meio da GUI do virt-manager. Na seção de visão geral, subseção de segurança, apparmor pode ser desativado.
2) Permitir manualmente o acesso ao arquivo extra. Isso é controlado modificando os arquivos apparmor no diretório /etc/apparmor.d/libvirt/. Adicionando uma linha como:
"/var/lib/libvirt/images/basewindowsxp.img" r,
para o arquivo que corresponde ao uuid da vm em questão concederá acesso de leitura ao nome do arquivo entre aspas.
3) Atualize para uma versão mais nova do apparmor / libvirt / a plataforma base e recrie as VMs. Aparentemente, essa configuração incorreta foi notada e é endereçada automaticamente em versões novas o suficiente do software em questão.