terça-feira, 25 de outubro de 2011

Desvendando o snapshot da VMware

                 

Já li algumas vezes que o snapshot seria uma cópia do ‘.vmdk’ de uma máquina virtual feita num determinado momento, e que poderíamos voltá-la a qualquer momento, porém, pesquisando um pouco mais sobre, podemos ver que não trata-se exatamente de uma cópia. O que acontece na verdade é que quando fazemos um snapshot de uma VM estamos redirecionando todas as operações de escrita em disco do ‘-flat.vmdk’ original da VM para um novo arquivo ‘-delta.vmdk’, no qual todas as alterações realizadas a partir do momento em que o snapshot foi feito serão armazenadas. O disco virtual original passa a ser utilizado somente para leitura.

Antes de aprofundarmos no assunto snapshot precisamos entender como funciona o acesso ao disco de uma máquina virtual. Para cada disco de uma máquina virtual existem dois arquivos relacionados, um é pequeno e serve para definir a geometria do disco (número de cilindros, setores e cabeças) de forma que a BIOS da VM saiba como utilizar o disco. O outro é aonde os dados são efetivamente armazenados. Este disco pode ser visto como uma matriz de blocos:

FIGURA 1
Na imagem abaixo podemos ver claramente a diferença entre os dois arquivos, apesar de ambos terem a extensão ‘.vmdk’, repare que o arquivo no qual os dados são efetivamente armazenados possui também a expressão ‘-flat’ junto ao seu nome.

FIGURA 2
É nesse arquivo ‘-flat.vmdk’ que ocorrem as operações de I/O (leitura e escrita) da máquina virtual, portanto quando fazemos um snapshot, este arquivo passa a ser utilizado apenas para leitura e um outro arquivo é criado para armazenar as alterações que são feitas após a criação do snapshot.

FIGURA 3
Com a criação do snapshot dois novos arquivos são criados para cada disco da máquina virtual. A lógica é a mesma para os discos originais, ou seja, um arquivo armazena as configurações do disco (.vmdk) e o outro armazena os dados em si (-delta.vmdk).

FIGURA 4
O arquivo ‘-delta.vmdk’ funciona como um arquivo de log, ou seja, ele cresce a medida que alterações vão sendo feitas na máquina virtual. O tamanho inicial deste arquivo é de 16MB, e ele cresce nessa mesma proporção. Por isso não podemos dizer que o snapshot é uma cópia do disco virtual original da VM. Quando alteramos algum bloco no ‘.vmdk’ da VM esta alteração é aplicada no arquivo ‘-delta.vmdk’. Se este mesmo bloco for alterado novamente, apenas uma atualização é feita no arquivo do snapshot. Dessa forma podemos afirmar que o tamanho máximo que um arquivo ‘-delta.vmdk’ pode atingir é o mesmo do ‘.vmdk ‘ original. A velocidade com que este arquivo vai crescer depende da quantidade de escrita em disco que a VM produz.

Quando mais de um snapshot é criado numa máquina virtual, novos arquivos ‘-delta.vmdk’ são criados e o arquivo ‘-delta.vmdk’ anterior se torna somente leitura. Cada arquivo ‘-delta.vmdk’ pode atingir o mesmo tamanho do arquivo ‘-flat.vmdk’ original daVM.

FIGURA 5
Além do arquivo ‘-delta.vmdk’, existem outros arquivos que estão relacionados com a utilização de ‘snapshots’:

*.vmsd – este arquivo é utilizado para armazenar informações e metadados sobre os ‘snapshots’. É um arquivo de texto que guarda informações do tipo: nome do snapshot, UID, nome do arquivo do disco, etc. É criado juntamente com a máquina virtual, mas mantêm-se com 0 bytes até o momento em que é feito o primeiro snapshot. Sempre que um novo snapshot é feito este arquivo é “populado”. Repare que na FIGURA 2 este arquivo encontra-se com 0 bytes e na FIGURA 4, após a criação de um snapshot, o mesmo encontra-se com 454 bytes. Abaixo segue um exemplo do conteúdo deste arquivo:

