1. 程式人生 > 其它 >Esxi虛擬機器硬碟壓縮及回收空間(磁碟縮小減少空間佔用)的最全8種方法大全

Esxi虛擬機器硬碟壓縮及回收空間(磁碟縮小減少空間佔用)的最全8種方法大全

Esxi虛擬機器硬碟壓縮及回收空間(磁碟縮小減少空間佔用)的最全8種方法大全

小辣椒高效Office 公眾號:Office交流網 Excel Access 腦圖    

一、虛擬機器硬碟壓縮需求

最近有一個Esxi虛擬機器Windows 10系統,之前使用的是厚置備,一開始分配了350G(精簡置備也可縮小,下面也有對應方法),因為系統實際佔用空間大約80G左右,現在想把它複製到其它資料儲存器,感覺佔用的空間非常大,想先把虛擬機器硬碟縮小,而Esxi操作介面上,磁碟是可以擴容,但不能直接縮小,所以需要使用Esxi的 vmkfstools 來進行轉換或壓縮。

在壓縮回收虛擬磁碟空間之前,我們先來掌握一些基礎知識

二、介紹一下三種虛擬磁碟型別

1. 厚置備延遲置零(zeroed thick) #預設選項

在建立時為虛擬磁碟分配所需空間(真實地佔用物理儲存空間),當虛擬機器在有寫入的時,再按量將其置零。

2 厚置備置零(eager zeroed thick)

在建立時為虛擬磁碟分配所需空間(真實地佔用物理儲存空間),建立過程中作置零操作,所以建立磁碟時間長。

3 精簡置備(thin)

無論磁碟分配多大,實際用多少就佔用物理儲存多少,當虛擬機器真正寫入資料時,才進行分配空間及置零的操作,需等待分配空間和置備完成後才能進行操作,對於IO頻繁造成效能會有所下降,但它的好處是節省了儲存空間,不過使用這種方式,虛擬磁碟vmdk檔案隨著置備量會只增不減。

精簡置備只增不減:精簡置備vmdk檔案容量是隨著寫入置備增加,如虛擬機器曾經使用磁碟達500GB,雖然你刪除300GB檔案後,甚至格式化磁碟,刪除磁碟分割槽,但vmdk檔案依然是500GB。所以需要加收空間

三、回收空間準備

1、首先要準備足夠大物理儲存空間,因為轉換時,需要同時儲存舊檔案及新檔案及一些臨時空間
2、如果vmdk檔案非常大,轉換及遷移需要時間也會非常長,我轉換了350G的檔案 大約40多分鐘,如果是筆記本,需要接上外接電源

 

四、回收空間思路及詳細步驟

1、先將虛擬機器系統中不需要的檔案刪除 清空,甚至可以對虛擬機器的磁碟進行壓縮

小辣椒高效Office:Windows系統壓縮卷時提示磁碟上沒有足夠的空間完成此操作或壓縮空間遠小於實際剩餘空間解決辦法8 贊同 · 2 評論文章

2、再使用sdelete工具進行填0(置零操作)

小辣椒高效Office:Windows下如何安全的永久不可恢復地刪除檔案-SDelete工具的使用6 贊同 · 0 評論文章

3、最後再使用ESXI工具vmkfstools移除置零的塊,實現收縮VMDK空間:

未處理之前,虛擬機器磁碟檔案是350G左右

4、完整操作步驟:

1)先將虛擬機器系統中的不需要的臨時檔案,安裝檔案,系統更新檔案或不需要的檔案全部刪除,

2)再對磁碟進行碎片整理

3)再進行磁碟壓縮

4)再使用SDelete工具將未使用空間置零

5)將虛擬機器關機

6)開啟esxi 的ssh 及放行埠(處理完成後要關閉它,以保證安全)

7)使用Win10 cmd命令列,直接 輸入 ssh [email protected](你的esxi電腦的IP地址

8)如果是精簡置備,可以使用 vmkfstools -K win10.vmdk 壓縮未使用的空間

如果是厚置備,使用上述命令則會提示失敗:

vmkfstools Hole Punching: 0% done.Could not punch hole in disk Function not implemente

則需要使用 將厚置備轉為精簡置備的命令

vmkfstools -i win10.vmdk -d thin win10new.vmdk

Vmkfstools命令格式

# vmkfstools -i<source-disk-name.vmdk>-d {thin|thick}<destination-disk-name.vmdk>

