详情

拯救被WSL占满的C盘

发布时间:2024.05.11

适用场景

1、使用Windows 10做为开发平台,并且C盘空间不是特别富裕。

2、使用Windows自带的Windows Subsystem for Linux(WSL)默认将Liunx子系统安装在了C盘。

3、因为在Linux中下载安装各种软件、Docker Image,运行多个Docker Container 导致C盘空间严重不足。

将WSL从系统盘移到其他盘

这里我们使用 Move WSL 这个工具。

1、首先下载 Move WSL 工具包,并解压。

2、管理员身份运行Windows PowerShell。

3、在PowerShell中运行如下命令,停止正在运行的Linux子系统。

> wsl --shutdown

4、在PowerShell中进入刚刚解压的目录,运行

> cd d:\move-wsl-master
D:\move-wsl-master> .\move-wsl.ps1

此时会出现如下提示,让我们选择要移动的目标

可以选择要移动的目标,比如移动Ubuntu-18.04,则输入 1 并回车,然后会提示让我们输入移动的目标路径

这里输入目标路径如 D:\WSL 然后回车,便会执行移动。根据移动目标的大小,时间可长可短,请耐心等待。

移动过程中,可以看到脚本会先将移动目标导出到一个tar文件,然后再将tar文件导入到 ext4.vhdx 文件中。

移动完成后,脚本会删掉原来C盘中的相应内容,释放C盘空间。下面可以运行命令重新启动Linux子系统

> wsl

回收Docker环境中的空间

Docker用久了会残留很多无用的Image。这些Image文件少则几十上百兆,多则几个G,给本就捉襟见肘的磁盘空间造成巨大浪费, 这时可以删掉不需要的Image文件。但你可能愕然发现,即使删掉了好几个Image,磁盘依然没有苗条下来。

这是因为ext4.vhdx磁盘空间会根据加载的数据自动增长,但是无法自动回收。下面是手动回收的步骤。

1、仍然是现在Windows PowerShell中停止正在运行的Linux子系统。

> wsl --shutdown

2、运行diskpart释放空间

# open window Diskpart
> diskpart
# 选择虚拟机文件执行瘦身
> select vdisk file="D:\WSL\docker-desktop-data\ext4.vhdx"
> attach vdisk readonly
> compact vdisk
> detach vdisk
> exit