A maneira mais rápida de mesclar instantâneos no VirtualBox?

48

Eu tenho o vdi com um grande número de instantâneos tirados dele - digamos, 50 ou 70 instantâneos. Eu quero ter um vdi simples com um estado atual. Esses instantâneos ocupam muito espaço em disco e não são necessários como instantâneos.

Eu sei que se eu ligar

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 times) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

Vou conseguir o que quero. Mas leva muito, muito tempo (mais de 5 horas, considerando meu hardware e tamanho de disco inicial de 16G).

E, é claro, tentei VBoxManage snapshot deletee é estranho: não funciona na máquina parada, pode falhar na máquina em execução e, quando falha uma vez, falha em todas as chamadas subseqüentes.

Existe uma maneira de criar vdi simples a partir de vários instantâneos - mais rapidamente?

$ VBoxManage --version
3.2.14r75509

(perguntou no ServerFault, mas decidiu que este lugar é mais apropriado para esta pergunta)

Andrey Regentov
fonte
O comando que você está usando é o comando que você deseja usar, não existe uma maneira mais rápida.
Ramhound
Que tal exportar toda a VM? Seu vdi conterá o que eu quero?
Andrey Regentov
Você deveria tentar. No final, qualquer outro método ainda levará algum tempo por causa do tamanho da Máquina Virtual.
Ramhound

Respostas:

53

Encontrei a solução. É tão simples quanto o último passo dos comandos que escrevi aqui. Ou seja,

VBoxManage clonehd fullpath/{uuid-of-last-snapshot}.vdi thedisk-full.vdi

Portanto, devo clonar apenas o último instantâneo, nem todos os instantâneos da cadeia. E é milhares por cento mais rápido.

O uuid pode ser encontrado em VBoxManage list hdds | grep VmName | tail

Na GUI (no Windows), selecione a VM, selecione Snapshots no canto superior direito, clique com o botão direito do mouse no snapshot desejado, selecione Clone ... e selecione Clone completo na caixa de diálogo.

Andrey Regentov
fonte
thx, mas não funciona na minha configuração, diz que a imagem já existiria. Você esqueceu o - existente?
21714 Andy
3
Se você já possui um thedisk-full.vdiarquivo em disco, altere primeiro o nome no comando para algo como thedisk-full-new.vdi.
Andrey Regentov
O caminho completo precisa ser o que está registrado no VirtualBox, é claro. Links simbólicos não funcionam, pois a VBox precisa procurar todos os Snapshots
Andy
não sabe o que a cauda faz, você quer dizer " tail -1"?
Eckes
1
No VirtualBox 5, clonehdfoi preterido e deixado para compatibilidade com versões anteriores, use em seu clonemediumlugar.
George Sovetov
22

Aqui está uma técnica (testada no VirtualBox 4.3.4) que usa o comando 'Clone' para mesclar e compactar todos os instantâneos em uma nova VM contendo um único arquivo VDI:

  1. Renomeie a VM para poder reutilizar seu nome atual para VM clonada (você pode alterar o nome da VM na guia 'Básico' das configurações de 'Geral').

  2. Clique com o botão direito do mouse na VM e execute o comando 'Clone ...':

    • Defina o nome como o nome original da VM.
    • Aceite os padrões restantes, ou seja, tipo Clone: ​​'Clone completo'; Instantâneos: 'Estado atual da máquina'.
  3. Exclua a VM antiga (clique com o botão direito do mouse na VM e execute o comando 'Remover ...').

Stuart Rackham
fonte
A partir do VirtualBox 6.0.8, isso ainda funciona.
Paul Sturm
3

Você pode tentar exportar para OVF e depois importar novamente o arquivo gerado.

Como explicado aqui :

O OVF não pode descrever capturas instantâneas que foram tiradas para uma máquina virtual. Como resultado, quando você exporta uma máquina virtual que possui capturas instantâneas, apenas o estado atual da máquina será exportado e as imagens de disco na exportação terão um estado "nivelado" idêntico ao estado atual da máquina virtual.