FIGURA 6
*.vmsn – este é o arquivo de estado do snapshot, nele é armazenado o estado exato em que a máquina virtual se encontrava no momento em que o snapshot foi feito. O tamanho deste arquivo depende se no momento da criação do snapshot a opção para preservar a memória da VM estava marcada, se sim, o arquivo será alguns megabytes maior do que a quantidade de memória alocada para a VM. Se não, o arquivo será bem pequeno. No exemplo acima o snapshot foi feito com a opção para preservar a memória marcada por isso o arquivo possui cerca de 4GB, como pode ser notado na FIGURA 4.

Como disse anteriormente, o snapshot mantém a VM exatamente no mesmo estado em que ela se encontrava quando o mesmo foi feito. Isso inclui:

Estado da memória: todo o conteúdo existente na memória RAM da VM (neste caso é necessário que a VM esteja ligada e que a opção “Snapshot the virtual machine’s memory” esteja marcada).

Estado das configurações: todas as configurações da máquina virtual.

Estado do disco: o estado dos discos virtuais da VM.

Além disso, o snapshot captura o“Power State” da máquina virtual, ou seja, se fizermos um snapshot com a máquina desligada, quando revertermos este snapshot a VM voltará desligada.

Há ainda uma opção chamada “Quiesce guest file system ...”, esta opção é muito utilizada por softwares de backup, pois garante a integridade da VM no momento em que o snapshot é realizado.

FIGURA 7
A imagem acima exibe a tela de criação de um snapshot quando feito através do Vsphere Client. Também é possível fazer a criação do snapshot através da linha de comando.

Algumas considerações sobre a utilização de snapshots e porque eles não devem ser utilizados como uma forma de backup:

- Conforme explicado anteriormente, o disco virtual original da VM passa para o estado ‘somente leitura’ e um novo disco é criado para armazenar as alterações realizadas. Apesar das operações de escrita ocorrerem somente no novo disco, as operações de leitura podem ocorrer em ambos os discos, impactando no desempenho da máquina virtual;

- Impacto no desempenho da LUN na qual o snapshot é criado, devido ao fato que toda vez que o arquivo ‘-delta.vmdk’ é incrementado uma operação de lock/unlock é executada pelo host no qual a máquina virtual se encontra;

- Risco de perda de dados no caso de o snapshot precisar ser destruído;

- Os snapshots podem crescer a ponto de encher um datastore.

Portanto, com base nas considerações levantadas anteriormente, devemos ter em mente que o snapshot deve ser usado apenas para situações temporárias, como por exemplo, na realização de um backup ou na aplicação de um patch ou update.

Depois de fazer o que tínhamos pra fazer devemos decidir o que fazer com este snapshot. As seguintes opções estão disponíveis:

- Aceitar as alterações que foram realizadas (Consolidate)
- Destruir as alterações que foram feitas (Revert)
- Adicionar um novo snapshot

No VSphere 5 a opção “Consolidate” foi adicionada de forma mais explícita no menu da máquina virtual, conforme mostrado na imagem abaixo:

FIGURA 8
As versões anteriores não apresentam esta opção, por isso para aplicar as alterações realizadas no snapshot definitivamente ao disco original da máquina virtual é necessário abrir o ‘Snapshot Manager’ e excluir o snapshot em questão:

FIGURA 9
A opção ‘Delete All’ deve ser usada no caso em que houver mais de um snapshot e as alterações de todos eles devam ser consolidadas.

Quando optamos por estas opções (Consolidate ou Delete) estamos aceitando as alterações que foram feitas na máquina virtual durante o período em que o snapshot esteve presente e permitindo que o “merge” seja feito entre o arquivo de log do snapshot (-delta.vmdk) e o disco virtual original da VM (-flat.vmdk). O vmkernel varre o arquivo de log e sobrescreve o .vmdk original com os dados mais recentes. A figura abaixo exemplifica bem essa situação:

