报错含义:WSL 虚拟磁盘文件占用空间达到上限,系统无剩余空间。分两种场景处理:扩容虚拟磁盘、清理 WSL 内部垃圾、迁移 WSL 磁盘到其他盘
一、先在 WSL 内清理无用文件(临时缓解)
1. 清理 apt 缓存
bash
运行
sudo apt autoremove -y
sudo apt clean
sudo apt autoclean
2. 清理日志、缓存、docker 镜像(装了 Docker 才执行)
bash
运行
# 清理用户缓存
rm -rf ~/.cache/*
# 清理docker镜像容器
docker system prune -a
3. 查看磁盘占用定位大文件
bash
运行
# 查看整体占用
df -h
# 查找大文件
sudo du -sh /* 2>/dev/null | sort -hr
二、扩容 WSL 虚拟磁盘(根本解决,最常用)
WSL2 所有系统存在一个 .vhdx 虚拟磁盘文件,默认动态扩容但有上限,需要手动扩容量。
步骤 1:关闭 WSL
以管理员身份打开 PowerShell
powershell
# 关闭所有发行版
wsl --shutdown
# 查看WSL列表,确认发行版名(Ubuntu-22.04等)
wsl --list --verbose
步骤 2:定位虚拟磁盘文件路径
powershell
# 导出磁盘路径(替换Ubuntu-22.04为你的发行版)
(Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\*\BasePath | Where-Object {$_.DistributionName -eq "Ubuntu-22.04"}).BasePath
复制输出路径,一般类似:
C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_xxx\LocalState\ext4.vhdx
步骤 3:diskpart 扩容(示例扩到 60G,按需修改)
PowerShell 依次执行:
powershell
diskpart
进入 diskpart 交互窗口:
plaintext
# 替换为你的ext4.vhdx完整路径
select vdisk file="C:\Users\xxx\AppData\Local\Packages\...\ext4.vhdx"
# 扩容到60GB,单位MB,60*1024=61440
expand vdisk maximum=61440
exit
步骤 4:进入 WSL 分配新增空间
启动 WSL:
bash
运行
sudo parted /dev/sda
- 输入
print查看分区 - 输入
resizepart,输入分区号(一般 1) - 结尾输入
100%占用全部扩容空间 quit退出
最后扩展文件系统:
bash
运行
sudo resize2fs /dev/sda1
# 验证
df -h
三、WSL 磁盘迁移到其他盘(C 盘太小推荐)
C 盘空间不足,直接把 vhdx 移到 D/E 盘:
1. 导出备份
powershell
wsl --shutdown
# 导出Ubuntu到D盘备份
wsl --export Ubuntu-22.04 D:\wsl_backup\ubuntu.tar
# 注销原有C盘WSL(C盘vhdx会被删除,先备份!)
wsl --unregister Ubuntu-22.04
2. 导入到 D 盘自定义目录
powershell
# 第二个参数:存放vhdx目录;第三个:自定义磁盘大小MB
wsl --import Ubuntu-22.04 D:\WSL_Ubuntu D:\wsl_backup\ubuntu.tar --version 2
四、进阶:限制 Docker 占用 / 自动清理
1. Docker 自动裁剪镜像
bash
运行
# 每周自动清理无用镜像
echo "0 0 * * 0 docker system prune -f" | crontab -
2. WSL 缓存清理(Windows 侧)
PowerShell 清理 WSL 缓存文件:
powershell
wsl --shutdown
# 删除休眠缓存
Remove-Item $env:LOCALAPPDATA\Packages\*\LocalState\swap.vhdx -ErrorAction SilentlyContinue
五、常见踩坑
- expand vdisk 报错文件占用:确认
wsl --shutdown完全关闭 - resize2fs 报错:先使用 parted 扩展分区
- 扩容后 df 不显示新增空间:必须执行 resize2fs
- 动态磁盘只会占用实际文件大小,不会一次性占满设定容量
正文完
可以使用微信扫码关注公众号(ID:xzluomor)