0 背景
博主用的阿里云VPS只有30G磁盘空间,之前把博客、图库放到阿里云上,加上部署的统计、监控、测试的docker程序,经常出现服务器磁盘已满,导致无法继续写入磁盘,很多网站程序和进程都报错,所以有必要进行清理。
但是,先别急着删 /tmp。 空间满的真凶通常不是它,而是这几处:/var/log 与 journald 日志、Docker 镜像/构建缓存、包管理器缓存,以及「已删除但仍被进程占用」的文件(df 显示满、du 却对不上)。盲删 /tmp/* 还可能删掉运行中的 socket、锁文件和正在使用的临时文件,把服务搞挂。
1 排查问题
排查占用问题
df -hT # 哪个分区满了
df -i # 是否 inode 耗尽(有空间却写不进)
sudo du -xhd1 / 2>/dev/null | sort -rh | head -20 # 根目录各层占用
sudo lsof +L1 2>/dev/null | head -30 # 删了但没释放的文件
sudo du -xhd1 /var 2>/dev/null | sort -rh | head -15
sudo journalctl --disk-usage
sudo docker system df 2>/dev/null2 清理磁盘
2.1 清理包缓存
sudo apt clean(Debian/Ubuntu)或
sudo dnf clean all(RHEL 系)优点是随时可重新下载,最安全。
2.2 清理journal 日志
sudo journalctl --vacuum-size=200M 只裁旧日志,不动服务。
2.3 清理系统临时文件:优先
sudo systemd-tmpfiles --clean按 tmpfiles.d 规则清理,比手工 rm 安全得多。
2.4 清理tmp
确需手工清 /tmp:先预览清单,确认后再删,只处理 7 天未访问的普通文件:
sudo find /tmp /var/tmp -xdev -type f -atime +7 -print | head -100 #只看,不删清单确认无误后,把 -print 换成 -delete。不要碰 /run、/dev/shm:
sudo find /tmp /var/tmp -xdev -type f -atime +7 -delete | head -1002.5 清理内存
若 lsof +L1 有输出:重启对应服务释放句柄,别 kill -9 盲杀;也不要直接 rm 正在写的
大日志,用 truncate 或 logrotate。
2.6 清理docker
docker system prune 会删停止的容器、未被引用的镜像和网络,必须单独确认。
3 系统加固-减少垃圾文件产生
给增长封顶,让系统自己约束,避免过几个月又堆满。都是一次配置、长期生效,且不删除现有数据。
3.1 给系统日志封顶(最常见的大头)
bashsudo mkdir -p /etc/systemd/journald.conf.d && printf '[Journal]\nSystemMaxUse=200M\nMaxRetentionSec=2week\n' | sudo tee /etc/systemd/journald.conf.d/10-limit.conf && sudo systemctl restart systemd-journaldjournal 日志总量硬上限 200M、只保留两周,超出自动轮转丢弃。用 drop-in 文件不改动原配置,删掉 10-limit.conf 即可回滚;重启 journald 不会中断业务。
3.2 让包管理器不再囤积安装包
bashprintf 'APT::Keep-Downloaded-Packages "false";\n' | sudo tee /etc/apt/apt.conf.d/99-no-keep-downloadsDebian/Ubuntu:apt install 完即删 .deb,/var/cache/apt/archives 不再越攒越大。RHEL/CentOS 系改成在 /etc/dnf/dnf.conf(或 /etc/yum.conf)的 [main] 段设 keepcache=0。这条纯配置、无需重启服务。
3.3 开启临时文件自动回收
bashsudo systemctl enable --now systemd-tmpfiles-clean.timer每天自动跑一次 systemd-tmpfiles --clean,按系统默认规则清掉 /tmp 中超过 10 天、/var/tmp 中超过 30 天的文件。多数发行版默认已启用,这条是确认并强制生效。想更激进可加 printf 'd /tmp 1777 root root 7d\n' | sudo tee /etc/tmpfiles.d/10-tmp.conf。注意:启用后系统会自动删除旧临时文件,如果你有长期搁在 /tmp 里的数据,先挪到 /home 下的目录。
验证是否生效:
bashsystemctl list-timers systemd-tmpfiles-clean* --no-pager
sudo journalctl --disk-usage
df -h3.4 docker优化建议
如果这台机器跑 Docker,容器日志往往是比 /tmp 更凶的隐形杀手。建议在 /etc/docker/daemon.json 里配置 log-opts 的 max-size(如 10m)和 max-file(如 3)——但不要直接覆盖已有 daemon.json(先备份、合并字段),且 systemctl restart docker 会中断正在运行的容器,需要单独安排窗口。新配置也只对新建容器生效,已有容器要重建。
评论 (0)