«

Linux磁盘占用100%怎么排查,大文件查找清理方法

时间:2026-10-20 07:26     作者:emer     分类: 无


前言

服务器磁盘爆满到100%,会导致网站写不了日志、数据库报错、服务异常退出。很多人只看到根目录满,却找不到到底是谁占的。本篇按"先看分区→再找大目录→再找大文件→安全清理"的顺序给出可直接执行的命令。

一、先看哪个分区满了

df -h

看 Use% 列,找到达到100%的挂载点(常见是 / 根分区或 /data)。注意区分分区,别在没满的分区里瞎找。

二、逐级定位占用最大的目录

# 从根目录开始,显示一级目录大小,排序,排除挂载点干扰
du -h --max-depth=1 / 2>/dev/null | sort -rh | head

进入最大的那个目录重复执行,比如:

du -h --max-depth=1 /var 2>/dev/null | sort -rh | head

一层层往下钻,直到定位到具体目录。

三、查找超过指定大小的大文件

# 找出/var下大于500MB的文件
find /var -type f -size +500M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}'
# 全盘找大于1G的文件
find / -type f -size +1G 2>/dev/null | xargs ls -lh

常见大头:日志文件、MySQL binlog、Docker镜像/容器、上传目录、core dump、旧备份。

四、安全清理方式

  1. 日志文件:确认无用后清空(不要直接删正在写的文件,空间不释放):
    # 清空而不是删除,释放空间且进程句柄仍在
    > /var/log/nginx/access.log
  2. 已删除但仍被进程占用的文件(df满但du对不上):
    lsof | grep deleted
    # 找到对应PID后重启该服务释放句柄
  3. Docker清理:
    docker system df          # 先看占用
    docker system prune -a    # 清理无用镜像、停止容器、悬空卷
  4. 旧备份/binlog:确认可删后 rm -f,MySQL binlog 用 PURGE BINARY LOGS 正规清理。

五、常见坑

  1. 直接rm正在写入的大日志:空间不立刻释放,要 > 文件 清空或重启进程;
  2. df满du小:典型是已删除文件被进程占用,用 lsof | grep deleted 找;
  3. 只删根目录表面:--max-depth=1 逐级下钻才找得到真凶;
  4. 误删数据库文件/系统日志:清理前先 ls -lh 确认,重要数据先备份;
  5. Docker不清理:镜像层和停止容器很容易吃掉几十G,docker system prune 定期跑。

总结

df -h 找满的分区,du --max-depth=1 逐级定位,find -size 找大文件,日志用清空、Docker用prune、被占用文件重启释放。按这条链路,100%磁盘很快能查清楚。

遇到问题加QQ23979811 协助处理

标签: Linux du df 磁盘满 大文件清理