1. 程式人生 > >虛擬機器內刪除檔案後減少qcow2虛擬磁碟檔案實際佔用的儲存空間

虛擬機器內刪除檔案後減少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 `/home/***/junk': 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啟動客戶機即可。