Cara mengurangi ukuran / kapasitas virtual file Virtualbox vdi

8

Saya ingin mengubah mesin fisik yang menjalankan MS Windows 7 menjadi mesin virtual VirtualBox. Ini mudah, saya telah melakukan ini sebelumnya, tetapi kali ini saya membutuhkan ukuran virtual / kapasitas disk untuk menjadi ukuran yang tetap dan lebih kecil .

Itu perlu diperbaiki karena saya akan menginstal enkripsi disk PGP untuk alasan kepatuhan. Ini akan memperluas disk dinamis ke ukuran maksimum.

Selain kasus khusus ini ada alasan lain untuk menginginkan disk lebih kecil dan diperbaiki. Apakah pengalaman saya. Jika Anda menjalankan misalnya membangun server Jenkins pada disk yang berkembang secara dinamis, Anda dapat melihat disk tersebut berkembang dengan cepat ke ukuran maksimumnya sementara di OS guest penggunaan ruang disk stabil dan ada banyak ruang kosong.

Menggunakan Disk2vhd saya telah membuat file vhdx. File ini saya konversikan ke format vdi.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Konon dengan vdi Anda bisa mengurangi ukuran / kapasitas virtual dengan perintah yang mirip dengan

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Saya menemukan bahwa ini tidak berhasil. Bahkan jika Anda mencoba varian, Anda secara konsisten akan mendapatkan pesan kesalahan seperti:

Status kemajuan: VBOX_E_NOT_SUPPORTED VBoxManage: error: Ubah ukuran operasi hard disk untuk format ini belum diimplementasikan!

Di bawah ini adalah tata letak disk dari vdi disk saya. Saya menambahkan ini ke VM Ubuntu untuk melihatnya menggunakan Gparted dan CloneZilla. Kapasitas sekitar 300GB. 145GB yang tidak dialokasikan. Digunakan sekitar 153GB.

Saya ingin mengecilkan kapasitas menjadi sekitar 160GB. Ini harus cukup sesuai /dev/sdb1dan /dev/sdb2.

BTW, saya mencoba CloneZilla tetapi juga sepertinya tidak suka mengecilkan kapasitas ke disk yang lebih kecil. Saya mencoba berbagai pengaturan di CloneZilla tetapi tidak berhasil.

Bagaimana saya bisa mengurangi ukuran / kapasitas virtual?

masukkan deskripsi gambar di sini

onknows
sumber

Jawaban:

15
  1. Deallocate space di akhir disk di OS guest , di mana space> = size (source-disk) - size (new-disk). Biasanya dengan menyusutkan partisi terakhir .
  2. Matikan mesin virtual.
  3. Buat disk Kotak Virtual baru dengan ukuran yang diinginkan.
  4. Pindahkan konten dari disk lama ke dalam disk baru:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Nyalakan mesin virtual.

  6. Anda mungkin harus mengubah ukuran partisi di OS tamu untuk mengisi sisa disk tergantung dari ruang yang dialokasikan pada langkah 1.
Andre Figueiredo
sumber
2
Ini adalah cara yang benar untuk mengonversi vdi dinamis yang dibuat menggunakan partisi yang sangat besar ke vdi baru (mungkin format ukuran tetap karena alasan kinerja). Saya tidak tahu mengapa tidak ada yang menjawab jawaban ini dan lebih memilih cara yang dd ...
zw963
Apa yang Anda maksud dengan "deallocate space di akhir disk"? Apakah Anda merujuk untuk mengecilkan file vdi pada host, pada pertanyaan ini: superuser.com/questions/529149/…
mikezter
di OS tamu, saya sudah mengklarifikasi posting
Andre Figueiredo
Sempurna! Terima kasih banyak!
Yamakuzure
1
Menggunakan vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingmenghancurkan tabel partisi pada gambar target.
Mogens TrasherDK
3

Pada akhirnya saya berhasil memecahkan teka-teki ini dengan cara mudah yang tidak terduga menggunakan utilitas baris perintah yang telah diinstal ddlihat Kloning Disk . Seperti yang ditunjukkan di bawah ini saya sekarang memiliki drive 160GB saya di OS tamu saya disimpan dalam file VirtualBox vdi 160GB tetap.

masukkan deskripsi gambar di sini

Saya memecahkannya menggunakan langkah-langkah berikut:

  1. Ubah ukuran disk menggunakan Manajemen Disk di MS Windows ke ukuran yang sama atau lebih baik sedikit lebih kecil dari ukuran VDI.
  2. Tambahkan sumber vdi MSWIN7.vdidengan MS Windows 7 ke Ubuntu VM sebagai disk kedua.
  3. Buat vdi 160GB tetap baru dan juga tambahkan ini ke VM Ubuntu. Sekarang ada tiga disk: /dev/sda1dengan menjalankan Ubuntu VM, /dev/sdb2dengan sumber MSWIN7.vdidan /dev/sdc1dengan vdi baru.
  4. Buat partisi yang benar aktif /dev/sdc. CloneZilla melakukan ini untukku. Itu tidak menyalin data tetapi membuat partisi yang saya inginkan. Tentu saja Anda dapat melakukan ini secara manual.
  5. Salin sdbke sdcdengan ddperintah yang mirip dengan sudo dd if=/dev/sdb of=/dev/sdc. Perintah diakhiri dengan pesan error no space left, yang diharapkan. Ini saya abaikan karena ini hanyalah ruang yang tidak terisi yang gagal disalin.

Saya pikir mungkin untuk menjalankan perintah untuk setiap partisi. Mungkin lebih baik dan tidak akan menampilkan pesan kesalahan. sudo dd if=/dev/sdb1 of=/dev/sdc1dan sudo dd if=/dev/sdb2 of=/dev/sdc2.

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s
onknows
sumber
2

