http://openwares.net/linux/reduce_qcow2_image_size_kvm.html
虛拟磁盤檔案占用的空間會越來越大,就算從客戶機裡面删除了很多檔案,但這些空間并未釋放出來,qcow2檔案仍然占用大量的主機存儲空間。
雖然qcow2有一個特點,客戶機需要時才配置設定存儲空間,這工作的一直很好。但是當從客戶機删除了很多檔案,釋放了很多空間時,從KVM主機端完全看不到qcow2虛拟磁盤檔案有變小的迹象。這是因為現在的檔案系統都有一個特點,删除檔案時并沒有真正的清除檔案的内容,隻是簡單的做了标記,這樣删除檔案會很迅速,隻有當用到這些空間時才重新寫入新的資料。這也是反删除甚至反格式化軟體存在的基礎。是以要想縮小qcow2虛拟磁盤檔案的大小,就要真正釋放這些未使用的空間才可以。
不同的客戶機類型有不同解決方式,基本思路就是用0填充未使用的客戶機磁盤空間,然後用qemu-img轉換磁盤鏡像檔案,轉換後的磁盤鏡像檔案将隻包含所有已使用的磁盤空間。
linux客戶機
-
使用dd指令将客戶機未使用的磁盤空間用0填滿
$dd if=/dev/zero of=~/junk
dd: writing to `/homejunk': No space left on device
然後
$rm junk
關閉客戶機
-
轉換磁盤鏡像檔案
$qemu-img convert -O qcow2 debian.qcow2 debian_new.qcow2
轉換完成後可以看到debian_new.qcow2占用的KVM主機存儲空間與客戶機使用的磁盤空間基本是一緻的。然後用新的磁盤鏡像檔案debian_new.qcow2啟動客戶機即可。
windows客戶機
- 删除不需要的檔案,清理系統垃圾,然後整理磁盤碎片
-
下載下傳SDelete,借助sdelete用0來填充未使用硬碟空間
檢視sdelete幫助
C:\>sdelete
SDelete - Secure Delete v1.6
Copyright (C) 1999-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
usage: sdelete.exe [-p passes] [-s] [-q] ...
sdelete.exe [-p passes] [-z|-c] [drive letter] ...
-a Remove Read-Only attribute
-c Clean free space
-p passes Specifies number of overwrite passes (default is 1)
-q Don't print errors (Quiet)
-s or -r Recurse subdirectories
-z Zero free space (good for virtual disk optimization)
用0填充C分區空閑區域
C:\>sdelete -z c
關閉客戶機
-
最後在KVM主機上轉換qcow2磁盤鏡像檔案
$qemu-img convert -O qcow2 windows.qcow2 windows_new.qcow2
轉換完成後可以看到windows_new.qcow2占用的KVM主機存儲空間與客戶機使用的磁盤空間基本是一緻的。然後用新的磁盤鏡像檔案windows_new.qcow2啟動客戶機即可。