KVM

Instantâneos de convidados KVM com Libvirt

Instantâneos de convidados KVM com Libvirt
As VMs têm muitos casos de uso, um dos quais é a capacidade das VMs de 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 estação de trabalho. Você também pode usar VMs descartáveis, que não possuem dados pessoais ou confidenciais, para testes de malware como a maioria da comunidade de segurança faz, apenas certifique-se de que a rede da VM está isolada do seu host e LAN.

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

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

Eu já discuti como os instantâneos funcionam no VirtualBox e, desta vez, gostaria de discutir os instantâneos dentro do Libvirt. Usarei QEMU-KVM como o hipervisor de back-end para minha instalação Libvirt. Seu caso pode ser diferente, mas a funcionalidade geral e a interface não devem ser muito diferentes, já que a libvirt tenta o seu melhor para padronizar a interface do frontend.

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

Criação de um instantâneo

Existem várias maneiras pelas quais você pode tirar e gerenciar instantâneos de sua VM. Aplicativos GUI como virt-manager e oVirt oferecem a funcionalidade e você pode até mesmo escrever scripts personalizados para fazer interface com a API libvirt que gerencia toda a gama de instantâneos para você.

No entanto, estarei usando a interface de 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 libvirt padrão e deve estar disponível em uma ampla gama de distribuições.

Para os comandos abaixo, certifique-se de substituir o nome da minha VM, VM1, pelo nome real da sua VM. Libvirt geralmente se refere a máquina virtual e contêineres como Domínios. Portanto, se você vir uma mensagem de erro sugerindo, digamos, "especifique o nome de domínio", você precisa fornecer o nome de sua VM como um dos argumentos para o comando. Use o seguinte comando para listar todas as VMs sob gestão da Libvirt.

lista de $ virsh --todos

Para obter um instantâneo de uma VM, basta executar:

$ virsh snapshot-create VM1

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

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

Você pode ver que o instantâneo foi criado. Por padrão, o nome do instantâneo é a data e hora de sua criação (o número de segundos desde a época do UNIX). A coluna Creation Time mostra a hora da criação de uma forma legível por humanos e a coluna State mostra o estado da VM quando foi capturada. Enquanto esta 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 está em execução. Não vai mudar com o tempo. Este recurso também é conhecido como instantâneo ao vivo e é bastante valioso, pois permite que você tire um instantâneo de sua VM sem qualquer tempo de inatividade. Os convidados KVM, pelo menos, funcionam bem com instantâneos ao vivo.

Certas cargas de trabalho, no entanto, exigem que você pare a VM antes que ela seja capturada. Isso garante que os dados no instantâneo sejam consistentes e não haja nenhum arquivo escrito pela metade ou dados ausentes. Se a carga de trabalho em execução em sua VM tiver IO alto, você provavelmente precisará desligar a VM antes de criar o instantâneo. Vamos criar um assim.

$ virsh shutdown VM1

Domínio VM1 está sendo encerrado

$ virsh snapshot-create VM1

Instantâneo de domínio 1556533868 criado

[email protegido]: ~ # virsh snapshot-list VM1
Estado da hora da criação do nome
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 em execução
1556533868 2019-04-29 16:01:08 +0530 desligamento
 
$ virsh start VM1
Domínio VM1 iniciado

Se você quiser nomear os instantâneos com algo diferente de carimbo de data / hora, use o comando:

$ virsh snapshot-create-as VM1 --name snap1
Estado da hora da criação do nome
------------------------------------------------------------
1556533387 2019-04-29 15:53:07 +0530 em execução
1556533868 2019-04-29 16:01:08 +0530 desligamento
snap1 2019-05-02 22:27:48 +0530 em execução

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

Revertendo a partir de um instantâneo

Tirar um instantâneo não adianta se você não puder voltar a ele. Nesse caso, você precisa reverter para um instantâneo, basta usar o comando:

$ virsh snapshot-revert $ VMName $ snapshot-name

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

Certifique-se de que não haja dados importantes em sua VM atual ou, se houver algo importante, tire um instantâneo de sua VM atual e volte para um instantâneo antigo.

Benefícios de QCOW2

O mecanismo de cópia na gravação de arquivos qcow2 permite que cada instantâneo ocupe um espaço muito pequeno. O espaço ocupado por um instantâneo aumenta com o tempo conforme a imagem em execução diverge do instantâneo. Portanto, desde que você não esteja regravando muitos dados, seus instantâneos ocuparã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 na gravação só precisa marcar o carimbo de data / 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 antigos sim. É tão simples quanto isso. Minha bancada de teste usa um disco rígido de 5400 RPM que de forma alguma está no auge de seu desempenho, ainda leva menos de alguns segundos para tirar um instantâneo ao vivo de uma VM neste disco.

Conclusão

Tal como acontece com a maioria dos utilitários relacionados com libvirt e virsh, a funcionalidade de instantâneo fornece uma interface muito flexível com recursos de nível empresarial, como instantâneo ao vivo, juntamente com os benefícios do mecanismo de cópia na gravação.

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

Portas de código aberto para motores de jogos comerciais
Recriações gratuitas, de código aberto e de mecanismo de jogo de plataforma cruzada podem ser usadas para jogar jogos antigos, bem como alguns dos tít...
Melhores jogos de linha de comando para Linux
A linha de comando não é apenas sua maior aliada ao usar o Linux - ela também pode ser uma fonte de entretenimento porque você pode usá-la para jogar ...
Melhores aplicativos de mapeamento de gamepad para Linux
Se você gosta de jogar no Linux com um gamepad em vez de um teclado típico e sistema de entrada de mouse, existem alguns aplicativos úteis para você. ...