FIGURA 10
Pode ocorrer de o arquivo de log do snapshot ficar muito grande, dificultando a consolidação com o disco original. Neste caso, o vmkernel automaticamente faz um novo snapshot da VM, para que o arquivo de log possa ser utilizado apenas para a leitura e consolidação. Este snapshot feito automaticamente pelo vmkernel é chamado de Consolidate Helper Snapshot (CHS).

Existe também a possibilidade de não ficarmos satisfeitos com as alterações que foram realizadas na VM após a criação do snapshot. Pense por exemplo numa aplicação mal sucedida de um determinado patch de atualização, neste caso temos a opção de retornar a máquina virtual para o ponto em que ela estava no momento que o snapshot foi realizado, descartando assim todas as alterações que haviam sido realizadas.

FIGURA 11
O VSphere Client oferece duas opções para voltarmos um snapshot. A primeira é a opção “Revert to Current Snapshot” (veja na FIGURA 8). Esta opção volta a máquina virtual para o estado em que snapshot mais próximo, ou seja, o mais recente, estava. Caso exista mais de um snapshot, o recomendado é utilizar a segunda opção, conhecida como “Go to”. Esta é acessada através do Snapshot Manager (FIGURA 9) e permite que você escolha para qual snapshot deseja retornar. Como no nosso exemplo temos apenas um snapshot, as duas opções teriam o mesmo resultado.


Quem quiser aprofundar um pouco mais sobre o assunto pode dar uma conferida nos textos que utilizei como base para este post:

http://www.vmdamentals.com/?p=76
http://www.vmdamentals.com/?p=332
http://www.daemonchild.com/vsphere-snapshots
http://searchvmware.techtarget.com/tip/How-VMware-snapshots-work
http://searchvmware.techtarget.com/tip/Deleting-virtual-machine-snapshots-without-wasting-disk-space

