Debian 12 上为了少写磁盘把 /tmp 改成 tmpfs,size 设了 2G,应用把分片上传的临时文件放在这里,机器重启后任务全部失败,php 日志里是 No such file or directory。

排查方向其实有限,先把可能性排一排。tmpfs 完全落在内存里,重启或者卸载就清空,没有落盘这一层;systemd 的 tmp.mount 默认就会挂 tmpfs,手写 fstab 只是改了大小;应用把临时路径硬编码在 /tmp 下,没考虑重启后的清空行为;tmpfs 占的是内存,临时文件堆多了会把可用内存压到很低。

第一件事是确认 /tmp 到底挂在哪一层

findmnt /tmp && systemctl cat tmp.mount | head -20

再往下把上传临时目录挪到磁盘上

mkdir -p /data/tmp/upload && chown www:www /data/tmp/upload

接着改掉应用里的临时目录配置

grep -rn 'upload_tmp_dir' /etc/php/8.2/fpm/php.ini

等前面都确认过,再确实要留在 /tmp 的子目录做 bind 挂载

mount --bind /data/tmp /tmp/upload

别只看报错消失,验证要多做一步。/tmp 仍然是 tmpfs,但上传目录已指向 /data/tmp/upload,重启后任务能继续跑,df -h /tmp 的用量不再随上传增长。

tmpfs 适合放会话和 socket,不适合放要跨重启保留的数据;大小按内存算,设成物理内存的一半很容易把系统拖进 OOM。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189