服务器磁盘空间满了怎么办?香港服务器inode耗尽、日志膨胀5问排查
发布时间:2026-11-05
香港服务器通常同时服务内地和亚太用户,访问量大,日志和缓存增长也快。另外不少香港实例的系统盘容量相对较小,一旦磁盘空间或 inode 用完,网站、数据库和 SSH 登录都可能出问题。下面按“表现 → 可能原因 → 排查步骤 → 快速修复”的顺序,逐个说明常见情况。
问题一:df 显示 100%,网站报错无法写入
表现:页面 500 报错,数据库提示写入失败,上传文件中断。
可能原因:访问日志、错误日志长期没有轮转;程序生成了很大的临时文件或导出文件;systemd journal 日志一直在累积。
排查步骤:先执行 df -h 找到占满的分区,再执行 du -xh --max-depth=1 / | sort -h 一层层往下找占用最大的目录,最后用 find / -xdev -type f -size +500M 找出大文件。
快速修复:执行 journalctl --vacuum-size=500M 压缩系统日志;已经不需要的旧日志先压缩归档再删除;检查 /etc/logrotate.d/ 下的配置,加上 daily、rotate 7、compress 这几项。
问题二:df -h 显示还有空间,却提示 No space left on device
表现:剩余容量看起来够用,但新建文件失败。
可能原因:inode 已经用完,常见情况有:PHP session 文件堆积、邮件队列积压、缓存程序生成了海量小文件。
排查步骤:执行 df -i 查看 IUse% 是否接近 100%;再执行 find / -xdev -type f | cut -d/ -f2-3 | sort | uniq -c | sort -n | tail,看哪个目录的文件数量最多。
快速修复:清理过期的小文件,例如 find /var/lib/php/sessions -type f -mtime +3 -delete;如果是邮件队列积压,确认没用后执行 postsuper -d ALL;然后检查 session.gc_maxlifetime、缓存过期时间等设置,避免再次堆积。
问题三:删除了大文件,空间却没有释放
表现:执行 rm 之后,df 显示的使用率没有变化。
可能原因:文件仍被 Nginx、Java 等进程占用着,被删除的日志句柄没有关闭。
排查步骤:执行 lsof +L1 或 lsof | grep deleted,找出持有已删除文件的进程 PID。
快速修复:重启对应服务,或者执行 : > /proc/PID/fd/文件描述符号 把文件清空。以后清理正在写入的日志,建议用 truncate -s 0 文件名,不要直接 rm。
问题四:Docker 镜像与本地备份占满磁盘
表现:/var/lib/docker 或备份目录持续变大。
可能原因:旧镜像和停止的容器没有清理;容器日志没有设置上限;备份脚本只新增、不删除旧备份。
排查步骤:执行 docker system df 查看各部分占用,再用 ls -lh 检查备份目录里的文件数量和日期。
快速修复:执行 docker system prune -a 前,先确认没有需要保留的镜像;在 /etc/docker/daemon.json 里给 json-file 日志驱动设置 max-size(如 50m)和 max-file(如 3)。备份建议只在本地保留最近几份,其余转存到异地存储。香港出口带宽通常比较宝贵,传输前先压缩,并尽量安排在业务低峰时段。备份里如果有个人数据,需要遵守香港《个人资料(私隐)条例》,跨境传输时还要遵守中国大陆相关法律法规。
问题五:清理之后,怎样避免再次占满
表现:每隔一段时间磁盘又满一次,每次都是业务出故障后才发现。
可能原因:没有设置容量和 inode 告警;系统盘和数据盘没有分开,日志、数据库都写在根分区。
排查步骤:检查监控里有没有磁盘使用率和 inode 使用率这两项指标,再用 lsblk 确认分区规划。
快速修复:用 Zabbix、Prometheus(配合 node_exporter)等工具,在使用率达到约 80% 时告警;把数据库和日志目录迁到独立的数据盘;定时任务执行 crontab -e 加入定期清理脚本。一般来说,根分区保留 15%–20% 的余量会比较稳妥。
| 现象 | 首选命令 |
|---|---|
| 容量满 | df -h / du -xh |
| inode 满 | df -i |
| 删除后不释放 | lsof +L1 |
| 容器占用 | docker system df |