docker清理镜像后,虚拟硬盘文件(ext4.vhdx)依旧很大的解决办法
问题: 为什么以及清理了镜像,这个ext4.vhdx还是那么大?


原因: 因为 WSL 2 的虚拟硬盘文件(ext4.vhdx)具有“只增不减”的特性。
动态扩展机制:
ext4.vhdx 是 WSL 2 用来模拟 Linux 硬盘的文件。它采用了动态分配策略:当你在 Linux 内部写入数据时,这个文件会自动变大以容纳新数据;但是,当你在 Linux 内部删除数据时,Windows 文件系统并不知道这些空间已经空闲,因此 不会自动缩小 这个 .vhdx 文件。
Docker 的操作特性:
当你运行 docker system prune 或类似命令时,你只是在 Linux 的文件系统层面上标记了那些块为“已删除”。对于 Windows 宿主机来说,那个巨大的 .vhdx 文件依然占据着磁盘上的物理扇区,因为它不知道里面其实有很多空白区域。
如何真正释放空间(压缩 ext4.vhdx):
手动执行“压缩”操作,告诉 Windows 回收那些未使用的空间:
解决办法, 手动压缩:
第一步:彻底关闭 WSL
在进行任何磁盘操作前,必须确保 WSL 实例已完全停止。打开 PowerShell 或 CMD,输入:
wsl --shutdown
等待几秒钟,确保所有 WSL 进程都已结束。
第二步:使用 diskpart 工具压缩
Windows 自带了一个强大的磁盘管理工具 diskpart,可以用来压缩 VHDX 文件。
以 管理员身份 打开 PowerShell 或 CMD。
输入 diskpart并回车进入交互模式。
依次输入以下命令(注意替换为你实际的文件路径):
select vdisk file="D:\WSL\Ubuntu\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
select vdisk ...: 选中你的虚拟硬盘文件。
attach vdisk readonly: 以只读模式挂载(为了安全)。
compact vdisk: 这是关键步骤,它会扫描文件中的零块并释放空间。
detach vdisk: 卸载虚拟硬盘。
这个过程可能需要几分钟到几十分钟,具体取决于你的文件大小和磁盘速度。完成后,你可以再次右键查看该文件的属性,你会发现“占用空间”已经显著减小了。


更多推荐

所有评论(0)