Saya percaya solusi ini sangat berbahaya! Itu bergantung pada semua file yang berada di 153 GB pertama dari partisi 300 GB asli. Perintah dd tidak menyalin file. Ini hanya menyalin SEMUA blok secara berurutan. Jadi, jika Anda kurang beruntung memiliki file penting SETELAH cutoff 160 GB, dd tidak akan tahu untuk menyalinnya.

Solusi khas yang saya lihat di banyak, banyak posting adalah untuk menghidupkan VM Windows dan menggunakan beberapa kombinasi alat defrag dan alat administratif untuk menggabungkan semua file ke depan disk - kesulitannya adalah banyak alat defrag tidak bergerak tidak bergerak. File-file sistem Windows (saya harus mematikan System Recovery untuk menghapus 7 GB disk yang tidak dapat dipindahkan), yang berada di suatu tempat di tengah ruang yang Anda coba konsolidasi.

Setelah Anda menggabungkan file ke depan disk (MyDefrag adalah alat freeware yang menyediakan tampilan di mana pada disk file Anda berada), Anda harus mengurangi ukuran partisi Windows Anda. Saya menggunakan alat diskpart dengan opsi menyusut.

Pada titik ini, Anda dapat menggunakan dd untuk menyalin partisi yang sekarang lebih kecil ke vdi baru.

Saya juga telah menggunakan vboxmanage modifymedium win10.vdi --compact, pada host Linux saya, tetapi saya pertama-tama harus menjalankan sdelete.exe dalam sistem Windows untuk menghapus semua ruang yang tidak digunakan terlebih dahulu (sdelete -zc :). Menggunakan vboxmanage untuk memadatkan file vdi yang ada memungkinkan Anda melakukan semuanya di tempat (tetapi selalu memiliki cadangan).

Paul Hursky
sumber
Apa yang saya lupa sebutkan adalah bahwa saya mengubah ukuran partisi di MS Windows pertama ke ukuran yang tepat. Ini menjamin bahwa file berada di bagian 153GB. MS WIndows akan memindahkan file / data. Perhatikan bahwa MS Windows tidak akan mengubah ukuran sewaktu-waktu karena file tidak dapat dipindahkan.
onknows
2

Dalam kasus saya, saya memiliki VM windows dengan 50GB vdi untuk menyusut menjadi 20GB.

Saya sudah mencoba solusi Andre Figueiredo tapi saya punya masalah dengan kloning vdi.

Ketika saya menerapkan solusi Andre Figueiredo dan melampirkan menyusut vdike VM, saat boot, Virtualbox berhenti dengan kesalahan I / O.

Mungkin ini terkait dengan btrfssistem file saya (saya dengar btrfsmenyebabkan masalah dengan Vritualbox vdi).

Solusi saya:

Saya mencoba solusi yang berbeda untuk mengecilkan disk VM ( vdi), bernama OVdi , ( OVdi memiliki ukuran disk 50GB, partisi ntf tunggal dengan ruang kosong 40GB).

Mari kita ikuti langkah-langkah ini (ini adalah kasus saya, Anda dapat mengadaptasi / menciptakan berbagai nama vdi ):

  • hentikan VM (poweroff)

  • buat disk baru ( vdi) dengan nama DVdi ukuran yang diinginkan (20GB kasus saya ..)

  • pasang DVdi ke VM

  • boot VM dan instal utilitas EaseUS Backup Free

  • Jalankan EasyUS dan gunakan fungsi EasyUS Clone (itu mengkloning OVdi MBR, dan partisi ntfs dari OVdi dengan menyusutkan ke disk DVdi baru )

  • Matikan VM

  • Lepaskan OVdi dari VM

  • Periksa apakah DVdi adalah perangkat boot pertama untuk VM

  • reboot VM

  • Selamat bersenang-senang

Jangan lupa untuk menghapus volume OVdi .

Mengikuti langkah-langkah ini saya berhasil mengurangi ukuran disk VM dari 50GB menjadi 20GB

Fabiano Tarlao
sumber
0

Seperti yang disebutkan orang lain, jawaban Andre Figueiredo berdasarkan keberuntungan karena tidak ada jaminan bahwa "X gb pertama" ruang adalah ruang Anda, kecuali jika Anda defrag, dalam hal ini masih berisiko.

Jawaban Paul Hursky jauh lebih aman. Saya akan mencantumkan beberapa langkah tambahan yang saya lakukan (perhatikan ini untuk Windows, milik saya adalah XP tetapi juga berfungsi untuk orang lain):

1) Dapatkan edisi gratis "MiniTool Partition Wizard Free 12" di tautan ini

2) Pasang di dalam OS tamu dan sesuaikan ukuran drive Anda, tinggalkan ruang bernafas hanya untuk aman (jangan menariknya sepanjang jalan kembali ..). Karena Anda kemungkinan besar mengubah ukuran hard drive OS saat ini, itu akan memberi Anda opsi untuk memulai kembali dan melakukan tindakan, lakukan ini.

3) Sekarang menggunakan program Partisi MiniTool yang sama, pilih ruang Anda sekarang tidak terisi (di bawah *:) -> Klik Kanan -> Hapus Partisi -> Isi Sektor dengan Nol (Cepat).

4) Sekarang dengan aman mematikan OS tamu. Pergi ke folder VirtualBox di mana VBoxManage.exe ada, buka cmd di jalur ini dan jalankan ini:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) Dan sekarang semuanya seharusnya bekerja secara ajaib. Ketika Anda selanjutnya membuka OS tamu, itu akan menjalankan check disk, LET IT RUN, ia menemukan "file yatim" yang tampak seperti file sistem.

goamn
sumber