网站突然写不进缓存、数据库报错,连面板都开始显示异常,第一反应往往是磁盘满了。可我处理这类问题时,不会马上进入日志目录执行删除,因为磁盘已满至少有三种不同情况,处理方法完全不一样。
先确认是容量耗尽、inode耗尽,还是文件已经删除但空间仍被进程占着。判断错了,删再多文件也可能没有效果,甚至会把真正需要保留的数据一并清掉。

先用df确认满的是哪个文件系统
在 Ubuntu、Debian、Rocky Linux 和 AlmaLinux 上,都可以先执行:
df -hT
重点看业务目录所在的挂载点,不要只盯着整行百分比。网站通常位于 /www、/var/www 或单独挂载的数据盘,数据库也可能放在另一个分区。根分区达到 100%,不代表数据盘也满;反过来也一样。
df 显示的是文件系统空间,适合判断哪个挂载点出了问题。此时先记录文件系统类型和挂载路径,再进入对应目录排查,避免在错误的磁盘里反复清理。
df有空间但仍提示No space left on device
这时要检查 inode:
df -i
inode 可以理解为文件系统记录文件信息的位置。缓存、Session、小图片或邮件队列产生数百万个小文件时,磁盘容量可能还剩不少,但 inode 已经用完,新文件仍然无法创建。
容量满看 df -h,inode满看 df -i。 inode 耗尽不能靠删除一个大文件解决,需要找到拥有大量小文件的目录。可以先从问题挂载点逐层统计,确认目标后再处理,不能直接对根目录执行大范围删除。
用du找出真正占空间的目录
确认是容量问题后,可在对应挂载点执行:
sudo du -xhd1 /var | sort -h
sudo du -xhd1 /var/log | sort -h
-x 会限制在当前文件系统内,避免统计过程跨到其他挂载盘;-d1 只查看一层目录,结果更容易读。找到最大的一级目录后再继续向下查,比一开始扫描整台服务器稳妥得多。
常见大户包括 Web 访问日志、数据库日志、Docker 镜像与容器日志、面板备份、网站压缩包。先辨认文件用途,再决定删除、压缩还是转移。 数据库文件、正在使用的容器目录和不认识的系统文件不要凭体积直接处理。
文件删了为什么空间没有回来
Linux 允许进程继续持有已经从目录中删除的文件。日志文件被直接删除后,Nginx、Java 或其他服务仍可能保持原来的文件描述符,du 已经看不到它,df 却依旧显示空间被占用。
可以检查链接计数为零但仍被打开的文件:
sudo lsof +L1
确认进程和文件用途后,优先让对应服务正常重新打开日志,例如执行平滑重载或安排维护窗口重启服务。不要为了释放空间直接杀掉不认识的进程,更不要手动修改 /proc 下的文件描述符。
日志应该清理还是做轮转
临时清出空间只能救急,日志持续增长还会再次占满磁盘。Nginx、系统服务和应用日志应交给 logrotate 或应用自身的日志策略管理,并设置保留天数、压缩和单文件大小。
systemd 日志可以先查看占用:
journalctl --disk-usage
确需收缩时,可按保留时间或容量执行清理,但要先确认故障排查所需的时间范围。日志不是垃圾文件,它往往是定位宕机、攻击和程序异常的唯一证据。
什么时候该扩容或迁移
磁盘偶尔被一次备份占满,完善清理和轮转即可。网站、数据库和备份都在持续增长,清理后很快又回到 80% 以上,说明当前容量已经缺少安全余量。
这时更适合扩容数据盘,或把备份、对象文件迁出系统盘。准备新环境时,我会优先选磁盘规格清楚、后续升级方便的平台,例如 萤光云 和 LightNode,先按实际数据量留出增长空间,再安排迁移,不靠反复删除文件维持运行。
清理后怎么确认恢复正常
再次运行 df -hT 和 df -i,确认目标文件系统已经腾出空间。网站能打开还不算结束,还要检查数据库写入、缓存生成、上传和定时备份是否恢复。
我更建议把系统盘长期控制在 80% 左右,接近阈值就告警。磁盘问题最怕临时清出几GB后不再追踪增长来源,过几天同样的故障还会再来。
常见问题
磁盘使用率100%还能直接重启服务器吗?
不建议把重启当成第一步。磁盘完全占满可能导致服务启动失败,先安全释放少量空间并保存关键日志。
删除日志后df没有变化怎么办?
执行 sudo lsof +L1 检查是否有进程仍持有已删除文件,再对确认过的服务做平滑重载或维护重启。
inode满了能通过扩容磁盘解决吗?
扩容是否增加 inode 取决于文件系统和扩容方式。更关键的是清理异常小文件,并修正持续生成小文件的程序或缓存策略。


