Oto jak rozwiązałem mój problem.
Najpierw cofnąłem zmianę UUID w moim podstawowym pliku VDI, używając skryptu autorstwa jordoncm
Potem próbowałem po prostu zmienić ścieżki w pliku vbox, aby pasowały do nowej lokalizacji. To nie działało, ponieważ pojawiły się różne różne błędy i nawet nie byłem w stanie dodać maszyny wirtualnej przy użyciu pliku vbox.
Znalazłem więc ten artykuł na blogu autorstwa Petera Portera, który zasugerował:
ponieważ każdy plik .vdi zawiera tylko te sektory zmienione od ostatniego pliku .vdi, kopiowanie plików .vdi w porządku chronologicznym powinno dać nam plik .vdi zawierający pełną kopię wszystkich wcześniejszych migawek.
...
Użyj komendy „VBoxManage clonehd”, aby utworzyć nowy plik .vdi na podstawie oryginału, a następnie dodaj każdy kolejny plik za pomocą argumentu „–existing”, aby po prostu dodać dane do istniejącego pliku .vdi, który budujesz. Poniższa lista poleceń oparta jest na moim powyższym przykładzie:
VBoxManage clonehd Machine.vdi Machine-full.vdi
VBoxManage clonehd Snapshots {UUID1} .vdi Machine-full.vdi
VBoxManage clonehd Snapshots {UUID2} .vdi Machine-full.vdi
VBoxManage clonehd Snapshots {UUID3} .vdi Machine-full.vdi
VBoxManage clonehd Snapshots {UUID4} .vdi Machine-full.vdi
To da ci plik „Machine-full.vdi”, który reprezentuje pełny stan twojego komputera w stanie aktywnym bez żadnego związku z nadrzędnymi plikami .vdi. Możesz teraz użyć tego pliku „Machine-full.vdi” na nowej maszynie wirtualnej lub edytować istniejącą maszynę wirtualną, usuwając stary plik .vdi i dodając ten .vdi.
Z drobnymi poprawkami, które wydawały mi się działać:
To jest dysk twardy i jego migawki:
<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>
Oto polecenia, które uruchomiłem (przepraszam, że niektóre zostały odcięte od okien ...):
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
Bzdura wydaje się, że muszę dodać wpis w VirtualBox.xml w MediaRegistry-> HardDisks, ale muszę upewnić się, że dodałem do niego każdą migawkę w kolejności chronologicznej po każdej kopii. Więc to tak:
Copy VM
Add entry to VirtualBox.xml
Copy VM ...
I resztę tego, co zrobiłem na wypadek, gdyby pomógł komukolwiek innemu:
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
A potem po prostu utworzyłem nową maszynę wirtualną, używając ft_full.vdi jako podstawy. Dopasowano pozostałe ustawienia w panelu ustawień GUI.
Właśnie przeszedłem przez ten ból głowy i jest na pozór głupie rozwiązanie. Szkoda, że dotarcie tutaj zajęło mi cały dzień.
Jeśli spojrzysz na wewnętrzne polecenia VBoxManage.exe dumphdinfo , zobaczysz, że każdy VDI ma informacje o swoim rodzicu. Tak więc stworzyłem pustą maszynę i dodałem „uszkodzony” Parent HD jako dysk dodatkowy. To umieściło go w Media Managerze.
Następnie dodałem kontroler SATA do pustej maszyny wirtualnej i dodałem migawkę warstwy 3. Kliknij OK. Edytuj ponownie i dodaj migawkę warstwy 2, kliknij OK. Edytuj, dodaj ujęcie warstwy 1.
Dzięki temu są one pojedynczymi dyskami w maszynie wirtualnej, ale w programie Media Manager wszystkie są ze sobą połączone.
Ostatnim krokiem jest po prostu usunięcie bankowej maszyny wirtualnej i dodanie starej maszyny wirtualnej. Zrobione ... i tak, to takie głupie / proste.
źródło
Stara nazwa ścieżki (na
H:
dysku) może być po prostu określona w.vbox
pliku maszyny wirtualnej, który jest tylko plikiem XML. Jeśli tak, możesz zapisać kopię tego pliku, edytować nazwę ścieżki, aby była nową nazwą ścieżki (tą naN:
dysku) i sprawdzić, czy to rozwiąże problem.źródło
A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}