必须用diskpart将固定VHDX转为动态格式以释放空间:先detach vdisk,再convert dynamic(不可逆,原文件被覆盖),最后attach vdisk;转换后Type变为Dynamic,“占用空间”显著下降,未清零需在虚拟机内运行sdelete -z等工具预擦除。

当固定大小的VHDX文件长期使用后占用大量物理空间却实际利用率很低,需要将其转为动态扩展格式以释放未用空间、降低存储开销,此时必须借助diskpart命令行工具完成转换,图形界面磁盘管理不支持此操作。
确认当前VHDX类型与状态
打开命令提示符(管理员权限),输入 diskpart 进入交互环境。
执行 list vdisk 查看所有已知虚拟磁盘;若目标VHDX尚未加载,需先执行 select vdisk file="D:\data.vhdx"(路径替换为你的实际路径)→ detail vdisk。输出中若显示 Type: Fixed 且 State: Attached 或 Detached,说明是固定大小格式,可继续转换。
【必须确保该VHDX未被任何虚拟机运行或挂载】,否则diskpart会拒绝操作并报错“Access is denied”。
使用diskpart执行格式转换
在已进入diskpart且成功选中目标vdisk的前提下:
第一步:执行 detach vdisk —— 强制卸载,避免写入冲突。
第二步:执行 convert dynamic —— 此命令将固定大小VHDX重写为动态扩展格式,【该过程不可逆,且会删除原文件、生成新文件】,原始.vhdx将被覆盖(系统自动备份为.vhdx.backup,但仅保留一份,旧备份会被覆盖)。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
第三步:执行 attach vdisk —— 重新挂载转换后的动态VHDX,此时在磁盘管理中可见其“容量”不变,但“已使用空间”显著下降。
转换完成后,原20GB固定VHDX若仅存3GB数据,物理占用将从20GB降至约3.2GB左右(含元数据与簇对齐开销)。
验证转换结果与空间释放
方法一:回到diskpart → detail vdisk,确认输出中 Type: 已变为 Dynamic。
方法二:在资源管理器中右键查看该.vhdx文件属性,“大小”显示为逻辑容量(如20.0 GB),“占用空间”显示为实际磁盘占用(如3.15 GB),二者差异即为释放出的空间。
注意:若转换后“占用空间”未明显减少,说明虚拟机内存在大量已删除但未清零的数据——需在虚拟机内部运行 manage-bde -W(BitLocker清零)或第三方工具如 sdelete -z 预擦除未分配空间,再重新挂载→脱机→attach vdisk触发二次收缩。










