縮減 Linux guest OS vmdk 大小
1 前情提要
前陣子因為需要協助客戶的雲端主機建立以 Rocky Linux 8 系統為底的虛擬平台,但不知為什麼客戶端的虛擬平台「無法」上傳 Rocky Linux 8 的安裝 ISO (用慣了 PVE 後,其它虛擬平台真的不是太想用呀),結果必需先使用 VMWare Workstation 建立一組 VM,再將其匯出成 ova 格式後提供給對方的工程師匯入平台中。
結果因為客戶的系統太舊,不支援 VM 上的 NVMe Device,結果要整個重做,後來又因為測試的過程中,把大量的測試檔案寫入 guest OS 的系統中,後續雖然把 Linux guest OS 的空間都清空了,但是在 Host 裡面的硬碟檔案(.vmdk)空間卻無法釋戶,造成當匯出成 ova 或是 ovf 檔案時,檔案異常的大,明明只用到 3 GB 的空間,但匯出的 ova 卻有 15 GB!所以在網路上找到作法後,直接將空間降為 4GB,變成合理的大小後才順利完成這個任務。
2 在 Linux Guest OS 系統進行空間釋出作業
在 Linux 的 Guest OS 系統中的做法其實很簡單,但是要抓一下竅門,網路上都只說在 console 下執行以下指令,把空間填滿後刪除,自然就會把沒用到的硬碟空間釋放出來了,指令如下:
方式 1:
$ sudo dd if=/dev/zero of=zero.dat ; rm -f zero.dat
方式 2(個人覺得比較簡單):
$ cat /dev/zero > zero.dat; rm -f zero.dat
視實際你的硬碟大小會決定執行的時間長短,但是,請特別注意,執行此指令的時候,務必確定在「每一個分割區」都執行一次,因為我第一次執行時,只降了約 300 MB 的空間,後來才發現我有某一個分割區高達 800GB,結果我預設是在 root 分割區執行,自然沒有釋放出最大的空間。
$ df
檔案系統 1K-區段 已用 可用 已用% 掛載點
devtmpfs 3951096 0 3951096 0% /dev
tmpfs 3968180 0 3968180 0% /dev/shm
tmpfs 3968180 9228 3958952 1% /run
tmpfs 3968180 0 3968180 0% /sys/fs/cgroup
/dev/sda2 102687672 4201836 93226572 5% /
/dev/sda3 102687672 71528 97356880 1% /var/log
/dev/sda1 841158408 476916 797883312 1% /data
tmpfs 793636 0 793636 0% /run/user/1000
所以,要去這 3 個分割區各執行一次上面的指令後,才會在每個分割區計算出,可以釋出的空間。完成之後請將 Linux guest OS 關機。
3 在 Host 執行 vmware-vdiskmanager -k 指令
最後在 Host 上(我的環境是 Windows 10),開啟 cmd 視窗,然後切換到 VMWare 的安裝目錄中,指令大概如下,每台電腦會有所不用:
c:\> cd "c:\Program Files (x86)\VMware\VMware Workstation"
然後執行以下指令壓縮 .vmdk 的空間。
> vmware-vdiskmanager -k 你的 .vmdk 路徑
Shrink: 100% done.
Shrink completed successfully.
當跑到 100% 時,即完成 .vmdk 的壓縮作業。
4 匯出 ova/ovf 檔案
最後,請在 VM 機器關機的狀態下,先選擇 VM 的名稱,再點選選單中的「File」->「Export to OVF」,並設定輸出的名稱及路徑(記得決定副檔名是 .ova 或是 .ovf)即完成匯出作業啦!
No Comments