54 comentários:

  1. Excelente artigo! Parabéns pela iniciativa... abs!

    ResponderExcluir
  2. Amigo, simplesmente fantástico esta postagem, agora sim compreendi e muito o snapshot do vmware.
    Parabéns pelo blog, favoritei ele!

    ResponderExcluir
  3. Parabéns pelo artigo, muito bom!!!

    ResponderExcluir
  4. Gostei do artigo, explicou de forma fácil e eficiente!

    ResponderExcluir
  5. Mesmo após um certo tempo de publicação, li o artigo e realmente gostaria de parabenizá-lo!!! Excelente! Muito, mas muito mesmo, esclarecedor!!! Abs!

    ResponderExcluir
  6. Muito bom!
    Esclareceu tudo, estou aplicando a técnica e o artigo me será muito útil!
    ;)

    ResponderExcluir
  7. Poxa, parabéns cara! Muito claro e esclarecedor mesmo! É isso que falta hoje em dia, objetividade e clareza, saber passar a informação de forma simples e clara é pra poucos.

    ResponderExcluir
  8. Muito interesante e util.
    Obrigado.
    Mario Fontes

    ResponderExcluir
  9. Mandou super bem, eu esta com dúvida quanto ao Consolidate.

    ResponderExcluir
  10. Um tópico antigo, porém muito atual, dissertado com muita clareza e objetividade... Parabéns

    ResponderExcluir
  11. Parabéns pelo texto... bastante esclarecedor.

    ResponderExcluir
  12. Meus parabéns, gostei muito da postagem e espero poder ler outras com tanta riqueza de detalhes.

    ResponderExcluir
  13. Execelente, entendi melhor o funcionamento snapshot. Parabéns abs

    ResponderExcluir
  14. Parabens excelente artigo!
    Texto muito objetivo, que faciltou bastante o entendimento do assunto.

    ResponderExcluir
  15. Muito bom o texto, finalmente um artigo decente sobre snapshot.

    ResponderExcluir
  16. Parabéns pelo conteúdo.

    ResponderExcluir
  17. Estou com uma dificuldade e gostaria de ajuda. Possuo uma VM (W7) precisa que quando ela inicie mantenha o data/hora desejado e não sincronize com a do pc, é possível fazer isso?
    Grato

    ResponderExcluir
    Respostas
    1. Diego,

      Tem sim.
      Segue os passos abaixo:

      Clica com o botão direito na máquina virtual que quer configurar e clica em "Edit Settings";
      Vai na aba "Options";
      Seleciona "VMware Tools";
      Na seção "Advanced", desmarca a caixa de seleção "Synchronize guest time with host"

      Excluir
  18. Muito boa explicação, sanou todas as minhas dúvidas sobre o assunto, obrigado!

    ResponderExcluir
  19. A versão gratuita do vmware tem snapshot ?

    Obrigado!

    []'s

    ResponderExcluir
  20. Parabéns pelo post meu caro, foi de grande valia, mas ainda tenho uma dúvida: como faço para criar uma máquina virtual que seria espelho de uma outra? O cenário é esse: tenho 6 atendentes, não quero ter que criar uma máquina para cada um, repetindo instalação do windows, configuração de ambiente, etc,etc... Já tenho uma maquina virtual pronta que chamei de "Agente1". Gostaria de criar as demais espelhadas nessa.

    ResponderExcluir
    Respostas
    1. Esse tipo de configuração é conhecida como Linked Clones e está disponível apenas na solução de VDI da VMware. Existem alguns artigos na internet que mostram como fazer isso através de scripts Powercli.

      Excluir
  21. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Wanderson, o artigo está explicando justamente isso! rsrs

      Excluir
    2. Tiago, minha pergunta se estendeu a outros ambientes, não só em "Vmware", como a própria restauração do sistema, no Windows e programas como "rollback rx".O artigo explica como funcionam as "snapshots" de uma forma técnica(do meu ponto de vista leigo), se restringindo a ambientes virtuais e sem responder ao que perguntei: como é possível clonar todo um disco, de forma que a cópia tenha uma proporção absurdamente menor que o original e em tão pouco tempo? Se puder responder de uma forma descomplicada, agradeço, pois se a resposta estiver no artigo, eu não encontrei(não consegui entender)! rsrs Obrigado!

      Excluir
  22. Posso deletar um snapshot com a VM ligada?

    ResponderExcluir
  23. Posso deletar um snapshot com a máquina virtual ligada?

    ResponderExcluir
  24. Olá, uso o VMWare e tenho uma Máquina Virtual do Windows 7. Após algumas utilizações, tenho na pasta VIRTUAL MACHINES-WINDOWS 7 PROFESSIONAL várias arquivos ocupando muito espaço. Gostaria de saber o que pode ser APAGADO sem prejudicar a execução do Windows 7. Eis os arquivos: Windows 7 Professional.vmdk com 5.74GB; Windows 7 Professional-000001.vmdk com 24.6GB; Windows 7 Professional-000002.vmdk e Windows 7 Professional-000003.vmdk com 448MB e 446MB respectivamente; Windows 7 Professional-Snapshot1.vmem e Windows 7 Professional-Snapshot2.vmem com 2GB cada; Windows 7 Professional-Snapshot1.vmsn e Windows 7 Professional-Snapshot2.vmsn com 2MB cada e, Windows 7 Professional.vmxf, Windows 7 Professional.vmx, Windows 7 Professional.vmsd e Windows 7 Professional.nvram com alguns KBytes. Obrigado.

    ResponderExcluir
    Respostas
    1. Kleber, esses arquivos são referentes a sua maquina virtual Windows 7, se apagar terá certamente problemas. Conforme explicação do Thiago, deixa os 2 arquivos .vmdk , da uma olhada no arquivo: Windows 7 Professional.vmdk , que ele deve ser o arquivo onde tem as informações do seu disco de dados.

      Excluir
  25. Alguém, por favor, pode me explicar como isso se aplica a outros ambientes semelhantes, não só em "Vmware", como a própria restauração do sistema, no Windows e programas como "rollback rx" e "Comodo Time Machine".Como é possível clonar todo um disco, de forma que a cópia tenha uma proporção absurdamente menor que o original e em tão pouco tempo? Se puderem responder de uma forma descomplicada, agradeço! :D

    ResponderExcluir
    Respostas
    1. Essa duvida em relação ao espaço eu tinha até ler o link: http://technet.microsoft.com/en-us/library/cc785914%28WS.10%29.aspx

      Excluir
    2. Tiago, me tira uma duvida por favor, antes de mais nada parabens pelo artigo.
      Eu queria saber se por alguma fatalidade eu tiver somente os arquivos do snapshot, eu consigo reestabelecer a maquina? Exemplo, por algum acidente os 2 arquivos da maquina forem deletados e eu ter somente o .vmdk do snapshot e o -delta.vmdk, eu conseguiria ligar a maquina virtual? Eu uso programas de backup pra esxi e sei que eles usam o snapshot para backup. Eu queria entender operacionalmente, a partir do momento que um snapshot esta sendo gerado então, e o arquivo original passa a ser de leitura, eu consigo manipula-lo ? Exemplo copiar ele pra algum lugar, visto que a maquina estara ligada I/O em outro disco (-delta). Me entendeu?

      Excluir
    3. Paulo, obrigado pelo link. Eu não consegui achar ele em português, mas deu pra entender alguns pontos, como por exemplo, a questão do congelamento do sistema(o que reforça a ideia de "fotografia do sistema"), apesar de realmente não ter ficado claro como há possibilidade de se fazer um clone exato de um disco, reduzindo-se drasticamente a necessidade de espaço e tempo e ainda havendo chance de se copiar os arquivos inteiros dessa "fotografia".

      Excluir
  26. Excelente artigo, Tiago. Parabéns!! Bastante didático e direto! Valeeeu

    ResponderExcluir
  27. Parabéns!

    Gostei muito da explicação! Simples e objetivo.
    Vou começar a seguir este seu blog (y)

    ResponderExcluir
  28. Olá! Parabens pelo artigo! Por favor, gostaria de sua ajuda no seguinte assunto: Eu acabei excluindo um snapshot de uma data intermediaria no ESXi e soh tenho 40GB livre! Vi num artigo que isso nao pode ser feito, que existe uma sequencia certa, e que se reinicar ele não subira mais. O que eu devo fazer agora??

    ResponderExcluir
  29. Tiago, excelente artigo! Mais uma vez, PARABÉNS!

    Alguém conhece uma forma de backupear uma VM que está no Sphere Exsi? A minha idéia é caso a máquina atual "morra" eu possa utilizar este backup da máquina inteira upando, sem ter que instalar,atualizar,configurar e etc.. ? Alguém sabe ??

    ResponderExcluir
    Respostas
    1. Utilizamos na empresa o Backup Exec 2015 ele faz backup de VM parcial ou completo conforme configurar os jobs.

      Excluir
  30. Thiago boa tarde!
    Tenho uma maquina virtual e não sei como criei este snapshot e agora não consigo copiar esta maquina virtual , ou seja, não consigo passar a Vm para nenhuma outra maquina ela lê pelo Hd externo pois esta salva nele mas quando estou copiando chega nesse arquivo snapshot e não copia poderia me ajudar?

    ResponderExcluir
  31. Martinez, isso vale também para o Citrix Xcenter?Abs meu amigo. Jullima

    ResponderExcluir
    Respostas
    1. Fala Jullima!! Só na boa?
      Cara, não sei te falar isso. Não conheço muito bem de Citrix.
      Abs!

      Excluir
  32. Bom dia.
    Realizamos uma atualização em um server ha mais ou menos 20 dias, e esquecemos de deletar o snapshot. Quantos dias posso manter o snapshot e qual metodo mais seguro para deletar esse Snap?

    ResponderExcluir
  33. preciso aumentar o espaço do Hd de uma das VM aqui da empresa. Liguei no suporte da Dell e eles disseram que isso só será possivel se eu excluir os snapshots criados pelo backup exec. Este procedimento é seguro???

    ResponderExcluir
  34. Gostaria de saber como faço para agendar o snapshot para que faça essa tarefa pelomenos 2 vezes por dia e apague quando ultrapassar o limite de 14 snapshot semanal?

    ResponderExcluir