WSL (ext4.vhdx文件)占用空间过大,清理方式记录,同时更改 WSL 保存位置

一、问题

        之前使用 WSL Ubuntu 进行过开发板的 Yocto 项目编译,占用空间达到了 70GB 多的空间。后来进行了项目迁移,删除了 WSL 中的所有文件,但是从 Windows 查看空间占用却没有减少:

占用依然是 70 多,查阅发现 vhdx 文件不会自动收缩,其大小会根据历史使用量增长。

二、解决方案

方案一

        目前常见的方法是使用 diskpart 工具进行,它会重新计算实际有效数据的大小,并尝试释放未使用的空间,但具体效果取决于文件系统的空闲块是否被“清零”。

        在 PowerShell 中输入命令:

(1)关闭 WSL

wsl --shutdown

(2)打开 diskpart

diskpart

(3)找到对应的 vhdx 文件,依次执行

select vdisk file="C:\Users\<用户名>\AppData\Local\Packages\<DistroPackage>\LocalState\ext4.vhdx"
attach vdisk readonly  # 只读模式挂载
compact vdisk          # 压缩操作
detach vdisk
exit

        compact vdisk 会扫描虚拟磁盘,仅保留实际存储数据的区块,但前提是未使用的空间必须被显式填充为零(例如通过 dd if=/dev/zero)。如果删除文件后未清零,这些空间可能仍被视为“已占用”。

方案二(彻底)

        WSL export 通常用于更改 WSL 的安装目录或打包到其他电脑中使用。使用 WSL export 命令可以重新计算实际文件内容的大小并导出,而不是直接复制 vhdx 的原始大小。

(1)删除 /tmp 文件夹内的临时文件,我的大概删了 20 个 G

sudo rm -rf /tmp/*

 (2)关闭 WSL

wsl --shutdown

(3)在创建时可能会修改名字,查看已安装的 WSL

 wsl -l -v

显示:

(4)根据这个名字,导出为 tar 包:

wsl --export Ubuntu ./ubuntu.tar

我这里是放在了当前目录,建议放在磁盘的根目录,导出时方便些,我这里是 E 盘的根目录。

(5)删除当前的系统

wsl --unregister Ubuntu

此时可以看到,vhdx 文件已经删除了,剩下的文件如果需要更改安装目录,可以全部删除。

(6)导入到新的文件夹

wsl --import Ubuntu-22.04 F:\wsl_ubuntu22.04\ E:\ubuntu.tar --version 2

这里 Ubuntu-22.04 是新的系统名称,可以自行设置;F:\wsl_ubuntu22.04\ 是导入目录,就是要保存的目标文件夹;E:\ubuntu.tar 是导出的 tar 包;--version 2 设置 WSL 的版本。

(7)删除导出的 tar 包,查看导出结果

wsl -l

导出后的大小只有 3G:

(8)启动系统

        启动后默认会以 ROOT 用户登录,可以先查看原始用户是否存在:

ls /home

如果存在,则新建 /etc/wsl.conf 文件:

vi /etc/wsl.conf

写入:

[user]
default = xxx

这里填入自己的用户,然后重启 WSL:

wsl --shutdown

如果没有用户,那就新建一个,并且使用上面的方式设置默认登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plmm烟酒僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值