发布于  更新于 

WSL/Docker 虚拟硬盘瘦身指南(Windows)

Windows Subsystem for Linux(WSL) 为 Windows 用户提供了方便好用的 Linux 应用层接口,而 Docker 提供了良好的容器服务。这些系统的本质依旧是虚拟机,其硬盘使用 vhdx 镜像文件,支持自动扩容,但无法自动缩容,导致该文件会逐渐“吃胖”,让本就不大的硬盘雪上加霜。

这个文件一般储存在 ~/AppData/Local/Packages/XXX/LocalState/YYY.vhdx (WSL) 或 ~/AppData/Local/Docker/wsl/data/YYY.vhdx(使用 WSL 的 Docker)。

  • XXX 对应着你选择的 WSL 发行版
  • YYY 一般对应着该系统的文件系统,如 ext4

如下图所示。

瘦身方法

启动 Powershell,关闭 WSL:

1
wsl --shutdown

使用 Docker 则需关闭所有 container、退出 Docker Desktop。

进入 diskpart:

1
diskpart

在 diskpart 中选择该磁盘文件(其中路径应该替换为你的文件路径):

1
select vdisk file="[YOUR_VHDX_FILEPATH_HERE]"

然后执行硬盘缩容:

1
compact vdisk

FAQ

Service Error

当遇到如下报错:

1
2
3
Virtual Disk Service error:
The requested operation requires that the virtual disk be
attached read only.

则以 readonly 模式重新连接硬盘:

1
2
detach vdisk
attach vdisk readonly

然后执行硬盘缩容即可。