Cara tercepat untuk menggabungkan snapshot di VirtualBox?

48

Saya memiliki vdi dengan sejumlah snapshot yang diambil darinya - katakanlah, 50 atau 70 snapshot. Saya ingin memiliki satu vdi polos dengan keadaan saat ini. Snapshots ini memakan terlalu banyak ruang disk dan tidak diperlukan sebagai snapshot.

Saya tahu itu jika saya menelepon

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 times) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

Saya akan mendapatkan apa yang saya inginkan. Tapi itu membutuhkan waktu yang sangat lama (lebih dari 5 jam mengingat perangkat keras saya dan ukuran disk awal 16G).

Dan, tentu saja, saya mencoba VBoxManage snapshot deletedan aneh: tidak bekerja pada mesin berhenti, bisa gagal menjalankan mesin dan ketika gagal sekali, itu akan gagal semua panggilan berikutnya.

Apakah ada cara untuk membuat vdi sederhana dari sejumlah snapshot - lebih cepat?

$ VBoxManage --version
3.2.14r75509

(menanyakannya pada ServerFault tetapi memutuskan tempat ini lebih tepat untuk pertanyaan ini)

Andrey Regentov
sumber
Perintah yang Anda gunakan adalah perintah yang ingin Anda gunakan tidak ada cara yang lebih cepat.
Ramhound
Bagaimana dengan mengekspor seluruh VM? Apakah vdi-nya berisi apa yang saya inginkan?
Andrey Regentov
Kamu harus mencobanya. Pada akhirnya metode lain masih akan memakan waktu karena ukuran Mesin Virtual.
Ramhound

Jawaban:

53

Menemukan solusinya. Ini sesederhana langkah terakhir dari perintah yang saya tulis di sini. Yaitu

VBoxManage clonehd fullpath/{uuid-of-last-snapshot}.vdi thedisk-full.vdi

Jadi saya harus mengkloning hanya snapshot terakhir, tidak setiap snapshot dari rantai. Dan itu ribuan persen lebih cepat.

Uuid dapat ditemukan dari VBoxManage list hdds | grep VmName | tail

Di GUI (pada Windows), pilih VM, pilih Snapshots dari kanan atas, klik kanan pada snapshot yang Anda inginkan, pilih Clone ... , dan pilih Full Clone dalam dialog.

Andrey Regentov
sumber
thx tetapi tidak bekerja pada pengaturan saya, katanya gambar sudah ada. Apakah Anda lupa --existing?
Andy
3
jika Anda sudah memiliki thedisk-full.vdifile pada disk, silakan ubah nama dalam perintah menjadi sesuatu seperti thedisk-full-new.vdi.
Andrey Regentov
Fullpath harus menjadi salah satu yang terdaftar di VirtualBox, tentu saja. Tautan simbolik tidak berfungsi, karena VBox perlu mencari semua Snapshots
Andy
tidak yakin apa yang dilakukan ekor, maksud Anda " tail -1"?
eckes
1
Di VirtualBox 5, clonehdsudah usang dan dibiarkan kompatibilitas, gunakan clonemediumsebagai gantinya.
George Sovetov
22

Berikut adalah teknik (diuji pada VirtualBox 4.3.4) yang menggunakan perintah 'Klon' untuk menggabungkan dan memadatkan semua foto ke VM baru yang berisi file VDI tunggal:

  1. Ganti nama VM sehingga Anda dapat menggunakan kembali nama saat ini untuk VM kloning (Anda dapat mengubah nama VM dari tab 'Dasar' pada pengaturan 'Umum').

  2. Klik kanan pada VM dan jalankan perintah 'Klon ...':

    • Atur nama menjadi nama asli VM.
    • Terima default yang tersisa yaitu Jenis klon: 'Klon penuh'; Snapshots: 'Status mesin saat ini'.
  3. Hapus VM lama (klik kanan pada VM dan jalankan perintah 'Hapus ...').

Stuart Rackham
sumber
Pada VirtualBox 6.0.8, ini masih berfungsi.
Paul Sturm
3

Anda dapat mencoba untuk mengekspor ke OVF dan kemudian mengimpor kembali file yang dihasilkan.

Seperti yang dijelaskan di sini :

OVF tidak dapat menggambarkan snapshot yang diambil untuk mesin virtual. Akibatnya, ketika Anda mengekspor mesin virtual yang memiliki snapshot, hanya kondisi mesin saat ini yang akan diekspor, dan gambar disk dalam ekspor akan memiliki keadaan "rata" yang identik dengan keadaan saat ini dari mesin virtual.

Akibatnya, Anda akan memiliki VM kloning dengan status saat ini tanpa snapshot lain.

