/tmp tmpfs 100% 占满完整解决方案(并入 WSL 存储博文专用段落)

9次阅读
没有评论

现象

执行 df -h 看到:

plaintext

tmpfs        3.9G  3.9G     0 100% /tmp

原理说明

/tmp 在 WSL2 中是 tmpfs 内存虚拟磁盘,空间从物理内存划分,默认分配约主机内存一半,不占用 ext4.vhdx 虚拟硬盘,但写满后同样抛出 No space left on device

常见占用来源:

  1. Docker build 构建临时缓存、编译临时文件
  2. 程序日志、解压包、缓存文件堆积在 /tmp
  3. 持续打包、前端编译、大文件解压

一、临时快速清空(立刻释放空间)

bash

运行

# 清空/tmp下所有文件,不会删目录
sudo rm -rf /tmp/*
# 验证
df -h /tmp

二、根治方案 1:扩大 tmpfs /tmp 容量

编辑 WSL 挂载配置,永久扩容 /tmp

  1. 创建 / 修改 /etc/fstab

bash

运行

sudo nano /etc/fstab
  1. 末尾添加一行(按需调整大小,示例 8G)

plaintext

tmpfs /tmp tmpfs defaults,size=8G 0 0
  1. 生效配置(不用重启 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

五、补充到博文的总结区分三种爆满场景

  1. ext4.vhdx 100%:WSL 系统盘满 → 扩容 vhdx / 迁移磁盘
  2. /dev/loop0 100%:Docker CLI 工具只读 loop 设备满 → 重新挂载或重启 Docker
  3. tmpfs /tmp 100%:内存临时盘写满 → 清理 /tmp、扩容 tmpfs、修改程序临时目录
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码