[请益] 缩小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