VHDX是什么,你为什么会有一块
VHDX是Windows的虚拟磁盘格式——VHD的继任者,上限64 TB,还抗断电——里面住着一整套文件系统,Windows会像真硬盘一样把它挂载。你多半不是有意创建的:WSL2把每个Linux发行版装在一个ext4.vhdx里,Docker Desktop把镜像堆在它们上面,Dev Drive本身就是一块挂载的VHDX,Hyper-V虚拟机和一些备份工具还会各自添砖加瓦。在磁盘上搜搜*.vhdx,大概率不止一个。
- WSL2发行版:%LOCALAPPDATA%\Packages\...\LocalState里的ext4.vhdx —— Linux里的df看不见它
- Docker Desktop:它的WSL数据盘随每次拉取镜像和容器层增长
- Dev Drive:本该在那里的一块挂载VHDX —— 下结论前先看实际用量
- Hyper-V虚拟机:在默认Hyper-V文件夹或你创建VM的位置
- 镜像工具留下的备份和“救援”镜像 —— C:\根目录下40 GB的惊吓
增长问题:只扩不缩
动态VHDX在写入数据时变大,删除数据时却不变小:空间在客户机文件系统里标记为空闲,宿主机上的文件却停在最高水位。一个你拉过容器、编过内核、又全部删光的WSL2发行版,仍可能抱着一个60 GB的ext4.vhdx,而实际数据只有12 GB——Linux说它空,Windows说它大,两边都对。这不是泄漏,是设计本身;也就是说,不压实文件本身,任何“在WSL里清理”都不会还给C:一个字节。
如何安全收回空间
WSL2:先执行wsl --shutdown,然后在较新的版本上用wsl --manage <distro> --set-sparse true,或者走导出/导入流程——导出成.tar、注销、再导入,新vhdx就贴合真实数据大小。Docker Desktop要先在Docker里清理镜像和卷,再压缩它的数据盘,否则下周还得压缩同一个文件。Hyper-V虚拟机在关机状态下用Hyper-V管理器(或Optimize-VHD -Path <file> -Mode Full)压缩;Dev Drive只需要一次现实核查:挂载它,看实际用量,有计划再调整大小。还有唯一要紧的规矩:绝不删除无法确认身份的.vhdx——如果还有你在用的VM或发行版指着它,你刚才删掉的就是它整块硬盘。
常见问题与解答
删除VHDX文件安全吗?
只有在你知道它归谁管的时候。孤立的备份镜像或已卸载WSL发行版的遗留磁盘可以删;删掉在用VM或Docker的VHDX会连宿主机上的数据一起毁掉。
我的WSL2虚拟磁盘为什么这么大?
动态VHDX按需增长,但从不自动收缩——在Linux里删文件不会把空间还给Windows。用wsl --manage --set-sparse压缩,或对发行版做导出/导入。
继续阅读
联系我们: [email protected]