Como resultado, você terá uma VM clonada com o estado atual sem outros instantâneos.

StreakyCobra
fonte
Eu pergunto sobre o vdis porque não é possível exportar a máquina - ela estava quebrada (estado inacessível após a reinicialização do host), e tudo o que eu tinha era o monte de VDIs - disco e cerca de cinquenta instantâneos.
Andrey Regentov
0

Essa operação significa ler e gravar arquivos muito grandes no mesmo disco físico. A única maneira de acelerar isso é colocar esses arquivos em discos diferentes, alterando os caminhos no seu comando VBoxManage. Se a máquina tiver apenas um disco, você poderá usar uma unidade USB externa ou até mesmo um disco em outra máquina através de um compartilhamento de rede (dependendo da velocidade da sua rede)

golimar
fonte
1
Normalmente, a rede é uma ordem de magnitude mais lenta que a interface HDD interna, portanto, isso provavelmente não tornaria o processo mais rápido.
Andrey Regentov
-2

Alguns têm LAN de 10 Gib / s, portanto, ele pode transferir mais de um gigabyte por segundo, para que não seja um gargalo.

Alguns têm LAN de 1 Gib / s, portanto, ele pode transferir mais de 100 megabytes por segundo, para que não seja um gargalo (a menos que você tenha um SSD muito rápido).

Os discos mecânicos, quando lidos e gravados no mesmo disco ao mesmo tempo (ou muito fragmentados), ficam inativos por quase 20 megabytes por segundo, enquanto que apenas leitura ou gravação não fragmentada pode atingir mais de 100 megabytes por segundo.

Você diz que a LAN é mais lenta, mas não o USB (2.0, para não mencionar 1.1 ou 1.0) é muito mais lento.

O que eu sugeriria seria: Use USB 3.1 Gen2 Tipo C ou um eSATA / SATA / SAS

Mas sempre: use um segundo disco rápido o suficiente.

E sempre: a clonagem em outro disco e a cópia de volta do arquivo são muito mais rápidas que o uso de apenas um disco, a menos que seja um SSD ou um disco rígido com braços independentes de várias cabeças (eles podem ler e gravar ao mesmo tempo em dois locais de superfície, cada cabeça tem seu próprio braço, muito caro, cerca de> 9876 €).

O melhor é clonar apenas o disco rígido virtual do estado desejado, verificar se funciona e, em seguida, RESTAURAR o nível superior (excluirá todos os instantâneos), remover o disco rígido no armazenamento e conectar esse novo.

Então, etapas, para perder todos os estados antigos em um esquema de instantâneos sem árvore:

  1. Clone de um disco rígido para outro, evite gargalos
  2. Crie uma nova máquina, conecte esse disco, desconecte-o, configure-o como imutável
  3. Teste se funciona (já que é imutável) você terá o mesmo estado
  4. Se você não precisar ser inmutável, desconecte-o, volte ao normal, etc.
  5. Exclua as capturas instantâneas da máquina antiga (RESTORE first)
  6. Excluir a máquina de teste temporal
  7. Copie de volta para o disco o disco virtual
  8. Anexar o disco clonado

Mas sempre lembre-se: os instantâneos podem ser como uma árvore completa, um nó pode ter mais de um filho, cada filho pode ter mais de um filho, etc.

Para trabalhar com árvores de snoapshots, sempre pense em DELETE como excluir um nó sem afetar o restante dos nós (apenas solte esse estado, mas não o restante, nenhum pai e filho serão afetados, os dados serão mesclados em todo o primeiro sub childs de nível, processo tão lento) e em RESTORE como destruir todos os seus childs em todos os subníveis (perdendo todos os estados depois daquele restaurado, ele exclui apenas os arquivos, processo muito rápido, apenas alguns segundos).

Isso é!

PD: como nomes horríveis que a VBOX deu a essas duas operações (exclua apenas um nó = DELETE; exclua todos os nós filhos em todos os subníveis = RESTORE)

Claudio
fonte
A restauração não exclui instantâneos, apenas o estado atual (não salvo).
Melebius