VMware虛擬機,從厚置備改成精簡置備,並減小硬盤的實際占用空間
工作中由於前期規劃不足,導致磁盤空間分配較大,而且是厚置備。後期不再需要時,無法把用不到的空間釋放出來,造成空間浪費。經過摸索和實驗驗證,總結出來一套方法。
風險提示:這個方法在我的環境中驗證通過了,但不代表適用於所有情況,生產環境中務必慎重!
環境:Esxi 6.5,vCenter 6.5 U1e,Ubuntu 16.04
由於初始分配給Ubuntu 16.04虛擬機的硬盤空間是2T,後期數據量加大需要增加空間時,發現分區表不是GPT,無法超過2T。
導致已在vCenter裏給虛擬機增加的空間浪費,也就是下圖中的這個數字,只能調高,不能調低。
VMware官方對於這種情況提供了一種解決辦法:通過遷移,改變虛擬磁盤格式,從“厚置備”改成“精簡置備”,從而減小實際占用的空間。
官方網址:https://kb.vmware.com/s/article/2014832
通過官方的解決辦法進行處理,如下圖所示,結果喜憂參半
喜的是實際占用的空間確實減小了,憂的是減小的空間僅僅是未分配的unallocated這部分,前面已分配的空間,雖然文件已經刪除了,但並沒有減小。
通過查找各種資料,想到了一種方法,通過如下實驗進行驗證。
1.給虛擬機分配40G的厚置備硬盤空間並安裝系統,安裝完畢後不進行任何操作,直接關機。
2.關機後遷移虛擬機,虛擬磁盤格式從“厚置備”改成“精簡置備”,已用空間減小到6GB,說明在沒有寫入數據的情況下,通過官方的方法是可以減小實際占用空間的。
3. 再次遷移虛擬機,把虛擬磁盤格式從“精簡置備”改成“厚置備”,然後拷貝大文件把硬盤空間填充滿。
4.把大文件刪除,關機後遷移虛擬機,虛擬磁盤格式從“厚置備”改成“精簡置備”。可以看到,雖然刪除了大文件,但通過遷移的方式也僅僅能回收沒有寫入過數據的很小的一塊空間。
5.用SystemRescueCD啟動虛擬機,減小/分區的大小
fdisk –lu #查看磁盤分區情況
e2fsck –f /dev/sda1 #檢查文件系統
resize2fs /dev/sda1 10G #把文件系統大小調整為10G
parted /dev/sda #使用parted調整硬盤分區,註意是/dev/sda
(parted)resizepart 1 12G #調整分區大小,1代表/dev/sda1
#註意:parted分區大小計算方式不同,所以多留一些空間防止數據丟失
resize2fs /dev/sda1 #調整文件系統大小,使之與分區大小相匹配
6.重啟,從本地硬盤啟動,查看磁盤分區大小,可以看到/dev/sda1已經被壓縮了。
7.在未分配的空間新建一個分區,然後全部置零
dd bs=64k if=/dev/zero of=/dev/sda2 #bs表示每次寫的塊的大小
在Gparted中可以看到File System變成了unknown
刪除/dev/sda2,使之變成unallocated
8.關機後遷移虛擬機,把虛擬磁盤格式從“精簡置備”改成“厚置備快速置零”。
之所以要多做這麽一步,是因為上面的操作只是在把操作系統裏把未使用的空間置零了,虛擬機並不知道,因此需要通過這步操作,讓虛擬機把未使用的空間也置零。
9.再次遷移虛擬機,把虛擬磁盤格式從“厚置備”改成“精簡置備”,可以看到已用空間減小到10GB,也就是實際占用的空間確實減小了。
通過上述實驗,基本上驗證了虛擬機回收空間的標準:
- 分配後尚未寫入過數據;
- 分配後寫入過數據,但在操作系統和虛擬機裏均進行過置零操作。
以上方法回收的是Linux系統的空間,理論上Windows系統也可以通過這個方法回收,只是用到的軟件不同。
由於這臺占用了6T空間的虛擬機馬上要遷移到物理機了,空間有限的問題不是很緊迫,因此等到遷移完成之後再測試,後面再把操作結果補充上來。
前期的規劃很重要,沒做好規劃,後期就要浪費很多時間來填坑。
VMware虛擬機,從厚置備改成精簡置備,並減小硬盤的實際占用空間