2014年8月26日 星期二

在Linux環境正確將Thin-Provision Disk空間回收

在Linux的環境若要使用到精簡配置的磁碟達到空間自動回收的話,要注意該版本是否支援"mount -o discard"的參數,以下用一個範例來說明,如何達到空間自動回收的功能。

O/S: CentOS 6.5 x64 / vDisk: 10GB (mirror)

剛開始透過iscsiadm掛載該10G的磁碟後,同樣進行標準的磁區劃分(fdisk)與格式化(mkfs.ext4),此時觀察此vDisk的空間使用狀況(Disk Pool Allocation)已經佔了1.75GB。這時在Linux掛載的方式需要加入上述的參數:

mount -o discard /dev/mapper/mpathhp1 /mnt/

這時開始對該掛載的磁碟寫入資料,此時Disk Pool Allocation的空間已經達到2.12GB,再將剛寫入的檔案全數刪除(不是丟入垃圾桶喔~),從作業系統層用df -h觀察/mnt/ 可用的空間雖顯示原來全部可使用的空間,但實際上vdisk底層已allocate的空間SAU尚未回收。

在SSV 9 PSP4以後的版本,搭配mount -o discard的參數,可以達到自動回收的功能,不過為了不影響前端其他系統的運作,SSV會在background自動已low priority的方式"慢慢"回收。如果要加快處理,可以以手動的方式執行"start reclaim"的動作,再觀察該vDisk在Disk Pool Allocation的空間又回到起初的1.75GB。

若是作業系統沒有支援mount -o discard的方式掛載,或著一開始就沒有使用此參數掛載,可以透過dd寫 "0"的方式,將剛使用過的空間填零,再搭配手動在SSV執行Reclaim的方式也可以達到空間回收的功能。不過要注意的是,由於資料可能分散在多個SAU裏頭,只要SAU裏頭有任何一個空間不是"0"則SSV不會將其回收,所以透過dd寫"0"的方式,會需要嘗試多次之後,再觀察空間回收的狀況,採"逐次逐步"的方式來回收。



沒有留言:

張貼留言