Eu apenas me perguntei onde "-snapshot" armazena suas alterações e, eventualmente, descobriu onde: Parece usar o mesmo algoritmo como "mktemp".
Ou seja, se você definir a variável de ambiente TMPDIR para o caminho de algum diretório, ela armazenará seus dados temporários lá.
Caso contrário, ele os armazena em / tmp.
Portanto, se você quiser salvar instantâneos temporários em / var / tmp / kvm em vez de em / tmp, execute o qemu da seguinte forma:
$ TMPDIR=/var/tmp/kvm qemu-system-x86_64 -enable_kvm ...
Como alternativa, você pode "exportar" a variável primeiro:
$ export TMPDIR=/var/tmp/kvm
$ qemu-system-x86_64 -enable_kvm ...
Isso pode ser melhor se você iniciar várias VMs, porque você não precisa especificar a variável para cada chamada.
Além disso, lembre-se de adicionar também "-no-shutdown" às opções do qemu se quiser manter as alterações em vez de perdê-las quando a VM for encerrada.
Com -no-shutdown, o vm entra em um estado parado após o desligamento, mas o processo vm permanece ativo.
Isso permite que você se conecte ao console do monitor KVM e emita o comando "commit", que grava todas as alterações do arquivo temporário no arquivo de imagem da VM. Depois disso, você emite o comando "quit" que realmente encerra o processo da VM.
Sem "-no-shutdown", você não tem a chance de emitir o comando "commit" e, sem isso, todas as alterações no arquivo temporário serão perdidas quando o processo da VM for encerrado.
E outra observação: não admira que nenhum arquivo seja exibido no diretório especificado por $ TMPDIR quando a VM tiver iniciado com "-snapshot".
O arquivo está lá, mas o qemu apaga o arquivo imediatamente após criá-lo e, portanto, ele não aparece em uma lista de diretórios.
Mas o processo do qemu ainda contém uma referência ao arquivo, e assim o arquivo é mantido ativo até que o processo do qemu termine. Só então o arquivo "deletado" será realmente deletado, e o espaço ocupado por ele será retornado como espaço livre para o sistema de arquivos.