Bagaimana cara mengecilkan disk VDI yang tumbuh secara dinamis dari VirtualBox?

35

Disk virtual saya yang tumbuh secara dinamis (VDI) dari berbagai instalasi Ubuntu di Virtual Box sebenarnya terus "berkembang".

Menghapus file di mesin virtual tidak membebaskan ruang yang diambil oleh file VDI saya dari ruang hard disk host.

Bagaimana cara mengecilkan file-file ini untuk memberikan ruang hard disk yang tidak digunakan kembali ke host?

Takkat
sumber

Jawaban:

34

File hard drive virtual Virtual Box yang tumbuh secara dinamis mampu tumbuh sesuai permintaan mesin virtual hingga ukuran maksimum yang kami tentukan dalam menyiapkan file ini. Namun itu tidak membebaskan ruang file yang kami hapus di OS tamu.

Seandainya disk sudah tumbuh terlalu banyak kita bisa memadatkannya lagi, asalkan ruang yang tidak digunakan diisi dengan nol, dan drive dalam format VDI.

Untuk sistem file ext2 ke ext 4 ini dapat dilakukan dari tamu Ubuntu dengan utilitas baris perintah zerofree * .Instal zerofree

zerofree /dev/sdxX

Ini membutuhkan drive untuk tidak digunakan, dan dilepas . Karena itu kami mungkin harus mengikatnya sementara untuk VM lain yang telah kami buat untuk tujuan ini, atau kita perlu mem-boot lingkungan live Ubuntu pada VM ini.

Ganti /dev/sdxXdengan partisi yang diformat ext2, ext3 atau ext4 yang dimaksud.

Pada lebih dari satu partisi, saya harus mengulangi zerofreeuntuk setiap partisi. Perlu diingat bahwa dengan mengisi dengan nol file virtual sementara akan tumbuh hingga ukuran maksimumnya.

Setelah semua ruang drive yang tidak digunakan diisi dengan angka nol, kami lalu mengecilkannya

VBoxManage modifyhd <name>.vdi --compact

Ini akan sangat mengurangi ukuran file dari file VDI kami.

* Dalam tamu Windows kita dapat mengganti ruang yang tidak digunakan dengan utilitas sdelete.

Takkat
sumber
Apakah ini juga berfungsi untuk sistem file terenkripsi di dalam tamu?
smichak
Yakin. Jika Anda menggunakan ecryptfs, file yang dienkripsi terlihat seperti file normal untuk utilitas disk, dan ini akan berfungsi. Jika Anda menggunakan enkripsi disk penuh, partisi itu tidak akan dikenali sebagai partisi yang diformat dengan
extensi
Saya menggunakan partisi ext4 pada perangkat blok dm-crypt ... Saya mencoba metode ini dan saya tidak melihat file .vdi lebih kecil setelah pemadatan. Saya pikir bahwa blok nol disimpan sebagai blok bukan nol pada perangkat blok di bawah dm-crypt.
smichak
2
@smichak: itulah intinya enkripsi. Ini akan mengenkripsi semua drive Anda untuk memastikan kami tidak dapat melihat batas file.
Takkat
3
Jika Anda tidak ingin melampirkan VDI Anda ke komputer lain, Anda dapat mem-boot ke mode pemulihan, dan me-mount disk hanya baca mount -n -o remount,ro -t ext4 /dev/sda1kemudian zerofree -v /dev/sda1.
Hamid Nazari
1

Berikut adalah beberapa cara alternatif untuk nol ruang disk kosong (yang dapat menjadi bagian yang paling memakan waktu). Setelah itu, Anda masih harus menjalankan VBoxManage modifyhd <disk> --compactuntuk memadatkan file disk yang sebenarnya.


Perintah ini dapat membidik disk ketika sedang di-unmount:

apt-get install zerofree
zerofree -v /dev/sdxN


Berikut adalah contoh cara mendapatkan dd untuk mencetak secara berkala:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


Berikut adalah dd-seperti program yang akan secara otomatis mencetak output secara berkala:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M
chronospoon
sumber
1
Saya pernah melihat zerofreedigunakan pada sistem file yang dipasang, tetapi ketika itu dipasang hanya baca. Bahkan untuk root FS: sudo mount -o remount,ro /- tetapi dalam sesi GUI root akan sibuk, jadi itu akan gagal. Tetapi dimungkinkan di runlevel 1 ( telinit 1), jadi Anda tidak perlu mem-boot dari CD langsung untuk melakukannya.
Tomasz Gandor