WSL No space left on device 磁盘满完整解决方案

11次阅读
没有评论

报错含义: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
  1. 输入 print 查看分区
  2. 输入 resizepart,输入分区号(一般 1)
  3. 结尾输入 100% 占用全部扩容空间
  4. 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

五、常见踩坑

  1. expand vdisk 报错文件占用:确认 wsl --shutdown 完全关闭
  2. resize2fs 报错:先使用 parted 扩展分区
  3. 扩容后 df 不显示新增空间:必须执行 resize2fs
  4. 动态磁盘只会占用实际文件大小,不会一次性占满设定容量
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码