Cara menggabungkan snapshot sewenang-wenang ke basis vdi di Virtualbox

14

Saya gagal transfer VM dari satu harddisk ke yang lain. Sekarang saya pergi dengan base vdi dan sejumlah snapshot.

Langkah saya

  • Direktori VM lama disalin ke HDD baru
  • Menghapus VM lama dan menambahkan VM baru menggunakan Machine-> tambah dan sediakan file XML lama
  • Tidak dapat menambahkan file vdi dasar karena konflik sehingga mengubah UUID dari vdi dengan

    VBOXMANGE.EXE internalcommands sethduuid  <path/to/vdi>
    
  • Mencoba untuk mengembalikan ke snapshot, tetapi tampaknya VM sedang mencari snapshot pada HDD lama (yang diformat dan hilang)

Ini adalah kesalahan (jaringan adalah nama):

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}

HDD lama adalah drive H: yang baru adalah drive N:

Bagaimana saya bisa memodifikasi snapshots / VM untuk mencari N:\vm\ft.vdibasis vdi? Saya sudah menetapkan pengaturan default di VirtualBox secara umum (lokasi snapshot vm / vm default).

Atau jika tidak, bagaimana saya bisa menggabungkan snap shot lama dengan basis vdi mengingat bahwa satu-satunya hal yang telah berubah adalah UUID basis vdi?

jathath
sumber

Jawaban:

10

Inilah cara saya memecahkan masalah saya.

Pertama saya membuka kancing perubahan UUID pada file VDI basis saya dengan menggunakan script oleh jordoncm

Kemudian saya mencoba mengubah path dalam file vbox agar sesuai dengan lokasi baru. Itu tidak berfungsi karena berbagai kesalahan yang berbeda muncul dan saya bahkan tidak dapat menambahkan VM menggunakan file vbox.

Jadi saya menemukan artikel blog ini oleh Peter Porter yang menyarankan:

karena masing-masing .vdi hanya berisi sektor-sektor yang diubah dari .vdi terakhir, menyalin .vdi secara kronologis harus menjaring kita .vdi yang berisi salinan lengkap dari semua snapshot sebelumnya.

...

Gunakan perintah "VBoxManage clonehd" untuk membuat file .vdi baru berdasarkan dokumen asli Anda, lalu tambahkan setiap file berikutnya menggunakan argumen "-existing" untuk hanya menambahkan data ke .vdi yang ada yang sedang Anda buat. Daftar perintah berikut didasarkan pada contoh saya di atas:

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

Ini akan memberi Anda file "Machine-full.vdi" yang mewakili keadaan penuh mesin Anda dalam keadaan aktif tanpa ada hubungan dengan file .vdi induk. Anda sekarang dapat menggunakan file "Machine-full.vdi" ini di mesin virtual baru atau mengedit VM Anda yang ada, menghapus file .vdi yang lama dan menambahkan .vdi ini.

Dengan sedikit penyesuaian yang sepertinya berhasil untuk saya:

Ini adalah hard disk dan snapshots-nya:

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

Ini adalah perintah yang saya jalankan (maaf ada yang memotong windows-nya ...):

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

Omong kosong sepertinya saya perlu menambahkan entri di VirtualBox.xml di bawah MediaRegistry-> HardDisks, tapi saya harus memastikan untuk menambahkan setiap foto ke dalam urutan kronologis setelah setiap salinan. Jadi seperti ini:

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

Dan sisa dari apa yang saya lakukan seandainya itu membantu orang lain:

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

Dan kemudian saya hanya membuat VM baru menggunakan ft_full.vdi sebagai basisnya. Cocok dengan sisa pengaturan di panel pengaturan gui.

jathath
sumber
1
Tampaknya Anda dapat melakukannya dengan lebih cepat superuser.com/questions/590968/…
Andrey Regentov
4

Saya baru saja mengalami sakit kepala ini dan ada solusi yang tampaknya bodoh. Sayang sekali aku butuh satu hari penuh untuk sampai di sini.

Jika Anda melihat perintah internal VBoxManage.exe dumphdinfo Anda dapat melihat bahwa setiap VDI memiliki info tentang induknya. Jadi, apa yang saya lakukan adalah membuat mesin kosong dan menambahkan "rusak" Parent HD sebagai drive sekunder. Itu menempatkannya di Media Manager.

Kemudian, saya menambahkan pengontrol SATA ke VM kosong dan menambahkan snapshot layer 3. Klik ok. Edit lagi dan tambahkan snapshot layer 2, klik ok. Edit, tambahkan layer 1 snap shot.

Ini membuat masing-masing drive di dalam VM, tetapi di dalam Media Manager semuanya terhubung satu sama lain.

Langkah terakhir, cukup hapus VM bank dan Tambahkan VM Lama Anda. Selesai ... dan ya, sebodoh itu / sederhana.

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}
NeverEatAlone
sumber
Penyederhanaan adalah, bahwa saya hanya menjatuhkan induk dan kemudian file snapshot disk dari manajer file ke manajer disk virtual. Kemudian saya dapat membuka file .vbox (saya harus mengomentari dua baris yang merujuk ke folder bersama yang tidak ada pada instalasi linux saya.
zoechi
0

Pathname lama (pada H:drive) dapat dengan mudah ditentukan dalam .vboxfile untuk VM, yang hanya berupa file XML. Jika demikian, Anda dapat menyimpan salinan file itu, mengedit pathname menjadi pathname baru (yang ada di N:drive), dan melihat apakah itu memperbaiki masalah.

Fran
sumber
1
Saya mengubah atribut yang relevan di simpul <HardDisk> dan menambahkan kembali VM. Namun itu mengembalikan kesalahan: A differencing image of snapshot {xxx} could not be found. Could not find an open hard disk with UUID {yyy}
jmathew
Terjadi pada saya mungkin saya bisa mengatur UUID kembali ke uuid disk lama. Apakah itu mungkin?
jmathew
Menggunakan skrip pria ini untuk mengatur uuid kembali: Mengatur UUID dari VirtualBox VDI
jmathew