引數解釋:

-i <source-disk-name.vmdk>引數:原vmdk磁碟名

-d {thin|thick}<destination-disk-name.vmdk> :目標磁碟的格式,thin或thick; <destination-disk-name.vmdk>為要生成的目標vmdk磁碟名;

轉換後,需要將名稱 更改為 對應到舊的名稱

轉換完成後

vmkfstools -i win10.vmdk -d thin win10new.vm

dk

Destination disk format: VMFS thin-provisioned

Cloning disk 'win10.vmdk'...

Clone: 100% done.

做完這一步,如果使用ls -l 看到轉換後的vmdk的檔案大小並沒有改變,而實際上雖然檔案大小沒有改變,但佔用空間大大縮小了,可以使用 du -ah * 命令來檢視

9) 將舊的win10.vmdk win10-flat.vmdk 檔案 改名

mv win10.vmdk win10bak.vmdk

mv win10-flat.vmdk win10-flatbak.vmdk

再把轉換後的新檔案改名:

mv win10new.vmdk win10.vmdk

mv win10new-flat.vmdk win10-flat.vmdk

10) 再修改win10.vmdk 檔案

vi win10.vmdk

搜尋filename="win10.vmdk" 再將filename="win10.vmdk" 這個路徑檢查一下,是否對應你轉換後的新的檔名

 

11) 再把Extent description 下的

RW 後面的資料更改

如我想把原來的350G 改小為 100G,就是100 X 1024 X 1024 X (1024/512) = 209715200

儲存即可

再 :wq 儲存
這時看到虛擬機器硬碟還是350G

12) 再取消註冊些虛擬機器,再重新註冊虛擬機器即可

再新建或註冊虛擬機器,選擇現有虛擬機器,找到對應目錄下的win.vmx

 

再檢查虛擬機器硬碟,變成100G了


13) 最後再檢查 win10.vmx檔案
vi win10.vmx
看看裡面是否對應的是 win10.vmdk ,如果路徑是對的。就可開啟虛擬機器電源了

14) 開啟虛擬機器電源, 進入虛擬機器系統檢視 計算機管理 磁碟管理

發現 C盤 本身分配是是81G,100G-81G=18.36G 還有18.36G 未分配,是正確的

當然也可將win10.vmdk 中的 rw後面數字 真正縮小為81G 多。(但一定要大於C盤實際分配的大小 )

15) 使用一段時間後,如果確定沒有問題後,可以刪除 舊的vmdk 2個檔案。

4、如果是Linux虛擬機器,則空間置零方法稍有不同:

1)將虛擬機器內所有未使用的空間歸零:

dd if=/dev/zero bs=1048576 of=/zero ; sync ; rm /zero

2)對其他安裝點,交換分割槽等執行相同的操作。

3)關閉虛擬機器。

4)SSH到ESXi,然後發出以下命令:

vmkfstools -K /vmfs/volumes/volumename/vmname/vmname.vmdk

這將需要一些時間... vmkfstools在VMDK內部“打孔”,例如,釋放所有填充有零的塊,從而有效地縮小了VMDK。

 

五、使用Vmware vCenter Converter 工具進行萬能轉換(轉換及壓縮磁碟)

如果發現上面方法不方便或太複雜或轉換後的磁碟檔案 win10-flat.vmdk 顯示的檔案大小還是不變,可以使用

Vmware vCenter Converter 工具(從官網下載 安裝 6.2.0版本)選擇獨立安裝

選擇源虛擬機器後點下一步會等待比較久的時間,工具需要從源機器提取相應的資訊。一般要3-10多分鐘,根據虛擬機器的磁碟大小而有所不同。

選擇目標還是相同的Esxi 伺服器,但可以選擇不同的資料儲存,登入伺服器時會提示ssl驗證,選擇igore忽略即可。

在option中 記得設定 為 thin 精簡置備 及新的資料儲存

如果要改變目標磁碟的大小 ,可以這樣來設定

可保留原大小 ,最小,手工輸入按GB,手工輸入按MB。我選擇最小尺寸即可。但要留意目標資料儲存有足夠容納的空間。

有可能會提示 目標不支援 3個socket, 要修改目標 為1個socket ,才能繼續轉換

然後就是真正的轉換過程,大約需要 一個多小時,耐心等轉換即可

