Voici comment j'ai résolu mon problème.
J'ai d'abord annulé la modification de l'UUID sur mon fichier VDI de base en utilisant le script de jordoncm
Ensuite, j'ai simplement essayé de changer les chemins dans le fichier vbox pour qu'ils correspondent au nouvel emplacement. Cela n'a pas fonctionné car diverses erreurs différentes sont apparues et je n'ai même pas pu ajouter la machine virtuelle à l'aide du fichier vbox.
J'ai donc trouvé cet article de blog de Peter Porter qui a suggéré:
comme chaque .vdi ne contient que les secteurs modifiés par rapport au dernier .vdi, la copie des .vdi dans l'ordre chronologique devrait nous fournir un .vdi contenant une copie complète de tous les instantanés antérieurs.
...
Utilisez la commande «VBoxManage clonehd» pour créer un nouveau fichier .vdi basé sur votre original, puis ajoutez-le à chaque fichier suivant en utilisant l'argument «–existing» pour simplement ajouter les données au .vdi existant que vous construisez. La liste de commandes suivante est basée sur mon exemple ci-dessus:
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
Cela vous donnera un fichier «Machine-full.vdi» qui représente l'état complet de votre machine à l'état actif sans aucune relation avec les fichiers .vdi parents. Vous pouvez maintenant utiliser ce fichier «Machine-full.vdi» sur une nouvelle machine virtuelle ou modifier votre machine virtuelle existante, en supprimant l'ancien fichier .vdi et en ajoutant ce .vdi.
Avec un peu de peaufinage qui a semblé fonctionner pour moi:
Voici le disque dur et ses instantanés:
<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>
Ce sont les commandes que j'ai exécutées (désolé, certaines sont coupées de ses fenêtres ...):
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
Merde semble que je dois ajouter une entrée dans VirtualBox.xml sous MediaRegistry-> HardDisks, mais je dois m'assurer de lui ajouter chaque instantané dans l'ordre chronologique après chaque copie. Donc c'est comme ça:
Copy VM
Add entry to VirtualBox.xml
Copy VM ...
Et le reste de ce que j'ai fait au cas où cela aiderait quelqu'un d'autre:
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
Et puis j'ai simplement créé une nouvelle machine virtuelle en utilisant ft_full.vdi comme base. Correspond au reste des paramètres dans le volet des paramètres de l'interface graphique.
Je viens de traverser ce mal de tête et il existe une solution apparemment stupide. Dommage qu'il m'a fallu une journée complète pour arriver ici.
Si vous jetez un œil aux commandes internes de VBoxManage.exe dumphdinfo, vous pouvez voir que chaque VDI a des informations sur son parent. Donc, ce que j'ai fait, c'est créer une machine vierge et ajouter le Parent HD "cassé" comme lecteur secondaire. Cela l'a placé dans Media Manager.
Ensuite, j'ai ajouté un contrôleur SATA à la machine virtuelle vierge et ajouté un instantané de couche 3. Cliquez sur OK. Modifiez à nouveau et ajoutez un instantané de couche 2, cliquez sur ok. Modifier, ajouter un instantané du calque 1.
Cela en fait des disques individuels à l'intérieur de la machine virtuelle, mais dans Media Manager, ils sont tous attachés les uns aux autres.
La dernière étape consiste simplement à supprimer la machine virtuelle de la banque et à ajouter votre ancienne machine virtuelle. Fait ... et oui, c'est aussi stupide / simple.
la source
L'ancien nom de chemin (sur le
H:
lecteur) peut simplement être spécifié dans le.vbox
fichier de la machine virtuelle, qui n'est qu'un fichier XML. Si tel est le cas, vous pouvez enregistrer une copie de ce fichier, modifier le nom de chemin pour qu'il soit le nouveau nom de chemin (celui duN:
lecteur) et voir s'il résout le problème.la source
A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}