So fügen Sie einen beliebigen Snapshot in die Basis-VDI in Virtualbox ein


14

Ich habe die Übertragung einer VM von einer Festplatte auf die andere verpfuscht. Jetzt verbleibe ich mit dem Basis-VDI und einer ganzen Reihe von Schnappschüssen.

Meine Schritte

  • Kopiert das alte VM-Verzeichnis auf die neue Festplatte
  • Gelöschte alte VM und fügte neue VM hinzu, indem Sie Machine-> add verwendeten und die alte XML-Datei bereitstellten
  • Die Basis-VDI-Datei konnte aufgrund eines Konflikts nicht hinzugefügt werden. Ändern Sie daher die UUID der Basis-VDI mit

    VBOXMANGE.EXE internalcommands sethduuid  <path/to/vdi>
    
  • Versuch, ein Rollback auf einen Snapshot durchzuführen, aber die VM sucht anscheinend nach den Snapshots auf der alten Festplatte (die formatiert und nicht mehr vorhanden ist)

Dies ist der Fehler (vernetzt ist der Name):

Failed to restore the snapshot networked of the virtual machine lfs.

Could not open the medium 'H:\vm\ft.vdi'.

VD: error VERR_PATH_NOT_FOUND opening image file 'H:\vm\ft.vdi' (VERR_PATH_NOT_FOUND).

Result Code: E_FAIL (0x80004005)
Component: Medium
Interface: IMedium {53f9cc0c-e0fd-40a5-a404-a7a5272082cd}

Die alte Festplatte war Laufwerk H: die neue ist Laufwerk N:

Wie kann ich die Snapshots / VM ändern, um N:\vm\ft.vdinach der Basis-VDI zu suchen ? Ich habe bereits die Standardeinstellungen in VirtualBox im Allgemeinen festgelegt (Standardspeicherort für VM / VM-Snapshots).

Oder wenn nicht, wie kann ich den alten Schnappschuss mit dem Basis-VDI zusammenführen, vorausgesetzt, dass sich nur die UUID des Basis-VDI geändert hat?

Antworten:


10

So habe ich mein Problem gelöst.

Zuerst habe ich die Änderung der UUID in meiner Basis-VDI-Datei rückgängig gemacht, indem ich das Skript von jordoncm verwendet habe

Dann habe ich einfach versucht, die Pfade in der vbox-Datei zu ändern, um sie an den neuen Speicherort anzupassen. Das hat nicht geklappt, da verschiedene Fehler aufgetreten sind und ich die VM nicht einmal über die vbox-Datei hinzufügen konnte.

So fand ich diesen Blogartikel von Peter Porter, der vorschlug:

Da jede .vdi-Datei nur die Sektoren enthält, die gegenüber der letzten .vdi-Datei geändert wurden, sollten Sie beim Kopieren der .vdi-Dateien in chronologischer Reihenfolge eine .vdi-Datei mit einer vollständigen Kopie aller vorherigen Snapshots erhalten.

...

Verwenden Sie den Befehl "VBoxManage clonehd", um eine neue .vdi-Datei auf der Grundlage Ihres Originals zu erstellen, und fügen Sie dann jede nachfolgende Datei mit dem Argument "–existing" hinzu, um die Daten einfach zu der vorhandenen .vdi-Datei hinzuzufügen, die Sie erstellen. Die folgende Befehlsliste basiert auf meinem obigen Beispiel:

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

Dadurch erhalten Sie eine Datei "Machine-full.vdi", die den vollständigen Status Ihres Computers im aktiven Status ohne Beziehung zu den übergeordneten .vdi-Dateien darstellt. Sie können diese Datei "Machine-full.vdi" jetzt auf einer neuen virtuellen Maschine verwenden oder Ihre vorhandene VM bearbeiten, indem Sie die alte .vdi-Datei entfernen und diese .vdi hinzufügen.

Mit ein bisschen Feineinstellung schien das für mich zu funktionieren:

Dies ist die Festplatte und ihre Schnappschüsse:

<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>

Dies sind die Befehle, die ich ausgeführt habe.

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

Mist, ich muss einen Eintrag in der VirtualBox.xml unter MediaRegistry-> HardDisks hinzufügen, aber ich muss sicherstellen, dass jeder Schnappschuss nach jeder Kopie in chronologischer Reihenfolge hinzugefügt wird. Es ist also so:

