縮小 Hyper-V 中 Ubuntu Linux 的虛擬硬碟 VHDX 占用的實體空間





因為歷史的包袱加上一時沒注意,被大量的圖檔和 MySQL 的 BINLOG 給塞爆了虛擬硬碟。清除問題後,雖然整個 Linux 只使用了 13GB 左右的空間,但還是在實體硬碟中佔用了 128GB。

從 Linux 系統內來看硬碟使用狀況,sda1 使用了 13GB:

root@UbuntuLinux:~# df -Bg
Filesystem     1G-blocks  Used Available Use% Mounted on
udev                 21G    0G       21G   0% /dev
tmpfs                 5G    1G        5G   1% /run
/dev/sda1           123G   13G      105G  11% /
tmpfs                21G    0G       21G   0% /dev/shm
tmpfs                 1G    0G        1G   0% /run/lock
tmpfs                21G    0G       21G   0% /sys/fs/cgroup

但占用的實際硬碟空間是這樣:

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2022/8/1  上午 11:13   134591021056 Ubuntu.vhdx
-a----       2022/8/1  上午 11:13          77824 Ubuntu.vhdx.mrt
-a----       2022/8/1  上午 11:13        9998336 Ubuntu.vhdx.rct

所以對實體 VHDX 檔的瘦身是有必要的了。

參考了各方文件加上親身使用後做出如下的筆記:

觀念:要減少 VHDX 虛擬硬碟檔內已經無用的空間,要先在 Linux 環境下把檔案系統給清乾淨,再到外面做虛擬硬碟檔的瘦身(compact / shrink / 壓縮)

第一種方法是 fstrim -a -v 但我發現瞬間做完,而且畫面上說只有釋放出 1.7GB 左右的空間,這表示沒啥用。

root@UbuntuLinux:~# fstrim -a -v
/: 1.7 GiB (1759866880 bytes) trimmed on /dev/sda1

第二種方法法用 dd 工具把檔案系統剩下的空間全部填上 0,但是請先評估自己系統內是否有什麼服務是會因為硬碟爆掉而不正常暫停且會有不良影響的。以我來說,我有網站 (Nginx) 和資料庫 (MySQL),我覺得這兩個服務在硬碟滿時還在運作是有不良影響的,所以我先把這兩個給停掉(以下我都是在 root 身分下做的,所以 sudo 那些事情就沒寫出來):

service nginx stop
service mysql stop

接著做:

dd if=/dev/zero of=~/zeroes 
sync
rm ~/zeroes

上述這個步驟看你整個虛擬硬碟剩下的空間有多少而定,但不會增加你實體硬碟的佔用量,以我 128G 虛擬硬碟還剩下 105G 的情況下,此動作大概耗費十幾分鐘。

接著把 Linux 虛擬機關機。

可以先嘗試用 Hyper-V 管理工具的磁碟->壓縮,但我做了完全沒效果:

Hyper-V compact Disk

如果你做了以後有明顯效果,那可以做到這邊就停,否則可以參考看看以下這個做法,因為對我有用:

在 Hyper-V 的主機下開 PowerShell,找到你虛擬硬碟的位置與檔名,然後:

Optimize-VHD (你的虛擬硬碟檔名).vhdx -Mode Full

做一陣子後我的 VHDX 檔從 128GB 左右縮小到 50GB,雖然不如預期只要占用虛擬硬碟內回報的 13GB,但這個縮小程度也還算是不錯,畢竟使用很多年,檔案系統的零碎狀況大概還是比較複雜一點。

做之後:

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2022/8/1  上午 11:49    51342475264 Ubuntu.vhdx
-a----       2022/8/1  上午 11:13          77824 Ubuntu.vhdx.mrt
-a----       2022/8/1  上午 11:49        9998336 Ubuntu.vhdx.rct
歷史上的今天...


You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

:D  :)  :(  :|  (H)  :P  :$    *-)  ;)  :-.-:  :!:  :S  :!!:  [B01]  [B02]  [B03]  [B04]  [B05]  [B06]  [B07]  [B08]  [B09]  [B10]  [B11]  [B12]  [B13]  [B14]  [XP]  :XD  (Y)  (N)  :-O  :@  8o|  :-#  (L)  (U)  ^o)  |-)