Apagar instantâneo "libvirt" órfão

9

Estou tentando fazer um snapshot instantâneo usando o KVM de acordo com este procedimento .

Eu devo ter errado em algum momento porque estou em um estado que não entendo.

Minha VM é chamada prod . Foi criado no arquivo /srv/vm/prod.qcow2 .

Aparentemente, não há snapshot em execução: estou trabalhando no arquivo base. Eu posso adivinhar porque a data de modificação do arquivo /srv/vm/prod.qcow2 muda a cada minuto ou mais. Além disso, este comando confirma:

# virsh domblklist prod
Target     Source
------------------------------------------------
vda        /srv/vm/prod.qcow2

E não há nada para bloquear:

# virsh blockcommit prod vda --active --pivot
error: invalid argument: top '/srv/vm/prod.qcow2' in chain for 'vda' has no backing file

No entanto, o libvirt mantém o rastreio de um instantâneo antigo:

# virsh snapshot-list prod
 Name                 Creation Time             State
------------------------------------------------------------
 snap                 2015-06-09 12:11:33 +0200 disk-snapshot

Seu arquivo de descritor é /var/lib/libvirt/qemu/snapshot/prod/snap.xml :

<domainsnapshot>
  <name>snap</name>
  <state>disk-snapshot</state>
  <creationTime>1433844693</creationTime>
  <memory snapshot='no'/>
  <disks>
    <disk name='vda' snapshot='external' type='file'>
      <driver type='qcow2'/>
      <source file='/srv/vm/snap.qcow2'/>
    </disk>
  </disks>
[...]

O arquivo de origem /srv/vm/snap.qcow2 foi excluído.

Considerando o método que estou tentando implementar, é bem provável que esse instantâneo tenha sido criado com o seguinte comando:

virsh snapshot-create-as --domain prod snap --diskspec vda,file=/srv/vm/snap.qcow2 --disk-only --atomic

Não consigo removê-lo:

# virsh snapshot-delete prod snap
error: Failed to delete snapshot snap
error: unsupported configuration: deletion of 1 external disk snapshots not supported yet

Portanto, estou em um estado em que um instantâneo foi criado, aparentemente não é mais usado e não pode ser excluído.

Existe algo que eu possa fazer sobre isso?

Eu deveria me importar ou posso simplesmente ignorá-lo?

Editar

Acabei de remover o descritor do arquivo de instantâneo.

# systemctl stop libvirt
# mv /var/lib/libvirt/qemu/snapshot/prod/snap.xml /home/jerome
# systemctl start libvirt

Minha VM está ativa novamente e não vejo mais nenhuma referência ao instantâneo.

# virsh snapshot-list prod
 Name                 Creation Time             State
------------------------------------------------------------

Nada no virt-manager também.

Estou bem ou ainda há alguma limpeza para fazer?

Editar 2

Aparentemente, passar -–no-metadata para virsh snapshot-create-as evitaria isso problema ao não criar o arquivo .xml, mantendo assim nenhum traço do instantâneo.

    
por Jérôme 09.09.2015 / 16:49

1 resposta

11

O método adequado foi

virsh snapshot-delete prod --metadata snap

(Este comando pode ser encontrado no wiki . Eu tentei antes de perguntar aqui, mas falhou devido a um erro de digitação que foi corrigido desde.)

Eu não sei o que é que não é coberto pela remoção do arquivo .xml enquanto o libvirtd está inativo. Talvez a única diferença seja que parar o libvirtd não é necessário. Mesmo assim, talvez isso possa evoluir no futuro. Em qualquer caso, recomenda-se usar a API do libvirt em vez de tocar diretamente com arquivos.

Esta chamada não é necessária se o instantâneo foi criado com o argumento --no-metadata .

Eu obtive este esclarecimento em este tópico do lista de discussão de usuários da biblioteca .

Qualquer pessoa disposta a fazer backups através de instantâneos ao vivo deve ler a página wiki acima mencionada, e pode estar interessado no tópico do fórum que responde minhas perguntas noob e aponta para slides de Eric Blake , bem como esta postagem no blog e segue os comentários.

    
por 15.09.2015 / 18:12