membebaskan ruang yang tidak digunakan pada file-qcow2-image di kvm / qemu

23

kami menggunakan kvm / qemu dengan qcow2-images untuk mesin virtual kami.

qcow2 memiliki fitur bagus ini di mana file gambar hanya mengalokasikan ruang yang sebenarnya dibutuhkan oleh mesin virtual. tapi bagaimana cara mengecilkan kembali file gambar, jika ruang yang dialokasikan mesin virtual semakin kecil?

contoh:

1.) saya membuat gambar baru dengan format qcow2, ukuran 100GB

2.) saya menggunakan gambar ini untuk menginstal ubuntu. instalasi membutuhkan sekitar 10 gb, file gambar tumbuh hingga sekitar 10GB. tidak ada yang tak terduga sejauh ini.

3.) saya mengisi gambar dengan sekitar 40 GB data tambahan. file gambar tumbuh hingga 50GB. saya setuju dengan itu :-)

4.) ini adalah hal yang aneh: saya menghapus semua data 40GB pada gambar, tetapi ukuran gambar masih memakan 50GB.

pertanyaan: bagaimana cara membebaskan data sebesar 40GB itu dan mengecilkan gambar menjadi hanya 10 GB yang dibutuhkan?

terima kasih sebelumnya, berni

bmaeser
sumber

Jawaban:

26

Gambar tidak akan menyusut secara otomatis, karena ketika Anda menghapus file, Anda tidak benar-benar menghapus data (inilah sebabnya membatalkan penghapusan berfungsi). Qemu memiliki fasilitas untuk mengecilkan gambar qcow2 kembali, tetapi apa yang dilakukan utilitas ini benar-benar menghapus angka nol dari disk, membiarkan semua informasi lainnya tetap utuh. Jadi idenya adalah:

  1. Isi nol drive ( dd if=/dev/zero of=/some/filesampai Anda kehabisan ruang)
  2. hapus / beberapa / file
  3. mematikan VM
  4. cd ke tempat gambar untuk VM disimpan dan dijalankan qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. ubah pengaturan VM untuk menggunakan deduplicated_image.qcow2 baru, uji VM berfungsi, dan hapus gambar lama

Ini, afaik, hanya akan berfungsi dengan gambar qcow2, saya belum menguji format lain.

dyasny
sumber
3
Jika Anda memiliki tamu windows, jalankan SDelete -z untuk membidik semua ruang kosong (langkah 1,2 di atas)
ndemou
17

virt-sparsify dapat melakukan semua ini dengan lebih mudah di pihak Anda: http://libguestfs.org/virt-sparsify.1.html

Eric Blake
sumber
Tidak begitu yakin itu ada di sana pada tahun 2011
dyasny
2
@dyasny Jika jawaban yang ada untuk pertanyaan lama telah menjadi usang dari waktu ke waktu, ada baiknya menulis jawaban baru. Namun jawaban baru khusus ini mungkin tidak memenuhi standar untuk situs ini.
kasperd
4
@dyasny Jika seseorang ingin menghabiskan upaya menulis jawaban kualitas baru, setiap kali yang lama usang, mereka harus didorong untuk melakukannya. Diskusi yang lebih menyeluruh tentang bagaimana menangani jawaban yang sudah ketinggalan zaman lebih cocok untuk meta.
kasperd
1

virt-sparsify fileA fileBakan melakukan semua itu, tetapi tidak akan benar-benar mengurangi ukuran gambar. Untuk ini, Anda perlu menambahkan --compress.

cmyster
sumber