[請益] 縮小Hyper-V的VHD動態磁碟大小?

作者: JohnsonWang (強森王)   2017-11-08 11:26:50
目標:想要縮小 Hyper-V 裡面使用動態擴展的 VHD 在實體硬碟中的大小
觀念:縮小 VHD 檔的底線就是 VHD 檔內最後有記載資料的位置,譬如一顆標示容量有
120GB的 VHD 檔,裡面記載有資料的位置到 80GB 處,就只能重新壓縮成一個實體
佔用 80GB 的 VHD 檔,但裡面也許實際有資料的部分只有 30GB。
討論:上述「觀念」中提到的狀態,若能將記載於 80GB 處的資料移動到 30GB 附近,就
可以再壓縮這個 VHD 檔的大小到 30GB,而不用真的在實體硬碟中佔用到 80GB。
使用各類 disk defragment 的工具,都可能在過程中因為臨時使用到後方的硬碟
空間,造成 VHD 檔變得更加肥大而無法復原。
我試過 Windows 內建的磁碟整理工具,也下載過 UltraDefrag、Defraggler等重
組工具,都無法把存在硬碟後方的資料主動往前面移。這類軟體的目標似乎僅是將
同一檔案在硬碟中置放成連續空間,但並不在乎這個檔案放在硬碟何處,只要沒有
fragment 狀態就好。就 defragment 這個動作來說,這些軟體都做到了沒錯,而
且這樣也比較省時間,但是對於想要縮小 VHD 檔這個目標來說,就造成障礙。
我試過在 guest 裡面進行 defragment,也試過將 guest 關機後,將此 VHD 檔掛
在 host 上然後 defragment,都沒有明顯改善。
所以想請問大家,有沒有哪一個 disk defragment 類的軟體,可以做到盡量把資
料往硬碟前方堆放的目標?這樣再來縮小 VHD 檔就變得很可觀的?或是說在我用
過的這些 defragment 軟體中,其實有某些選項勾起來就是這個效果的?
自問自答:
感謝朋友Dino9021的提供,不用搞這麼複雜,在有 Hyper-V 管理工具的機器上,guest
OS 關機的情況下,執行:
mount-vhd -path xxx.vhd -readonly
optimize-vhd -path xxx.vhd -mode full
dismount-vhd -path xxx.vhd
optimize-vhd -path xxx.vhd -mode full
我對不同的 VHD 做過以上指令,發現有的 VHD 在第一次 optimieze 時就已經大幅度
縮小,第二次 optimize 時沒有變化;有的是第一次大幅度縮小,第二次還可以再縮小
一點。
如果不先 mount 起來做一次,直接就 optimize 則好像沒有明顯效果。
作者: littleyg   2017-11-08 11:44:00
是否有嘗試過Hyper-V管理員的編輯磁碟來壓縮VHD?
作者: JohnsonWang (強森王)   2017-11-08 11:48:00
1F你講的這個就是我最後能不能縮小VHD實體空間的動作這是最後一步,否則這個Hyper-V壓縮VHD磁碟的功能幾乎會沒有任何效果的。因此要先defragment不管在guest或host執行defragment,都不會縮小VHD佔用的實體空間,相反的還會因為做defragment而快速增肥VHD檔。要能縮減VHD檔的空間就是最後要靠Hyper-V的磁碟編輯功能來縮減,但是能縮多少就是我這篇在討論的關鍵處
作者: blackhippo (PH6.0 微.酸民)   2017-11-08 15:30:00
縮硬碟一般來講不是不建議做嗎?
作者: JohnsonWang (強森王)   2017-11-08 15:36:00
不建議的原因就是因為動態VHD會大幅度增肥我已經補上自問自答,那四個指令做完很有用,真的縮到這個VHD裡面實際佔用的容量大小,要用Powershell來執行,也不用管defragment了。
作者: JerryBoy (找尋目標)   2017-11-08 23:01:00
如果知道Thin vDisk的設計方式,就會知道為什麼defrag反而會讓vDisk佔用空間愈來愈大
作者: JohnsonWang (強森王)   2017-11-09 17:55:00
我本來就知道原因,這一篇也不是討論為什麼會變大
作者: ayttk   2017-11-11 11:38:00
sdelete -z 看看?

Links booklink

Contact Us: admin [ a t ] ucptt.com