背景:有客戶提及到之前沒合理為虛拟機分配磁盤空間,虛拟機磁盤類型雖然選擇精簡置備,但是運行一段時間之後,虛拟機OS系統内看到的實際使用空間遠小于存儲占用空間。
原理:精簡置備vmdk文件容量是随着寫入置備增加,即虛拟機某個時間使用磁盤達到曆史峰值後,即便删除文件,甚至格式化磁盤,vmdk文件所占用的空間依然是曆史峰值容量。删除操作是在OS層面進行的,但是虛拟化底層并不能感知這個删除操作,因此也就不會回收。
因為NTFS文件系統的機制,被寫入過的文件即使将文件删除系統也不會将磁盤區塊置零,下次再寫入數據隻會優先操作标記為零的區塊來寫。
解決思路:分兩步:
1、使用磁盤置零工具(Windows下有SDelete工具,Linux下有DD工具)将虛拟機未使用的空間填零;
2、使用vmkfstools 移除置零的塊,收縮VMDK文件。
下文以一台Win7虛拟機為例,介紹回收過程。
1、前提:開啟主機SSH權限,登錄到當前虛拟機所在的存儲路徑,使用
du - sh *
查看當前vmdk所占空間為16.5G
2、在虛拟機操作系統内拷貝文件,拷貝大約5G文件之後,并删除。
3、因為Windows不會自動将已删除的塊清零。Windows下可以使用 SDelete工具 填零,SDelete v2.04工具下載,運行sdelete.exe -z 盤符,運行過程比較慢,耐心等待,期間在操作系統中會看見你的磁盤會被占滿,等運行完成後又會回到正常的容量。
請注意,在此過程中,該虛拟磁盤vmdk文件将增長到精簡置備分配完整大小。
4、第一次查詢為拷貝并删除5G文件後vmdk占用的文件大小為21.5G,可見删除文件後并不會減少vmdk的占用空間大小。如下圖:
第二次查詢為運行 SDelete工具 之後vmdk的占用空間大小為37.3G。(這裡注意:一定要确保存儲有足夠空間以允許該虛拟機磁盤空間增長到其置備的最大值,否則撐爆存儲後果不堪設想。)
5、将虛拟機關機,并使用vmkfstools進行磁盤回收。(備注:不關機強制運行vmkfstools會提示Failed to open virtual disk ‘new-win7.vmdk’: Failed to lock the file (16392);)
vmkfstools -K [disk-name].vmdk
vmdk回收中,有進度百分比。
需要注意:轉換過程中需要用到的文件是vmdk磁盤文件,有兩種vmdk,一種是”虛拟機名.vmdk”,另一種是”虛拟機名-flat.vmdk”,vmdk文件很小,存放了虛拟磁盤的一些配置信息(如虛拟磁盤數據文件等),實際數據都存放在flat.vmdk文件中,轉換時需要使用vmdk文件而不是flat.vmdk文件。
6、直到顯示100%表示回收成功,查詢vmdk占用空間已經減少到15.5G。
7、打開虛拟機電源,驗證虛拟機可以正常使用。
注意事項:
回收前請注意備份虛拟機;虛拟機不能有快照,虛拟機需要關機或者将虛拟磁盤移除以确保磁盤未在使用(需要評估停機窗口,回收時間取決于vmdk大小),并确保存儲空間足夠。
經驗證,Storage vMotion過程修改厚置備和精簡置備,來回遷移兩次,實際并不能回收vmdk空間。
如果以上方式滿足不了要求,VMware vCenter Converter也是可行的。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!