1. 程式人生 > >VMware虛擬機,從厚置備改成精簡置備,並減小硬盤的實際占用空間

VMware虛擬機,從厚置備改成精簡置備,並減小硬盤的實際占用空間

時間 scu 分享圖片 10g 數字 軟件 6.5 規劃 inux

工作中由於前期規劃不足,導致磁盤空間分配較大,而且是厚置備。後期不再需要時,無法把用不到的空間釋放出來,造成空間浪費。經過摸索和實驗驗證,總結出來一套方法。

風險提示:這個方法在我的環境中驗證通過了,但不代表適用於所有情況,生產環境中務必慎重!

環境: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,也就是實際占用的空間確實減小了。

技術分享圖片

通過上述實驗,基本上驗證了虛擬機回收空間的標準:

  1. 分配後尚未寫入過數據;
  2. 分配後寫入過數據,但在操作系統和虛擬機裏均進行過置零操作。

以上方法回收的是Linux系統的空間,理論上Windows系統也可以通過這個方法回收,只是用到的軟件不同。

由於這臺占用了6T空間的虛擬機馬上要遷移到物理機了,空間有限的問題不是很緊迫,因此等到遷移完成之後再測試,後面再把操作結果補充上來。

前期的規劃很重要,沒做好規劃,後期就要浪費很多時間來填坑。

VMware虛擬機,從厚置備改成精簡置備,並減小硬盤的實際占用空間