wsl磁盘占用只增不减怎么搞

比如wsl安装了podman,随着镜像越来越多,wsl虚拟机也越来越大,删除容器镜像都没用,因为系统给wsl分配的磁盘大小不会缩小,要手动压缩

第一步:准备工作

1. 保存当前工作

在开始前,确保保存所有重要文件,因为 WSL 关闭会终止所有正在运行的程序。

2. 查看当前 WSL 状态

 
wsl --list --verbose
 
 
确认你的 WSL 发行版名称(如 Ubuntu-22.04)。

第二步:停止 WSL

完全停止所有 WSL 实例

 
wsl --shutdown
 
 
验证是否已停止
 
wsl --list --verbose
 
 
应该显示所有发行版状态为 Stopped

第三步:清理 Podman 和系统空间

1. 重新启动 WSL 进行清理

 
# 启动默认发行版
wsl

# 在 WSL 中执行清理
 
 

2. 清理 Podman 空间

 
# 停止所有容器
sudo podman stop $(sudo podman ps -aq) 2>/dev/null || true

# 删除所有容器
sudo podman rm $(sudo podman ps -aq) 2>/dev/null || true

# 删除所有镜像
sudo podman rmi -f $(sudo podman images -aq) 2>/dev/null || true

# 彻底清理系统
sudo podman system prune -a -f --volumes
 
 

3. 清理系统缓存

 
# 清理包管理器缓存
sudo apt autoremove -y
sudo apt clean

# 清理日志文件
sudo journalctl --vacuum-time=1d

# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
 
 

4. 退出 WSL

 
exit
 
 

第四步:压缩 WSL 虚拟硬盘(关键步骤)

1. 再次确保 WSL 完全停止

 
wsl --shutdown
 
 

2. 查找 WSL 虚拟硬盘文件

 
# 查找 .vhdx 文件
Get-ChildItem "C:\Users\$env:USERNAME\AppData\Local\Packages" -Recurse -Include "*.vhdx" | Select-Object FullName,Length
 
 
通常路径类似:
C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx

3. 使用 diskpart 压缩虚拟硬盘

 
# 以管理员身份运行 PowerShell,然后执行:
diskpart
 
 
在 diskpart 提示符下依次执行:
 
# 选择虚拟硬盘文件(替换为你的实际路径)
select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx"

# 连接到虚拟硬盘
attach vdisk readonly

# 压缩虚拟硬盘
compact vdisk

# 断开连接
detach vdisk

# 退出 diskpart
exit
 
 

第五步:重启 WSL

1. 正常启动 WSL

 
# 启动默认发行版
wsl

# 或者启动特定发行版
wsl -d Ubuntu-22.04
 
 

2. 验证环境正常

在 WSL 中执行:
 
# 检查系统状态
df -h
podman --version
podman images
podman ps -a
 
 

3. 测试 Podman 功能

 
# 拉取测试镜像
podman pull hello-world

# 运行测试
podman run --rm hello-world
 
 

4. 退出 WSL

 
exit
 
 

第六步:在 PowerShell 中验证

回到 PowerShell,测试 Podman 别名是否正常:
 
podman --version
podman images
podman run --rm hello-world
 
 

完整的一键脚本(可选)

如果你需要频繁执行这些操作,可以创建 PowerShell 脚本:
 
# 保存为 Clean-Podman.ps1
Write-Host "正在停止 WSL..." -ForegroundColor Yellow
wsl --shutdown

Write-Host "正在清理 Podman 空间..." -ForegroundColor Yellow
wsl sudo podman system prune -a -f --volumes
wsl sudo apt autoremove -y
wsl sudo apt clean

Write-Host "正在压缩虚拟硬盘..." -ForegroundColor Yellow
# 需要手动执行 diskpart 部分

Write-Host "正在重启 WSL..." -ForegroundColor Green
wsl podman --version
wsl podman images

Write-Host "清理完成!" -ForegroundColor Green
 
 

常见问题解决

如果 WSL 无法启动:

 
# 重启 WSL 服务
wsl --shutdown
net stop LxssManager
net start LxssManager

# 或者重启计算机
Restart-Computer
 
 

如果 diskpart 压缩失败:

  • 确保 WSL 完全关闭:wsl --shutdown
  • 检查是否有其他程序占用了 WSL 文件
  • 尝试以管理员身份运行 PowerShell

验证磁盘空间变化

操作前后对比 C 盘空间:
 
# 查看 C 盘空间
Get-PSDrive C | Format-Table Name,Used,Free

# 查看 WSL 文件大小
Get-ChildItem "C:\Users\$env:USERNAME\AppData\Local\Packages" -Recurse -Include "*.vhdx" | Select-Object Name,@{Name="SizeGB";Expression={[math]::Round($_.Length/1GB,2)}}
 
 

总结

  1. 停止 WSLwsl --shutdown
  2. 清理空间:在 WSL 中执行清理命令
  3. 压缩磁盘:使用 diskpart压缩虚拟硬盘
  4. 重启验证wsl启动,测试功能正常
这样就能有效减少 C 盘占用并保持系统清洁。
posted @ 2026-02-10 17:58  天天大傻猫  Views(391)  Comments(0)    收藏  举报