天天看點

虛拟機内删除檔案後減少qcow2虛拟磁盤檔案實際占用的存儲空間

http://openwares.net/linux/reduce_qcow2_image_size_kvm.html

虛拟磁盤檔案占用的空間會越來越大,就算從客戶機裡面删除了很多檔案,但這些空間并未釋放出來,qcow2檔案仍然占用大量的主機存儲空間。

雖然qcow2有一個特點,客戶機需要時才配置設定存儲空間,這工作的一直很好。但是當從客戶機删除了很多檔案,釋放了很多空間時,從KVM主機端完全看不到qcow2虛拟磁盤檔案有變小的迹象。這是因為現在的檔案系統都有一個特點,删除檔案時并沒有真正的清除檔案的内容,隻是簡單的做了标記,這樣删除檔案會很迅速,隻有當用到這些空間時才重新寫入新的資料。這也是反删除甚至反格式化軟體存在的基礎。是以要想縮小qcow2虛拟磁盤檔案的大小,就要真正釋放這些未使用的空間才可以。

不同的客戶機類型有不同解決方式,基本思路就是用0填充未使用的客戶機磁盤空間,然後用qemu-img轉換磁盤鏡像檔案,轉換後的磁盤鏡像檔案将隻包含所有已使用的磁盤空間。

linux客戶機

  1. 使用dd指令将客戶機未使用的磁盤空間用0填滿

    $dd if=/dev/zero of=~/junk

    dd: writing to `/homejunk': No space left on device

    然後

    $rm junk

    關閉客戶機

  2. 轉換磁盤鏡像檔案

    $qemu-img convert -O qcow2 debian.qcow2 debian_new.qcow2

    轉換完成後可以看到debian_new.qcow2占用的KVM主機存儲空間與客戶機使用的磁盤空間基本是一緻的。然後用新的磁盤鏡像檔案debian_new.qcow2啟動客戶機即可。

windows客戶機

  1. 删除不需要的檔案,清理系統垃圾,然後整理磁盤碎片
  2. 下載下傳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

    關閉客戶機

  3. 最後在KVM主機上轉換qcow2磁盤鏡像檔案

    $qemu-img convert -O qcow2 windows.qcow2 windows_new.qcow2

    轉換完成後可以看到windows_new.qcow2占用的KVM主機存儲空間與客戶機使用的磁盤空間基本是一緻的。然後用新的磁盤鏡像檔案windows_new.qcow2啟動客戶機即可。

繼續閱讀