Instantâneos de convidados da KVM com Libvirt

Instantâneos de convidados da KVM com Libvirt
As VMs têm muitos casos de uso, um dos quais é a capacidade das VMs a serem usadas como máquinas de teste. Você pode experimentar em uma VM, aplicar patches e testar atualizações antes de fazer o mesmo em seus sistemas de produção ou em sua estação de trabalho. Você também pode usar VMs descartáveis, que carecem de dados pessoais ou sensíveis, para testes de malware como a maioria da comunidade de segurança, apenas verifique se a rede da VM está isolada do seu host e LAN.

No entanto, fica cansativo reinstalar o sistema operacional dentro da sua VM repetidamente. Isso dificulta seu fluxo de trabalho e, portanto, você precisa de uma maneira confiável de:

  1. Tire um instantâneo da sua VM a qualquer momento.
  2. Tenha um mecanismo para usar o instantâneo para reverter sua VM de volta a um estado de trabalho anteriormente.

Eu já discuti como os instantâneos funcionam no VirtualBox e desta vez eu queria discutir instantâneos no Libvirt. Eu estarei usando o Qemu-KVM como o hipervisor de back-end para minha instalação da LibVirt. Seu caso pode ser diferente, mas a funcionalidade e a interface gerais não devem ser muito diferentes, pois a libvirt tenta o melhor para padronizar a interface do front -end.

Se você não está familiarizado com o Libvirt e o Qemu-KVM, aqui está um guia sobre como você pode configurar o KVM no Debian.

Criando um instantâneo

Existem várias maneiras de tirar e gerenciar instantâneos da sua VM. Aplicativos da GUI como Virt-Manager e Ovirt oferecem a funcionalidade e você pode até escrever scripts personalizados para interagir com a API LibVirt que gerencia toda a gama de instantâneos para você.

No entanto, vou usar a interface da linha de comando virsh para mostrar como você pode gerenciar suas VMs e seus instantâneos. Este utilitário vem com quase todas as instalações padrão da LibVirt e deve estar disponível em uma ampla gama de distribuições.

Para os comandos abaixo, substitua o nome da minha VM, VM1, com o nome real da sua VM. Libvirt geralmente se refere a máquina e recipientes virtuais como Domínios. Portanto, se você vir uma mensagem de erro sugerindo, diga: "Especifique o nome do domínio", precisará fornecer o nome da sua VM como um dos argumentos ao comando. Use o seguinte comando para listar todas as VMs sob a gerência da LibVirt.

$ Virsh List --l

Para tirar um instantâneo de uma VM, simplesmente execute:

$ virsh snapshot-criate vm1

E para listar todos os instantâneos de uma determinada VM, use o comando:

$ virsh snapshot-list VM1
Estado do tempo de criação de nome
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 em execução

Você pode ver que o instantâneo é criado. Por padrão, o nome do instantâneo é o seu carimbo de hora de criação (o número de segundos desde a Epoch Unix). A coluna do tempo de criação mostra o tempo da criação de maneira humana e a coluna do estado mostra o estado da VM quando foi instantâneo. A como essa VM estava em execução, o estado do instantâneo também está 'em execução', mas isso não significa que o próprio instantâneo esteja executando. Não vai mudar com o tempo. Esse recurso também é conhecido como instantâneo ao vivo e é bastante valioso, pois permite que você tire um instantâneo da sua VM sem tempo de inatividade. Os convidados da KVM, pelo menos, funcionam bem com instantâneos ao vivo.

Certas cargas de trabalho, no entanto, exigem que você pare da VM antes de ser instantâneo. Isso garante que os dados no instantâneo sejam consistentes e não haja arquivo meio escrito ou dados ausentes. Se a carga de trabalho em execução na sua VM tiver alta IO, você provavelmente precisará desligar a VM antes de criar o instantâneo. Vamos criar um dessa maneira.

$ virsh Shutdown VM1

Domínio VM1 está sendo desligado

$ virsh snapshot-criate vm1

Snapshot de domínio 1556533868 Criado

root@Deb: ~# Virsh Snapshot-List VM1
Estado do tempo de criação de nome
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 em execução
1556533868 2019-04-29 16:01:08 +0530 Shutoff
$ virsh start vm1
Domínio VM1 começou

Se você deseja nomear os instantâneos algo diferente de registro de data e hora, use o comando:

$ virsh instantâneo-snapshot-create-as vm1-nome snap1
Estado do tempo de criação de nome
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 em execução
1556533868 2019-04-29 16:01:08 +0530 Shutoff
Snap1 2019-05-02 22:27:48 +0530 Running

Obviamente, você não precisa nomeá -lo Snap1, você pode escolher qualquer nome conveniente.

Revertendo de volta de um instantâneo

Para tirar um instantâneo, não for útil, se você não puder voltar a isso. Caso você precise voltar a um instantâneo, basta usar o comando:

$ virsh instantâneo-rever

O nome pode ser o registro de data e hora ou o nome atribuído ao usuário dado ao instantâneo.

Certifique -se de que não haja dados importantes na sua VM atual, ou se houver algo de importância, tire o instantâneo da sua VM atual e depois volte a um instantâneo mais antigo.

Benefícios do QCOW2

O mecanismo de cópia em gravação dos arquivos QCOW2 permite que cada instantâneo ocupe espaço muito pequeno. O espaço ocupado por um instantâneo aumenta com o tempo, à medida que a imagem em execução diverge do instantâneo. Então, desde que você não esteja reescrevendo muitos dados, seus instantâneos levarão apenas alguns MBs de armazenamento.

Isso também significa que os instantâneos também são muito rápidos. Desde então, o mecanismo de cópia sobre gravação só precisa marcar o registro de data e hora quando o instantâneo foi tirado. Os blocos de dados gravados no arquivo QCOW2 após o instantâneo não pertencem a ele, mas os mais velhos fazem. É tão simples quanto isso. Meu banco de teste usa um disco rígido de 5400rpm que não está de modo algum no auge de seu desempenho, ainda é preciso menos de alguns segundos para tirar um instantâneo ao vivo de uma VM neste disco.

Conclusão

Assim como na maioria dos utilitários relacionados à LibVirt e Virsh, a funcionalidade de instantâneo fornece uma interface muito flexível com recursos de grau corporativo, como instantâneos ao vivo, juntamente com os benefícios do mecanismo de cópia sobre gravação.

A Convenção de Nomeação Padrão também facilita para os scripts de shell remover periodicamente instantâneos antigos e substituí -los por novos. Um dos meus artigos mais antigos sobre instantâneos e políticas de instantâneos do OpenZFS também pode ser aplicado ao seu KVM Guest. Para obter mais informações sobre o utilitário de instantâneo Virsh, você pode usar o comando virsh help snapshot. A página de ajuda é muito pequena, precisa e fácil de entender.