Вот как я решил свою проблему.
Сначала я отменил изменение UUID в моем базовом файле VDI, используя скрипт от jordoncm
Затем я попытался просто изменить пути в файле vbox в соответствии с новым местоположением. Это не сработало, так как появлялись различные ошибки, и я даже не смог добавить виртуальную машину с помощью файла vbox.
Таким образом, я нашел эту статью в блоге Питера Портера, который предложил:
поскольку каждый .vdi содержит только те сектора, которые были изменены с последнего .vdi, копирование .vdi в хронологическом порядке должно дать нам .vdi, содержащий полную копию всех предыдущих снимков.
...
Используйте команду «VBoxManage clonehd», чтобы создать новый файл .vdi на основе вашего оригинала, а затем добавьте в каждый последующий файл, используя аргумент «-existing», чтобы просто добавить данные в существующий .vdi, который вы создаете. Следующий список команд основан на моем примере выше:
VBoxManage clonehd Machine.vdi Machine-full.vdi
VBoxManage clonehd Снимки {UUID1} .vdi Machine-full.vdi
VBoxManage clonehd Снимки {UUID2} .vdi Machine-full.vdi
VBoxManage clonehd Снимки {UUID3} .vdi Machine-full.vdi
VBoxManage clonehd Снимки {UUID4} .vdi Machine-full.vdi
Это даст вам файл «Machine-full.vdi», который представляет полное состояние вашего компьютера в активном состоянии без какого-либо отношения к родительским файлам .vdi. Теперь вы можете использовать этот файл «Machine-full.vdi» на новой виртуальной машине или отредактировать существующую виртуальную машину, удалив старый файл .vdi и добавив этот .vdi.
С небольшой настройкой, которая, казалось, сработала для меня:
Это жесткий диск и его снимки:
<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>
Это команды, которые я выполнил (извините, некоторые из них отрезаны от окон ...):
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
Дерьмо, кажется, мне нужно добавить запись в VirtualBox.xml в MediaRegistry-> HardDisks, но я должен обязательно добавлять каждый снимок к нему в хронологическом порядке после каждой копии. Так вот как это:
Copy VM
Add entry to VirtualBox.xml
Copy VM ...
И остальное, что я сделал в случае, если это поможет кому-то еще:
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
А потом я просто создал новую виртуальную машину, используя в качестве основы ft_full.vdi. Соответствует остальным настройкам в панели настроек графического интерфейса.
Я только что прошел через эту головную боль, и есть, казалось бы, глупое решение. Жаль, что мне потребовался целый день, чтобы добраться сюда.
Если вы посмотрите внутренние команды VBoxManage.exe dumphdinfo, вы увидите, что каждый VDI имеет информацию о своем родителе. Итак, я создал пустой компьютер и добавил «сломанный» Parent HD в качестве дополнительного диска. Это поместило это в Media Manager.
Затем я добавил контроллер SATA на пустую виртуальную машину и добавил снимок уровня 3. Нажмите ОК Снова отредактируйте и добавьте снимок слоя 2, нажмите ОК. Редактировать, добавить слой 1 снимок.
Это делает их отдельными дисками внутри виртуальной машины, но внутри Media Manager они все связаны друг с другом.
Последний шаг, просто удалите банк VM и добавьте свою старую VM. Готово ... и да, это так глупо / просто.
источник
Старый путь (на
H:
диске) может быть просто указан в.vbox
файле для виртуальной машины, который является просто файлом XML. Если это так, вы можете сохранить копию этого файла, отредактировать путь к новому пути (тот, что наN:
диске) и посмотреть, решит ли он проблему.источник
A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}