工做中因爲前期規劃不足,致使磁盤空間分配較大,並且是厚置備。後期再也不須要時,沒法把用不到的空間釋放出來,形成空間浪費。通過摸索和實驗驗證,到最終解決問題,總結出來兩種方案。 html
風險提示:兩種方案的實驗都驗證經過了,但第一種方案在生產環境中沒有成功,若有相似問題,建議採用第二種方案!post
因爲初始分配給Ubuntu 16.04虛擬機的硬盤空間是2T,後期數據量加大須要增長空間時,發現分區表不是GPT,沒法超過2T。測試
致使已在vCenter裏給虛擬機增長的空間浪費,也就是下圖中的這個數字,只能調高,不能調低。url
VMware官方對於這種狀況提供了一種解決辦法:經過遷移,改變虛擬磁盤格式,從「厚置備」改爲「精簡置備」,從而減少實際佔用的空間。spa
官方網址:https://kb.vmware.com/s/article/2014832操作系統
經過官方的解決辦法進行處理,以下圖所示,結果喜憂參半3d
喜的是實際佔用的空間確實減少了,憂的是減少的空間僅僅是未分配的unallocated這部分,前面已分配的空間,雖然文件已經刪除了,但並無減少。htm
fdisk –lu #查看磁盤分區狀況blog
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 #調整文件系統大小,使之與分區大小相匹配
dd bs=64k if=/dev/zero of=/dev/sda2 #bs表示每次寫的塊的大小
在Gparted中能夠看到File System變成了unknown
刪除/dev/sda2,使之變成unallocated
之因此要多作這麼一步,是由於上面的操做只是在把操做系統裏把未使用的空間置零了,虛擬機並不知道,所以須要經過這步操做,讓虛擬機把未使用的空間也置零。
經過上述實驗,基本上驗證了虛擬機回收空間的標準:
以上方法回收的是Linux系統的空間,理論上Windows系統也能夠經過這個方法回收,只是用到的軟件不一樣。
雖然上文提到第一種方法實驗驗證經過了,可是在操做生產環境中的機器時,因爲各類未知緣由(快照、磁盤整合、漫長的數據遷移時間…),致使最後的結果並不理想,雖然成功的把文件系統的大小減少到了55G,但從厚置備轉換爲精簡置備後,並無達到空間釋放的目的。
此處應有圖片,晚上截圖。
這個方法走不通以後,我想到發生問題之初,曾諮詢過一位老哥,當時提到了一個很牛逼的軟件,產自寶島臺灣的再生龍Clonezilla。
因爲那時我尚未找到減少文件系統大小的方法,而再生龍有以下限制,所以也就無法經過備份還原的方式解決問題。
其實如今想來,經過先備份,再還原到精簡置備磁盤的方式,應該也是能夠的,不過沒有驗證,並且對於強迫症患者來講,這個方案也並不完美。
因此個人方法是先備份原機器/dev/sda1分區,再新建一臺虛擬機,空間比原機器/dev/sda1分區的大小略大(緣由參考使用再生龍Clonezilla備份還原Linux系統),而後把備分內容還原到新虛擬機上,以後再把原機器/dev/sdb1分區所在的虛擬磁盤添加到新虛擬機中。
固然,仍是要先經過實驗驗證一番,具體步驟另外寫了一篇隨筆使用再生龍Clonezilla備份還原Linux系統
實驗很成功,效果很滿意,接下來就是在半夜沒有業務的時候關機調整了。得益於再生龍Clonezilla超高的備份還原效率,30分鐘以內完成了所有操做,通過一天的測試,一切正常。