Copy VM
Add entry to VirtualBox.xml
Copy VM ...

Und der Rest von dem, was ich getan habe, falls es jemand anderem hilft:

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

Und dann habe ich einfach eine neue VM mit der Datei ft_full.vdi als Basis erstellt. Stimmen mit den restlichen Einstellungen im GUI-Einstellungsbereich überein.


1
Es scheint , dass Sie es viel schneller tun könnte superuser.com/questions/590968/...
Andrey Regentov

4

Ich habe gerade diese Kopfschmerzen durchgemacht und es gibt eine scheinbar dumme Lösung. Schade, dass ich einen ganzen Tag gebraucht habe, um hierher zu kommen.

Wenn Sie sich die internen VBoxManage.exe-Befehle dumphdinfo ansehen , können Sie feststellen, dass jeder VDI Informationen zu seinem übergeordneten Element hat. Also habe ich einen leeren Computer erstellt und "defektes" Parent HD als sekundäres Laufwerk hinzugefügt. Damit ist es in Media Manager abgelegt.

Dann habe ich der leeren VM einen SATA-Controller hinzugefügt und einen Layer-3-Snapshot hinzugefügt. OK klicken. Bearbeiten Sie erneut und fügen Sie den Layer 2-Schnappschuss hinzu. Klicken Sie auf OK. Bearbeiten, Schnappschuss von Ebene 1 hinzufügen.

Dies macht sie zu einzelnen Laufwerken in der VM, aber in Media Manager sind sie alle miteinander verbunden.

Im letzten Schritt löschen Sie einfach die Bank-VM und fügen Ihre alte VM hinzu. Fertig ... und ja, so dumm / einfach ist das.

c:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands dumphdinfo D:
\Virtual_box\Virtual_box_HD_C.vdi

1 Header: uuidCreation={13ea5785-58db-4ad9-8459-9b13d89a3aaa}
1 Header: uuidModification={b1bfd84d-6fcc-4640-80fc-b7c1a6b929cb}
1 Header: uuidParent={19ed1b87-d127-402d-b463-59899c683a47}
  2 Header: uuidCreation={19ed1b87-d127-402d-b463-59899c683a47}
  2 Header: uuidModification={709f1fad-68a3-47c7-9336-f3409fcae95b}
  2 Header: uuidParent={436c1ffd-04ee-4d6b-968c-de95e65d8a5a}
    3 Header: uuidCreation={436c1ffd-04ee-4d6b-968c-de95e65d8a5a}
    3 Header: uuidModification={049d869e-89c2-48aa-b0cc-eb324895f3b9}
    3 Header: uuidParent={e09c65f4-828d-4a53-8ecc-20365d43a52e}
      4 Header: uuidCreation={e09c65f4-828d-4a53-8ecc-20365d43a52e}
      4 Header: uuidModification={6c397704-fe65-4661-b60f-767e207ffb58}
      4 Header: uuidParent={00000000-0000-0000-0000-000000000000}

Eine Vereinfachung bestand darin, dass ich einfach das übergeordnete Laufwerk und dann die Snapshot-Laufwerksdatei vom Dateimanager auf den virtuellen Laufwerksmanager verschoben habe. Dann konnte ich die .vbox-Datei öffnen (ich musste zwei Zeilen auskommentieren, die auf den freigegebenen Ordner verweisen, der in meiner Linux-Installation nicht vorhanden war.
zoechi 21.02.13

0

Der alte Pfadname (auf dem H:Laufwerk) kann einfach in der .vboxDatei für die VM angegeben werden, bei der es sich nur um eine XML-Datei handelt. In diesem Fall können Sie eine Kopie dieser Datei speichern, den Pfadnamen so ändern, dass er dem neuen Pfadnamen (dem auf dem N:Laufwerk) entspricht, und prüfen, ob das Problem dadurch behoben wird.


1
Ich habe das entsprechende Attribut im <HardDisk> -Knoten geändert und die VM neu hinzugefügt. Es gibt jedoch den Fehler zurück: A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}
Jmathew

Es kommt mir in den Sinn, dass ich die UUID einfach auf die alte Festplatten-UUID zurücksetzen kann. Ist das möglich?
Jmathew

Verwenden Sie dieses Gentleman-Skript, um die UUID
jmathew
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.