现象
执行 df -h 看到:
plaintext
tmpfs 3.9G 3.9G 0 100% /tmp
原理说明
/tmp 在 WSL2 中是 tmpfs 内存虚拟磁盘,空间从物理内存划分,默认分配约主机内存一半,不占用 ext4.vhdx 虚拟硬盘,但写满后同样抛出 No space left on device。
常见占用来源:
- Docker build 构建临时缓存、编译临时文件
- 程序日志、解压包、缓存文件堆积在 /tmp
- 持续打包、前端编译、大文件解压
一、临时快速清空(立刻释放空间)
bash
运行
# 清空/tmp下所有文件,不会删目录
sudo rm -rf /tmp/*
# 验证
df -h /tmp
二、根治方案 1:扩大 tmpfs /tmp 容量
编辑 WSL 挂载配置,永久扩容 /tmp
- 创建 / 修改
/etc/fstab
bash
运行
sudo nano /etc/fstab
- 末尾添加一行(按需调整大小,示例 8G)
plaintext
tmpfs /tmp tmpfs defaults,size=8G 0 0
- 生效配置(不用重启 WSL)
bash
运行
sudo mount -o remount /tmp
三、根治方案 2:修改程序临时目录,避开 /tmp
Docker 构建超大镜像时报 /tmp 满
修改 Docker 配置使用硬盘目录而非内存 tmp:
bash
运行
# 创建持久化缓存目录
mkdir -p ~/docker_tmp
# 修改docker daemon配置
sudo nano /etc/docker/daemon.json
写入内容:
json
{
"data-root": "/var/lib/docker",
"tmpdir": "/home/$USER/docker_tmp"
}
重启 Docker:
bash
运行
sudo service docker restart
Node / 前端编译(npm/yarn/pnpm)
bash
运行
# 写入环境变量,永久生效
echo 'export TMPDIR=$HOME/.tmp' >> ~/.bashrc
mkdir -p ~/.tmp
source ~/.bashrc
四、排查是什么文件占满 /tmp
bash
运行
# 查看/tmp下占用最大文件
sudo du -sh /tmp/* | sort -hr
五、补充到博文的总结区分三种爆满场景
- ext4.vhdx 100%:WSL 系统盘满 → 扩容 vhdx / 迁移磁盘
- /dev/loop0 100%:Docker CLI 工具只读 loop 设备满 → 重新挂载或重启 Docker
- tmpfs /tmp 100%:内存临时盘写满 → 清理 /tmp、扩容 tmpfs、修改程序临时目录
正文完
可以使用微信扫码关注公众号(ID:xzluomor)