StreakyCobra
sumber
Saya bertanya tentang vdis karena tidak dapat mengekspor mesin - rusak (keadaan tidak dapat diakses setelah host reboot), dan semua yang saya miliki adalah banyak VDI - disk dan sekitar lima puluh snapshot.
Andrey Regentov
0

Operasi itu berarti membaca dan menulis file yang sangat besar dalam disk fisik yang sama. Satu-satunya cara Anda dapat mempercepat itu adalah dengan meletakkan file-file itu di disk yang berbeda mengubah jalur di perintah VBoxManage Anda. Jika mesin hanya memiliki satu disk, Anda dapat menggunakan drive USB eksternal atau bahkan disk di komputer lain melalui berbagi jaringan (tergantung pada kecepatan jaringan Anda)

golimar
sumber
1
Biasanya jaringan adalah urutan besarnya lebih lambat dari antarmuka HDD internal, jadi ini mungkin tidak akan membuat proses lebih cepat.
Andrey Regentov
-2

Beberapa memiliki 10Gib / s LAN, sehingga dapat mentransfer lebih dari satu gigabyte per detik, sehingga tidak akan menjadi hambatan.

Beberapa memiliki 1Gib / s LAN, sehingga dapat mentransfer lebih dari lebih dari 100 megabita per detik, sehingga tidak akan menjadi hambatan (kecuali Anda memiliki SSD yang sangat cepat).

Disk mekanis, ketika membaca & menulis pada disk yang sama pada waktu yang sama (atau banyak terfragmentasi), turun hampir 20 megabyte per detik, sedangkan pada non-terfragmentasi hanya baca atau hanya menulis yang bisa mencapai lebih dari 100 megabyte per detik.

Anda tahu tentang LAN menjadi lebih lambat, tetapi bukan tentang USB (2.0, belum lagi 1.1 atau 1.0) jauh lebih lambat.

Apa yang saya sarankan adalah: Gunakan USB 3.1 Gen2 Type C atau eSATA / SATA / SAS

Tapi allways: Gunakan disk cukup cepat kedua.

Dan allways: Mengkloning ke disk lain dan menyalin kembali file jauh lebih cepat daripada hanya menggunakan satu disk kecuali itu adalah SSD atau hard disk dengan lengan multi-head independen (mereka dapat membaca dan menulis pada saat yang sama pada dua tempat permukaan, masing-masing kepala memiliki lengan sendiri, sangat mahal, sekitar> 9876 €).

Yang terbaik adalah mengkloning hanya hard disk virtual dari keadaan yang Anda inginkan, kemudian memeriksanya bekerja, lalu KEMBALIKAN tingkat atas (akan menghapus semua foto), kemudian lepaskan HDD pada penyimpanan dan hubungkan yang baru.

Jadi langkah-langkah untuk kehilangan semua status lama pada skema snapshot tidak ada pohon:

  1. Kloning dari satu hardisk ke hardisk yang lain, hindari kemacetan
  2. Buat mesin baru, sambungkan disk itu, lepaskan, konfigurasikan sebagai tidak bisa diijinkan
  3. Uji itu berhasil (karena tidak bisa diulang) Anda akan memiliki status yang sama
  4. Jika Anda tidak membutuhkannya, putuskan, ubah kembali seperti semula, dll
  5. Hapus snapshot mesin lama (KEMBALIKAN lebih dulu)
  6. Hapus mesin uji temporal
  7. Salin kembali ke disk disk virtual
  8. Pasang disk yang dikloning

Tapi ingatlah, snapshot bisa seperti pohon penuh, satu simpul dapat memiliki lebih dari satu anak, setiap anak dapat memiliki lebih dari satu anak, dll.

Untuk bekerja dengan pohon snoapshots, selalu berpikir DELETE sebagai menghapus sebuah node tanpa membubuhkan sisa node (hanya kehilangan negara itu, tetapi tidak ada sisanya, tidak ada orang tua dan tidak ada anak yang akan affeted, data akan digabungkan pada semua sub pertama tingkat anak, proses sangat lambat) dan pada KEMBALIKAN sebagai menghancurkan semua anak di semua tingkat sub (kehilangan semua negara setelah yang Anda pulihkan, itu hanya menghapus file, jadi proses sangat cepat, hanya beberapa detik).

Itu adalah!

PD: Betapa mengerikannya nama yang diberikan VBOX pada dua operasi itu (hapus hanya satu simpul = HAPUS; hapus semua simpul anak pada semua sub level = KEMBALIKAN)

Claudio
sumber
Pulihkan tidak menghapus snapshot apa pun, hanya keadaan saat ini (belum disimpan).
Melebius