但發現實際轉換時間遠超過預估時間,結果差不多花了3個小時才完成。一般是20G左右轉換需要一個小時,100G 可能需要2-3小時。具體要看你電腦的效能而定。

轉換後,檔案縮小到100G左右了

所以,最終還是發現使用 Vmware vCenter Converter 工具比較靠譜,缺點就是需要額外的資料儲存空間以及等等的時間。Convert適用於P2V、V2V (物理機轉虛擬機器 虛擬機器轉虛擬機器 均非常方便,缺點就是轉換時間比較久),和是否有vCenter無關的 。

六、使用VMware vCenter Server管理層遷移(Migrate)或者複製VM到另外一個datastore

VMware ESXi、VMware vCenter Server 和 vSphere Client,它們分別是 vSphere 的虛擬化層、管理層和介面層。作為介面層的vSphere Client客戶端並不提供克隆虛擬機器的功能,需要安裝VMware vCenter Server管理層,ESXi才有這一功能。(評估版是不帶這個功能的)

前面置零的步驟一樣,只是使用VMware vCenter Server管理層遷移(Migrate)或者複製VM到另外一個datastore。 VMDK 被移動之後,它的size就變小了,自動去除多餘的空間。

七、使用ghost或其它方法進行硬碟克隆,就是使用虛擬機器克隆裡面系統的方法

Ghost ABR SSR等工具均可實現備份還原,將來有時間將來再折騰一下。

AcronisBackupAdvanced 我自己使用還挺順手的。支援多核及速度比較快。

八、網友們其它方法

有些網友說使用 vmkfstools -K 壓縮後 flat檔案顯示大小 不縮小(實際佔用縮小了)
可用 通過vmkfstools先轉換成厚置備模式,然後在轉換精簡置備模式即可
或 先遷移到另外一個碟符,模式更改成厚置備模式 ,然後再遷移回來,模式改為精簡置備模式

命令格式:

精簡置備轉換至厚置備置零:

vmkfstools --inflatedisk /vmfs/volumes/DatastoreName/VMName/VMName.vmdk

厚置備延遲置零轉換至精簡備置:

vmkfstools --thin /vmfs/volumes/DatastoreName/VMName/VMName.vmdk

還有這個網友的方法也不錯:VMware虛擬機器,從厚置備改成精簡置備,並減小硬碟的實際佔用空間 - saszhuqing - 部落格園

關於使用 vmkfstools -K 壓縮精簡置備後 du -ah 顯示縮小,而ls -l 檔案大小不變,是否可同時調整 vmdk檔案中的 RW 與 ddb.geometry.cylinders 2個值後來來嘗試下
# Extent description
RW 38677202 VMFS "VM-Test-A-flat.vmdk"

# The Disk Data Base

#DDB

ddb.adapterType = "lsilogic"

ddb.geometry.cylinders = "48912"

九、相關知識點

以下內容摘自 csdn博主 endzhi 的文章 :原文地址

虛擬磁碟型別轉換 vmkfstools實戰

移除置零的塊,轉換至精簡備置:

命令 vmkfstools -K A.vmdk

使用 vmkfstools -K 將精簡、zeroedthick 或 eagerzeroedthick 虛擬磁碟轉換成移除了置零塊的精簡磁碟,解除分配所有置零的塊,並僅保留含有效資料的塊,得到虛擬磁碟為精簡格式,也達到了收縮VMDK容量作用。

精簡置備轉換至厚置備置零:

命令 vmkfstools --inflatedisk A.vmdk

--inflatedisk 可將磁碟未置零部分都置零。vmdk檔案容量將達到分配空間最大值。

厚置備延遲置零轉換至厚置備置零:

命令 vmkfstools --eagerzero A.vmdk

虛擬磁碟改名

命令 vmkfstools -E A.vmdk B.vmdk (別對受快照磁碟操作)

刪除虛擬磁碟

命令 vmkfstools -U C.vmdk

建立虛擬磁碟

命令 vmkfstools -c 8G E.vmdk (預設厚置備延遲置零格式)

命令 vmkfstools -c 8G -d thin Athin.vmdk (容量單位mkg不分大少寫;-d 可選zeroedthick|eagerzeroedthick|thin)

初始化虛擬磁碟

命令 vmkfstools -w A.vmdk

(寫入零資料以將其虛擬機器磁碟清空,達到初始化磁碟,磁碟分割槽也會被刪除,完畢後,磁碟型別為厚置備置零)

