C 盘空间 100G,如今只剩不到 15G,通过WinDirStat
软件查看,有个ext4.vhdx
占用了近 20G 空间
原因
此文件产生的原因是主机上安装了 WSL2,且安装了 docker,日积月累的,内部积压了特别多版本的镜像和容器
WSL2 本质上来说还是虚拟机,Windows 会创建 vhdx 后缀的磁盘镜像文件,作为存储,特点是支持自动扩容,但是一般不会自动缩容,如 VBox 创建虚拟机时的动态存储卷
由于 Docker 安装了 Kafka、Apollo、XXL-JOB、ETCD 等一堆还包含多个版本的系统组件,镜像和容器所占空间可观
其实都是本地验证测试之类的用途,使用时通过 docker-compose 创建,完成应该删除
解决方法
由于主要是 docker 占用的空间,故先清理 docker 的占用空间
也可以先确认什么目录的空间占用比较大
发现最大的就是 docker /var/lib/docker
其中 /var/lib/docker/volumes 也是相当大,原因是容器删除后,数据卷仍在磁盘中,需要清理(非手动挂载)
sudo du -h --exclude="mnt*" --exclude="proc*" -d 1 /
docker volume prune
docker system prune
docker images
docker rmi xxx
搜索找到 ext4.vhdx
文件,位置一般在 C:\Users\用户名\AppData\Local\Packages\应用名\LocalState\ext4.vhdx
DISKPART> HELP SELECT VDISK
按文件名选择指定的虚拟磁盘,并将焦点移动到该磁盘。
语法: SELECT VDISK FILE=<"filename"> [NOERR]
FILE=<"filename">
指定现有虚拟磁盘文件的完整路径
和文件名。
NOERR 仅用于脚本。遇到错误时,DiskPart
会继续处理命令,如同没有出现错误一样。
如果不使用 NOERR 参数,错误会导致 DiskPart 退出
并返回错误代码。
示例:
SELECT VDISK FILE="c:\test\test.vhd"
SELECT VDISK FILE="c:\test\test.vhdx" NOERR
wsl --shutdown
diskpart
DISKPART> select vdisk file="C:\Users\用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
DISKPART> compact vdisk
DISKPART> detach vdisk
完成后ext4.vhdx
文件体积不到 8 个 G 了,释放了十几个 G
当然,还可以在设置-> 系统 -> 存储 -> 更改新内容的保存位置
来设置新应用的存储移出 C 盘
不过 WSL 应该需要借助其它的工具来迁移,游戏一类的还是可以的,还可以尝试使用移动
来对已安装的应用迁移
此外还有其它命令,并未尝试
Optimize-VHD -Path <VHDX 文件路径> -Mode Full
补充
wsl 提供了系统的备份恢复功能,只需要两个命令即可,定期备份一下更安心
PS C:\WINDOWS\System32> wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu-18.04 (默认)
。。。
wsl --shutdown
wsl --export Ubuntu-18.04 d:\Ubuntu-18.04.tar
wsl --import Ubuntu-18.04 d:\Ubuntu-18.04.tar