谁来救救被WSL占用的磁盘空间

3,810 阅读3分钟

聊聊背景

笔者是一名努力搬砖的程序猿,用的公司统一配置的机器 win10 + wsl2(ubuntu 20.04), 磁盘仅仅只有237G 。除去系统预装的必备工具,剩下的可支配磁盘空间非常紧张,于是经常面临需要清理磁盘空间的问题。win10本身有各种工具协助,这里就不废话啦~,今天重点聊聊怎么清理wsl2中越占越多的空间。

找找WSL中占用磁盘空间大的罪魁祸首

以笔者的情况来说,我的wsl中只有一些必备的开发环境,项目源代码 和 docker。前两者显然没啥可操作的空间,所以只有一个靶子 —— docker。

首先,我们可以进入wsl,通过以下命令,看看 Docker 的磁盘使用情况和资源总量。

docker system df 

大家都知道,docker运行一段时间后,可能会产生一些无用的镜像文件。要清理无用的 Docker 镜像,则可以运行以下命令:

docker image prune 

该命令可以删除所有未被任何容器使用的镜像。执行完后咱们可以再运行第一个命令,查看磁盘使用情况,大概率能看到释放了一部分磁盘空间。如果确实长时间为清理过,很大可能可释放几十G。

然而这时候我们退出wsl回到win10, 你可能会看到磁盘空间几乎没啥变化。这是因为wsl还需要我们手动释放这部分空间,即压缩磁盘。

聊聊压缩WSL磁盘空间

1. 找到vhd文件位置

wsl使用虚拟硬盘(VHD)存储linux下的文件,要压缩磁盘空间,我们要做第一步就是先找到vhd文件位置:

注意,可能由于ubuntu版本不一致,倒数第二级目录名稍有不同。

2. 关闭WSL服务

其次,在正式进行压缩前,我们需要先停掉wsl服务。一般情况下打开PowerShell, 输入如下命令即可

wsl --shutdown

如果上述命令无法正常关闭,可以尝试windows搜索“服务”,打开后,找到“Hyper-V 主机计算服务”,先暂时停用

待服务停止后,重新进入PowerShell窗口,输入如下命令:

 wsl -l -v

可查看到wsl中ubuntu的运行状态,如下图(如果看到还是running状态,可尝试重新输入wsl --shutdown)

3. 压缩磁盘

wsl服务停止后,在PowerShell中输入命令:

diskpart

此时,系统会自动打开Diskpart窗口,依次执行如下命令

select vdisk file="C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

执行完后,我们再回到 windows 查看,就可以看到磁盘空间正常释放啦~~

后面就可以继续正常使用啦~

另:如果关闭了“Hyper-V 主机计算服务”服务,别忘了重新开启哦~

参考文献

  1. blog.csdn.net/mrteacher/a…
  2. www.bilibili.com/read/cv2171…
  3. 贾KG:释放wsl占用的对于硬盘空间