擴充套件虛擬磁碟vmdk

命令 vmkfstools -X 88g D.vmdk (切勿對受快照的磁碟操作,會直接損壞磁碟) 只能往大調。

克隆vmdk磁碟

命令 Vmkfstools -i A.vmdk -d thin A_new.vmdk

(注意-d thin關鍵引數,如原磁碟為thick不加就克隆出原thick磁碟模式,當原是thin不加就克隆出zeroedthick)

成功的克隆出A_new.vmdk 和 A_new-flat.vmdk兩個檔案,是直接可用的磁碟了。

克隆方式從厚置備轉換為精簡置備:

如需要使用A_new.vmdk 這個thin盤代替原來就以下操作:

# cat VMName-new.vmdk

可以看到 # Extent description 中是指向A_new-flat.vmdk

先將原兩檔案A.vmdk和A-flat.vmdk 備份到別的地方,

# mkdir oldvmdk

# mv A.vmdk ./oldvmdk

# mv A-flat.vmdk ./oldvmdk

將這新的A_new.vmdk 和 A_new-flat.vmdk兩個檔案改為舊的名字,並修改Extent description內容,開機測試。

注意:

轉換了磁碟型別或擴充套件了磁碟容量,清單並不會自動重新整理,需將該磁碟暫時從清單中移除,再次新增。

在虛擬機器系統除了dd 、SDelete還有哪裡操作可以將vmdk置零

1. 分割槽助手的“擦除磁碟/分割槽/資料”功能也是填0操作(只能對整個分割槽操作,並該分割槽是已經刪除分割槽的)。

2. DiskGenius “清除扇區資料”除了預設填0操作,還可自定義,如填FF(十六進位制),vmkfstools -K清理空間就無效了,只好再次填0再清。

3. window磁碟管理中,先將磁碟轉換為動態磁碟,並組建軟riad。

ESXI 在SSH中磁碟操作的一些結果

移動mv

當磁碟是Thin型別,使用mv 在同一個儲存移動位置,不會改變磁碟型別。

# vmkfstools -c 1G -d thin 1thin.vmdk

# mv 1thin.vmdk /vmfs/volumes/480GB-SSD/

# mv 1thin-flat.vmdk /vmfs/volumes/480GB-SSD/

# du -ah /vmfs/volumes/480GB-SSD/1thin-flat.vmdk

0 /vmfs/volumes/480GB-SSD/1thin-flat.vmdk

但mv移動至其他儲存會改變為厚置備置零。

mv /vmfs/volumes/480GB-SSD/1thin-flat.vmdk /vmfs/volumes/2T-HDD/

mv /vmfs/volumes/480GB-SSD/1thin.vmdk /vmfs/volumes/2T-HDD/

du -ah /vmfs/volumes/2T-HDD/1thin-flat.vmdk

1.0G /vmfs/volumes/2T-HDD/1thin-flat.vmdk

複製cp

vmkfstools -c 1G -d thin 1thin.vmdk

cp 1thin.vmdk ../

cp 1thin-flat.vmdk ../

du -ah ../1thin-flat.vmdk

1G ../1thin-flat.vmdk

得出: cp 是會將thin轉換為 厚置備置零

ESXI 在資料儲存瀏覽器中磁碟操作的一些結果

複製/剪下/移至 thin的vmdk,同/不同一個儲存都不會改變磁碟型別。

從資料儲存瀏覽器下載thin的分配了1GB的vmdk,但需要真實的下載1GB到本地.

十、其它技巧

1、 vmkfstools -K並不能對快照vmdk檔案如 Win10-000002.vmdk清零操作,需考慮將快照移除再操作。
2、 遷移壓縮其它方法: vmkfstools -i克隆、OVF方式、直接複製vmdk檔案、直接“移至”、 Trueimage partion 分割槽助手,DiskGenius克隆分割槽, host等。

3、群暉裡的刪除檔案,空間也不會釋放,也需要使用儲存管理器裡的 碎片處理 來釋放空間

 

如果覺得不錯,請幫忙 點贊 收藏 及關注我 

@小辣椒高效Office

 

 

 

編輯於 2022-01-17 22:36 esxi 虛擬化 虛擬機器

文章被以下專欄收錄

雲端計算 雲端計算 雲端 雲伺服器 雲開發