Kvm-Virtualization

釋放 kvm/qemu 上 qcow2-image-file 上未使用的空間

  • May 16, 2021

我們正在為我們的虛擬機使用帶有 qcow2-images 的 kvm/qemu。

qcow2 有一個很好的特性,鏡像文件只分配虛擬機實際需要的空間。但是,如果虛擬機的分配空間變小,我如何縮小圖像文件?

例子:

1.) 我創建一個 qcow2 格式的新圖像,大小 100GB

2.)我使用這個圖像來安裝 ubuntu。安裝需要大約 10 GB,圖像文件增長到大約 10 GB。到目前為止沒有什麼意外。

3.) 我用大約 40 GB 的附加數據填充圖像。圖像文件增長到 50GB。我同意:-)

4.)這就是奇怪的地方:我刪除了圖像上所有的 40GB 數據,但圖像大小仍然佔用了 50GB。

問題:我如何釋放 40GB 的數據並將圖像縮小到僅需要的 10GB?

在此先感謝,伯尼

virt-sparsify 可以輕鬆完成所有這些工作:http: //libguestfs.org/virt-sparsify.1.html

圖像不會自動縮小,因為當您刪除文件時,您實際上並沒有刪除數據(這就是取消刪除有效的原因)。Qemu 有一個工具可以將 qcow2 映像壓縮回去,但該實用程序所做的實際上是從磁碟中刪除重複的零,而保留所有其他資訊不變。所以這個想法是:

  1. 零填充驅動器(dd if=/dev/zero of=/some/file直到空間不足)
  2. 刪除/一些/文件
  3. 關閉虛擬機
  4. cd 到保存和執行 VM 映像的位置qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. 更改 VM 設置以使用新的 deduplicated_image.qcow2,測試 VM 是否正常工作,並刪除舊映像

這,afaik,只適用於 qcow2 圖像,我沒有測試其他格式。

引用自:https://serverfault.com/questions/329287