Aqui está como eu resolvi meu problema.
Primeiro, desfiz a alteração do UUID no meu arquivo VDI base usando o script jordoncm
Então tentei simplesmente alterar os caminhos no arquivo vbox para corresponder ao novo local. Isso não funcionou, pois vários erros diferentes apareceram e eu nem consegui adicionar a VM usando o arquivo vbox.
Então, eu encontrei este artigo de Peter Porter, que sugeriu:
Como cada arquivo .vdi contém apenas os setores alterados do último arquivo .vdi, copiar os arquivos .vdi em ordem cronológica deve gerar um arquivo .vdi contendo uma cópia completa de todos os instantâneos anteriores.
...
Use o comando “VBoxManage clonehd” para criar um novo arquivo .vdi com base no seu original e adicione cada arquivo subsequente usando o argumento “–existing” para simplesmente adicionar os dados ao .vdi existente que você está construindo. A seguinte lista de comandos é baseada no meu exemplo acima:
VBoxManage clonehd Machine.vdi Machine-full.vdi
Instantâneos do clonehd do VBoxManage {UUID1} .vdi Machine-full.vdi
Instantâneos do clonehd do VBoxManage {UUID2} .vdi Machine-full.vdi
Instantâneos do clonehd do VBoxManage {UUID3} .vdi Machine-full.vdi
Instantâneos do clonehd do VBoxManage {UUID4} .vdi Machine-full.vdi
Isso fornecerá um arquivo "Machine-full.vdi" que representa o estado completo da sua máquina no estado ativo, sem qualquer relação com os arquivos .vdi pai. Agora você pode usar esse arquivo “Machine-full.vdi” em uma nova máquina virtual ou editar sua VM existente, removendo o arquivo .vdi antigo e adicionando esse .vdi.
Com um pouco de ajustes que pareceu funcionar para mim:
Este é o disco rígido e seus instantâneos:
<HardDisk uuid="{ed1428ca-76be-440a-894b-e666b50f5c86}" location="H:/vm/ft.vdi" format="VDI" type="Normal">
<HardDisk uuid="{8d8be78f-6648-4503-bee3-8810cb853a99}" location="Snapshots/{8d8be78f-6648-4503-bee3-8810cb853a99}.vdi" format="VDI">
<HardDisk uuid="{cce0ee4f-5052-4be7-81ff-47ea08202716}" location="Snapshots/{cce0ee4f-5052-4be7-81ff-47ea08202716}.vdi" format="VDI">
<HardDisk uuid="{c297d4b9-972d-4b07-a839-5d76ee8d0387}" location="Snapshots/{c297d4b9-972d-4b07-a839-5d76ee8d0387}.vdi" format="VDI">
<HardDisk uuid="{8e9ca914-648f-464c-b515-2606c644d7f0}" location="Snapshots/{8e9ca914-648f-464c-b515-2606c644d7f0}.vdi" format="VDI"/>
</HardDisk>
</HardDisk>
</HardDisk>
</HardDisk>
Estes são os comandos que eu executei (desculpe, alguns deles estão cortados nas janelas ...):
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd N:\vm\ft.vdi N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd "N:\vm\VirtualBox VMs\lfs\Snapshots\{8d8be78f-6648-4503
VBoxManage.exe: error: Parent medium with UUID {ed1428ca-76be-440a-894b-e666b50f5c86} of the medium 'N:\vm\Vi
03-bee3-8810cb853a99}.vdi' is not found in the media registry ('C:\Users\ <user>/.VirtualBox\VirtualBox.xml')
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Medium, interface IMedium, callee IUnknow
Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, AccessMode_ReadWrite, fForceNewUuidOnOpen, pM
xManageDisk.cpp
Porcaria parece que eu preciso adicionar uma entrada no VirtualBox.xml em MediaRegistry-> HardDisks, mas eu tenho que ter certeza de adicionar cada instantâneo a ele em ordem cronológica após cada cópia. Então é assim:
Copy VM
Add entry to VirtualBox.xml
Copy VM ...
E o resto do que fiz no caso de ajudar alguém:
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{8d8be78
_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{cce0ee4f-5052-4be7-81ff-47ea08202716}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{c297d4b9-972d-4b07-a839-5d76ee8d0387}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4
C:\Program Files\Oracle\VirtualBox>VBoxManage clonehd --existing "N:\vm\VirtualBox VMs\lfs\Snapshots\{8e9ca914-648f-464c-b515-2606c644d7f0}.vdi" N:\vm\ft_full.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: a7fb5e25-c248-4644-a898-f1e26f6570a4
E então simplesmente criei uma nova VM usando o ft_full.vdi como base. Correspondeu ao restante das configurações no painel de configurações da GUI.
Acabei de passar por essa dor de cabeça e há uma solução aparentemente estúpida. Pena que demorei um dia inteiro para chegar aqui.
Se você der uma olhada no comando interno do VBoxManage.exe dumphdinfo, poderá ver que cada VDI possui informações sobre seu pai. Então, o que fiz foi criar uma máquina em branco e adicionar o HD Pai "quebrado" como uma unidade secundária. Isso o colocou no Media Manager.
Em seguida, adicionei um controlador SATA à VM em branco e adicionei o instantâneo da camada 3. Clique OK. Edite novamente e adicione o instantâneo da camada 2, clique em ok. Editar, adicionar camada 1 instantâneo.
Isso os torna unidades individuais dentro da VM, mas no Media Manager elas estão todas conectadas uma à outra.
A etapa final é simplesmente excluir a VM do banco e adicionar sua VM antiga. Feito ... e sim, é tão estúpido / simples.
fonte
O nome do caminho antigo (na
H:
unidade) pode simplesmente ser especificado no.vbox
arquivo da VM, que é apenas um arquivo XML. Nesse caso, você pode salvar uma cópia desse arquivo, editar o nome do caminho para ser o novo nome do caminho (aquele naN:
unidade) e ver se ele resolve o problema.fonte
A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}