WSL出现「No space left on device」错误但硬盘空间充足,如何解决?
WSL提示「No space left on device」但本地硬盘有空间的解决办法
先确认问题根源
WSL默认使用独立的虚拟磁盘(.vhdx文件),和本地硬盘空间是分开的。先排查是不是虚拟磁盘本身满了:
- 在WSL终端执行
df -h,查看根目录(/)的使用情况,确认是否真的磁盘占满。 - 也可以在Windows文件管理器输入
\\wsl$\<你的发行版名称>,直观查看WSL文件系统的占用情况。
解决办法
1. 扩展WSL虚拟磁盘大小
如果虚拟磁盘确实满了,直接扩容:
- 先关闭WSL:在Windows PowerShell/CMD执行
wsl --shutdown - 找到虚拟磁盘文件,默认路径是
C:\Users\<你的Windows用户名>\AppData\Local\Packages\<发行版包名>\LocalState\ext4.vhdx,比如Ubuntu的包名类似CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc - 用diskpart扩容:
- 打开CMD,输入
diskpart - 执行
select vdisk file="你的vhdx文件完整路径" - 执行
expand vdisk maximum=<新容量,单位MB,比如102400代表100GB> - 输入
exit退出diskpart
- 打开CMD,输入
- 回到WSL终端,扩展文件系统:执行
sudo resize2fs /dev/sda(如果根分区不是/dev/sda,用df -h查看根分区对应的设备名,比如/dev/sda1)
2. 清理WSL内的无用文件
如果虚拟磁盘还有空间但报错,可能是垃圾文件占了空间:
- 清理包管理缓存:
- Ubuntu/Debian:
sudo apt autoremove && sudo apt clean && sudo apt autoclean - CentOS/RHEL:
sudo dnf clean all && sudo dnf autoremove
- Ubuntu/Debian:
- 定位大文件:用
du -h --max-depth=1 /找出占用空间大的目录,比如/var/log/(日志文件)、下载目录、Docker镜像(如果用了容器),针对性删除。 - 清理swap文件:如果启用了swap,检查
/swapfile,不需要的话可以删除,并注释/etc/fstab里的swap配置。
3. 修复损坏的虚拟磁盘
虚拟磁盘损坏可能导致空间显示异常:
- 关闭WSL:
wsl --shutdown - 用diskpart修复:
- 打开CMD,输入
diskpart - 执行
select vdisk file="你的vhdx文件路径" - 执行
attach vdisk readonly - 执行
repair vdisk - 执行
detach vdisk
- 打开CMD,输入
- 重启WSL,再用
df -h检查空间。
4. 迁移WSL到更大的磁盘
如果C盘本身空间紧张,把WSL迁移到其他磁盘:
- 关闭WSL:
wsl --shutdown - 导出发行版备份:
wsl --export Ubuntu D:\wsl_backup\ubuntu.tar(替换Ubuntu为你的发行版名称,路径自定义) - 注销当前发行版:
wsl --unregister Ubuntu - 导入到新位置:
wsl --import Ubuntu D:\wsl\Ubuntu D:\wsl_backup\ubuntu.tar --version 2 - 设置默认用户:
ubuntu config --default-user <你的WSL用户名>(不同发行版命令不同,比如Debian用debian config --default-user <用户名>)
内容的提问来源于stack exchange,提问作者James Shapiro
相关产品推荐
相关产品推荐

