Virtualbox, mesclando instantâneos e disco base

9

Eu tenho uma máquina virtual com cerca de 30 instantâneos em ramificações. O caminho de desenvolvimento atual é de 22 instantâneos mais o disco base. A quantidade de arquivos parece ter um impacto agora no IO e no laptop de desenvolvimento que estou usando (não sei se são problemas de desempenho do disco host com o tamanho total de 140 GB em muitos fragmentos ou apenas o fato de que é bater setores distribuídos em muitos arquivos).

Gostaria de mesclar o ramo de desenvolvimento atual dos snapshots com o disco base, mas não tenho certeza se o comando a seguir produziria o resultado correto. Não consigo inicializar este disco após a conclusão do procedimento (5-6 horas).

vboxmanage clonehd "C:\VPC-Storage\.VirtualBox\Machines\CRM\Snapshots\{245b27ac-e658-470a-b978-8e62137c33b1}.vhd" "E:\crm-20100624.vhd" --format VHD --type normal

Alguém poderia confirmar se esta é a abordagem correta ou não?

Henrik
fonte
Para adicionar algumas informações, o erro que estou recebendo não é um erro do VirtualBox, mas um erro de inicialização do Windows. Ele quer iniciar o reparo de inicialização, mas como não conheço o erro, não conheço a correção. Iniciar o Windows normalmente resulta em uma longa espera e em uma tela azul. Isso é esperado ou usei o método errado ao clonar o disco?
Henrik
Eu usei VBoxManage (no host Windows, convidado Ubuntu) como você sugeriu na sua pergunta e fez fundir adequadamente os instantâneos na imagem de disco única saída
Chaulky
1
Sim, esta é uma abordagem correta. É melhor especificar apenas o UUID de origem, em vez do nome do arquivo, para ter certeza de que o VBox poderá resolver os anexos.
rustyx

Respostas:

7

O que você deseja fazer é, na caixa de diálogo snapshots, selecione o snapshot pai que você deseja mesclar todos os snapshots posteriormente em um único VDI.

Pela sua descrição, parece que essa é a raiz da árvore.

Clique com o botão direito e selecione 'Excluir instantâneo'.

Isso fará o que você deseja - ele mesclará todas as alterações de todos os instantâneos filhos em um único VDI.

Além disso - a clonagem da imagem do disco que está no instantâneo mais recente - também mesclará o disco diferencial com seu pai (e seu pai, etc.), até que você atinja um tipo de disco rígido 'normal'.

Eu suspeito que 'excluir um instantâneo' executa o comando clonehd.

Verifique as configurações da sua VM (especificamente IO APIC ativada / desativada) e verifique se elas correspondem.

Adão
fonte
Eu acho que atualmente é a única maneira de fazer isso, no entanto, é um manual, demorado, multi clique na maneira GUI para fazê-lo.
Henrik
3

Se você deseja manter apenas um instantâneo, torne-o seu estado atual e exporte a VM e importe-a novamente. Os appliances exportados não mantêm seu histórico de instantâneos.

Ou você pode usar esse script vboxmerge.py para lidar com a fusão para você. Dado o número de snapshots que você possui, eu esperaria que o ciclo de exportação / importação fosse mais rápido.

John Hart
fonte
2

Aqui está uma técnica (testada no VirtualBox 4.3.4) que usa o comando 'Clone' para mesclar e compactar todos os snapshots 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
0

Se o seu host for um Windows ou você puder acessar arquivos VHD a partir do Windows, há um truque para MERGE todas as alterações em pai, avô, etc.

Está usando a ferramenta DiskPart e os dois comandos:

select vdisk file="whatever your file is, with full path"

merge vdisk depth=#

Onde # é o número de níveis de hierarquia que você deseja mover, 1 para o pai direto, 2 para o pai principal, etc.

Faz isso no local, consome muito menos tempo que a clonagem, etc.

Lembre-se de que após a mesclagem de todos os VHDs intermediários podem ser excluídos (eles não serão excluídos por você) e não se esqueça de anexar ao VirtualBox o pai onde você mesclou.

Exemplo:

Disk3.vhd é filho de Disk2.vhd, Disk2.vhd é filho de Disk1.vhd

Se você deseja no Disk1.vhd, todas as alterações no Disk3.vhd usam depth=2e selecione Disk3.vhd. Se você deseja no Disk1.vhd todas as alterações do Disk2.vhd, basta usar depth=1Disk3.vhd.

Lembre-se também de que não há necessidade de instantâneos feios do VirtualBox, você pode usar o comando DiskPart create vdisk para criar um disco diferencial a partir de um existente (que também pode ser um disco diferencial, etc.), também pode criar uma árvore enorme.

Para todo o resto: o pôster está usando VHD (não VDI) e, portanto, pode usar ferramentas nativas, como DiskPart e Disk Managment, para acessar os discos do convidado (no host, se o host for Windows).

Para você, o pôster: lembre-se de sempre ter um backup completo antes da mesclagem, o clone do VirtualBox não funciona, ele cria um novo arquivo (cópia na gravação), mas a mesclagem do DiskPart funciona no local (modifique o arquivo, não crie um novo).

Espero que isso possa dar outra abordagem diferente, pois o VHD / VHDX está em uso (não é válido para VMDK, VDI, etc., apenas para Windows Host).

Nota: Windows 7 e Up, XP e Vista podem montar VHD com uma ferramenta M $ externa, mas o DiskPart não oferece suporte a VHD no XP e Vista ... tudo isso também funciona nas edições Windows HOME (7 e Up), sem a necessidade de um Edição SERVER.

Laura
fonte