WSL2 Ubuntu 占用 C 盘空间清理指南

背景说明

通过 Windows 商店安装的 Ubuntu(WSL2)会在 C 盘生成一个 .vhdx 虚拟磁盘文件。该文件只增不减,即使在 Ubuntu 内部删除了文件,C 盘空间也不会自动释放,必须手动压缩。


第一步:确认占用情况

在 PowerShell 中执行以下命令,查看 VHDX 文件的实际大小:

复制代码
Get-ChildItem "$env:LOCALAPPDATA\Packages" -Recurse -Filter "*.vhdx" | `
  Select-Object FullName, @{N="GB";E={[math]::Round($_.Length/1GB,2)}}

在 Ubuntu 中执行以下命令,查看内部实际使用量:

复制代码
df -h /

第二步:定位 Ubuntu 内部大文件

复制代码
# 查看各主要目录占用
du -sh /usr /home /var /opt /snap 2>/dev/null

# 查看个人目录下各文件夹占用
du -sh ~/* 2>/dev/null | sort -rh

第三步:清理 Ubuntu 内部空间

系统层面清理(无风险)

复制代码
# 清理 apt 缓存
sudo apt clean
sudo apt autoremove -y

# 清理系统日志
sudo journalctl --vacuum-size=50M
sudo rm -rf /var/log/*.gz /tmp/*

# 移除 snap(如不使用)
sudo apt purge snapd -y
sudo rm -rf /snap ~/snap

项目文件清理

对于不再需要的项目目录,可以逐个确认后删除:

复制代码
# 交互式逐一确认删除
for dir in ~/目录1 ~/目录2 ~/目录3; do
    echo "--- $dir ($(du -sh $dir 2>/dev/null | cut -f1)) ---"
    ls $dir
    read -p "删除这个目录? [y/N] " ans
    [[ "$ans" == "y" ]] && rm -rf "$dir" && echo "已删除" || echo "跳过"
done

第四步:压缩 VHDX(关键步骤)

不执行此步骤,前面的删除操作不会释放 C 盘空间。

1. 彻底关闭 WSL

复制代码
wsl --shutdown

等待 10 秒后确认 WSL 已停止:

复制代码
wsl --list --running
# 应显示:没有正在运行的分发

2. 执行磁盘压缩

复制代码
diskpart

进入 diskpart 后依次输入:

复制代码
select vdisk file="<VHDX文件完整路径>"
attach vdisk readonly
compact vdisk
detach vdisk
exit

VHDX 文件路径可通过第一步的命令查到。compact vdisk 需要几分钟,等待完成即可。


可选:迁移 Ubuntu 到其他磁盘(根本解决方案)

如果 C 盘空间长期紧张,建议直接将 Ubuntu 迁移到其他磁盘:

复制代码
# 导出
wsl --export <发行版名称> D:\ubuntu_backup.tar

# 注销 C 盘中的实例
wsl --unregister <发行版名称>

# 导入到目标磁盘
wsl --import <发行版名称> D:\WSL\Ubuntu D:\ubuntu_backup.tar --version 2

常见问题

问题 原因 解决方法
删除文件后 C 盘没变化 VHDX 不自动缩小 执行第四步压缩
重启电脑后空间没变化 重启不等于压缩 必须手动执行 compact vdisk
diskpart 报"另一个程序正在使用" WSL 未完全关闭 先执行 wsl --shutdown 再重试
du 命令卡住不动 扫描整个文件系统太慢 改为分目录逐个扫描
相关推荐
readhere10 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI11 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
‎ദ്ദിᵔ.˛.ᵔ₎12 小时前
关于Linux 线程局部存储的认识
linux·运维
小小de风呀13 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
lhbweilai15 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
晚风吹北巷15 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
艾络迅Acceleronix15 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
Zwawa16 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
by2099916 小时前
Linux 压缩传输、进程查看与权限管理
linux·经验分享·1024程序员节