(Observe que, embora esta pergunta seja especificamente sobre o Hyper-v, estou realmente interessado em uma resposta generalizada de instantâneo de VM, a menos que a resposta específica para o Hyper-v não se aplique a uma explicação tão geral.)
Trabalho em uma grande empresa com infraestrutura de VMs de tamanho razoável (alguns milhares de VMs). Um dos meus engenheiros de servidor está me dizendo que eles não permitem salvar instantâneos de VM por muito tempo - eles permitirão que um instantâneo seja obtido como substituto antes de fazer uma alteração significativa em uma VM, mas que eles precisam excluí-lo em breve depois (alguns dias ou mais, quando tivermos certeza de que nossas alterações não quebraram nada).
Estou bem com esse procedimento - não espero que os instantâneos sirvam como proxy para backups reais, etc. E posso respeitar o desejo deles de conservar espaço no ambiente. O que discordo é do raciocínio dele. Ele diz que o motivo pelo qual eles precisam excluí-los posteriormente é que "os instantâneos podem crescer ilimitadamente, toda vez que você grava no HDD, ele grava dados adicionais no instantâneo, sem limite. Isso é diferente de quando você provisiona o HDD virtual original, onde você pode especificar um tamanho máximo Você não pode especificar um tamanho máximo para um instantâneo."
Pelo que entendi, as imagens instantâneas são um DELTA da imagem do disco pai. Por exemplo, se eu tiver um bloco na imagem original parecido com:
0101 0101 0101
... e então reescrevo a seção intermediária assim:
0101 1111 0101
... então o instantâneo armazena apenas a DIFERENÇA entre os dois (além de alguma sobrecarga na estrutura de dados que tenho certeza que adiciona complexidade, mas não é significativa do ponto de vista do armazenamento). Além disso, entendo que se eu fossereescreveresses blocos de volta ao seu estado original, o delta descartaria esse bloco (para que as leituras futuras desse bloco fossem lidas na imagem original).
(Não sei muito sobre COMO o instantâneo armazena a diferença - tenho certeza de que existem estruturas muito complexas necessárias para manter tudo organizado. Estou interessado apenas no princípio de que ele armazena a diferença, mas não um "histórico contínuo" de alterações.)
Ele diz que os instantâneos não funcionam assim - ele diz que se eu tiver um bloco de dados, eu o altero e depois mudo de volta, que CADA vez que eu fizer isso, o instantâneo crescerá, eventualmente consumindo muito de espaço em disco.
Entendo que um instantâneo nunca poderia exceder o tamanho da imagem original (por exemplo, se você invertesse literalmente cada bit no disco rígido, o delta armazenaria isso), talvez com algum tamanho de sobrecarga constante também. Ele parece pensar que isso não é verdade, que um instantâneo da VM crescerá ilimitadamente à medida que mais e mais gravações forem feitas no HDD virtual.
Estou entendendo mal algo sobre como funcionam os instantâneos de VM?
Responder1
Seus engenheiros estão seguindo boas práticas, mas pelos motivos errados. Você está certo ao dizer que o VHDX (ou qualquer tecnologia de disco virtual que esteja sendo usada) irá:
- Reutilize blocos escritos na reescrita em vez de escrever tudo novo
- Tenha um limite de tamanho rígido igual ao tamanho máximo configurado para o disco virtual pai. O motivo pelo qual você não pode especificar um tamanho máximo para um instantâneo é porque o VHDX pai já o especificou.
No entanto, não tenho conhecimento de nenhum mecanismo que descarte deltas escritos anteriormente se o bloco retornar ao seu estado original. A sobrecarga de desempenho de executar um algoritmo de diferença em blocos de origem e delta versus manter um registro simples de gravações de bloco seria substancial mesmo em uma escala relativamente pequena.
A menos que a VM tenha muita rotatividade de disco, você provavelmente não verá seu snapshot crescer horrivelmente.
Uma VM com um único instantâneo também não apresenta nenhuma perda significativa de desempenho, embora eu não veja isso mencionado em nenhum lugar.
Os instantâneos têm três problemas muito reais:
- Problemas ambientais podem resultar em discos AVHDX órfãos
- A cada minuto que o instantâneo existe, ele se move ao longo do espectro de “valioso” para “passivo”
- Os dados não são duplicados
Além disso, mesmo que um instantâneo não possa crescer verdadeiramente ilimitado por si só, imagine um ambiente sem controles sobre os instantâneos. Um único instantâneo poderia, teoricamente, crescer até dobrar o tamanho alocado de seu pai. Acredito que a Microsoft instituiu um limite rígido de 50 instantâneos por VM, mas apenas como uma espécie de segurança contra falhas do tipo "OK, agora você está sendo bobo", não porque a tecnologia exija isso. Portanto, o limite superior teórico para uma VM é 51x o tamanho alocado. Embora isso não seja algo provável de acontecer, você pode ver como até mesmo ter algumas VMs com vários snapshots pode causar dor de cabeça aos administradores de armazenamento. Certamente serve a favor da instituição de uma limitação razoável de uso de instantâneos.
Problemas ambientais para instantâneos
Muitas coisas podem ser a causa raiz dos problemas nesta categoria. Todos eles se resumem a um problema fundamental: se o VHDX pai for modificado emqualquerforma, então o AVHDX é completamente invalidado e totalmente inútil. Se a VM proprietária estiver ligada, tais modificações deverão ser proibitivamente difíceis. Mas, se a VM proprietária estiver desativada, o VHDX pai será apenas um arquivo. O Hyper-V ou seus outros sistemas não saberão que há algo errado até que você tente acessar o AVHDX filho.
Quanto mais tempo o snapshot existir, maior será a probabilidade de algo dar errado, especialmente em um ambiente com vários administradores. Se uma VM tiver vários instantâneos, os problemas podem aumentar.
Este problema não é específico dos instantâneos; esses problemas podem ocorrer com qualquer sistema diferencial de disco virtual.
Instantâneos desvalorizam com a idade
Este é realmente o principal motivo para não manter os snapshots por muito tempo. Como você supôs corretamente, o mecanismo diferencial nãonãomanter um registro histórico das mudanças; apenas a alteração mais recente em um bloco é mantida. Portanto, você tem apenas a máquina virtual como ela existe agora no formato pós-instantâneo e a VM como existia quando o instantâneo foi obtido. Você pode voltar ao antigo ou manter o novo. Não há meio-termo.
Para fins de argumentação (e porque isso aconteceu), digamos que você tenha um pequeno ambiente Exchange que funciona em uma única máquina virtual. Você tira um instantâneo antes de atualizar do Exchange 2013 para o Exchange 2016. E depois deixa-o funcionar por um ano. Para que serve esse instantâneo? Você voltaria a isso? Quer adivinhar quanto tempo levará essa mesclagem quando você a excluir?
Instantâneos não duplicam dados
O objetivo de um instantâneo é retornar rapidamente uma máquina virtual a um ponto no tempo. Isso é feito modificando diretamente o estado da máquina virtual. Em nenhum momento faz uma duplicata dos dados. Se o AVHDX estiver danificado, apenas o pai retém informações válidas e quaisquer alterações feitas desde o instantâneo serão perdidas. Se o VHDX pai estiver danificado, ambos os arquivos serão inúteis. Além disso, não tenho conhecimento de nenhuma ferramenta que possa acessar um AVHDX e extrair apenas dados alterados. Portanto, para manter estados diferentes durante um período de tempo significativo, o backup é a melhor opção. Não é tão rápido ou conveniente trabalhar como um instantâneo, mas resolve todos os outros problemas.