运维
Linux服务器磁盘满了怎么办?从定位到安全清理
证据状态:官方文档、明确条件与可重复步骤;页面未标注的数据不视为本站实测。
直接答案:先用df -h确认哪个分区满,再用df -i排除inode耗尽;随后在同一挂载点逐层用du定位目录,并用lsof +L1检查已删除但仍被进程占用的文件。确认来源后再清理日志、缓存或旧镜像,数据库文件和Docker卷不能凭目录大小直接删除。
确认容量还是inode耗尽
df -h显示容量,df -i显示inode。大量小文件可能让inode先耗尽。先记录满的是根分区、数据盘还是Docker所在分区。
在同一挂载点逐层定位
使用带-x的du避免跨到其他挂载点,从/var、/home或业务目录逐层检查。常见来源包括系统日志、网站日志、数据库日志、旧备份、镜像和容器日志。
处理看不见的占用
文件被删除后,如果进程仍保持打开,du看不到但df不会释放空间。用lsof +L1找到对应进程,确认服务后安排重启或重载。
按来源安全处理
- 系统日志使用journal或logrotate的正式保留策略。
- Docker先看
docker system df,只清理确认未使用的对象。 - 数据库使用自身的日志轮转与归档方式。
- 旧备份要在另一份副本通过恢复后再删除。
- 最后设置磁盘与inode告警,记录增长速度。
备份只有恢复成功才算有效
备份成本包括存储、跨地域复制、请求、出口流量和恢复时间。快照与异地备份承担不同职责。
- 定义可接受的数据损失时间和恢复时间。
- 分别备份数据库、用户文件和配置。
- 至少保留一份不与生产实例同故障域的副本。
- 定期在空白服务器完成恢复演练。
df -h
df -i
sudo du -xhd1 /var | sort -h
sudo lsof +L1
docker system df命令用于定位分区、inode、目录和已删除未释放文件,最后一项只读取Docker空间统计。不要在未确认数据归属时执行rm或带--volumes的清理。
哪些情况下不应这样选
- 只开同账号同地域快照,就认为已经异地容灾。
- 从未恢复过备份,也没有记录恢复依赖。
资料与边界
本文结合官方文档和可重复的验收方法编写。未标注“实测”的数据不作为跑分或线路承诺;价格、资格和产品限制应以购买当天的官方页面为准。
常见问题
删除大文件后空间为什么没回来?
进程可能仍打开该文件,可用lsof +L1确认并安排重启相关服务。
可以直接删除/var/lib/docker里的大文件吗?
不可以。该目录由Docker管理,直接删除可能损坏容器、镜像或卷。
磁盘扩容能彻底解决吗?
只能恢复余量;日志或程序持续异常增长时仍会再次占满。