当前位置:首页>Linux>磁盘满了别慌:5步快速定位Linux磁盘告警

磁盘满了别慌:5步快速定位Linux磁盘告警

  • 2026-10-11 06:20:26
磁盘满了别慌:5步快速定位Linux磁盘告警

磁盘满了别慌:5步快速定位Linux磁盘告警

兄弟们,有没有遇到过这种情况:凌晨三点正睡得香,告警短信突然炸锅——"磁盘使用率98%!"你一个激灵爬起来,连上服务器一看,根分区确实红了。这时候千万别盲目删文件,删错了生产数据比磁盘满了还可怕。今天咱们聊聊磁盘满了的系统化排查思路,让你下次遇到这种事能淡定处理。


第一步:确认磁盘使用情况

先别急着找"谁占了空间",先用 df 看全局:

# 查看所有挂载点使用情况(-h 人类可读格式)
df -h

# 查看inode使用情况(有时候不是空间满,是inode满!)
df -i

# 只看本地磁盘,排除临时文件系统
df -hT | grep -v tmpfs | grep -v devtmpfs

这里有个坑:有时候 df 显示使用率100%,但 du 算出来没那么多。这种情况通常是文件被删除但句柄没释放。用这个命令找出来:

# 找出已被删除但仍被进程占用的文件
lsof | grep deleted

# 更精准的写法
lsof +L1

输出里会显示进程ID和占用的文件大小,重启对应进程或者 echo > /proc/PID/fd/FD_NUM 就能释放空间。


第二步:定位大文件和目录

找到哪个分区满了之后,用 du 逐层定位:

# 查看当前目录下各子目录大小,按大小排序
du -h --max-depth=1 | sort -hr | head -20

# 直接找大于1G的文件(全盘扫描,需要点时间)
find / -type f -size +1G 2>/dev/null | xargs du -h 2>/dev/null | sort -hr

du 和 df 结果不一致?除了上面说的句柄问题,还有一种情况是目录条目缓存——用 sync 同步一下再试。


第三步:排查日志文件

十次磁盘满,八次是日志。重点检查这些地方:

# 查看 /var/log 下各日志大小
du -sh /var/log/* | sort -hr

# 查看 journalctl 日志占用(systemd系统)
journalctl --disk-usage

# 清理旧日志(保留最近2天)
journalctl --vacuum-time=2d
日志类型常见路径清理方式
应用日志/var/log/app/logrotate 配置
系统日志/var/log/messagesjournalctl vacuum
Nginx访问日志/var/log/nginx/日志切割+压缩
Docker日志/var/lib/docker/containers/docker system prune

第四步:检查有没有"藏起来的空间"

有些空间占用是隐蔽的:

# 查看被挂载遮挡的目录(挂载点覆盖了原有文件)
mount | grep /data

# 查看docker overlay占用
docker system df

# 查看已删除但未释放的大文件
find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'

Docker 环境特别容易踩这个坑——镜像、容器、volume 三层叠加,用 docker system prune -a 可以清理,但记得先确认没有重要数据。


第五步:建立预防机制

排查完不是结束,要建立长效机制:

# 设置磁盘告警脚本(添加到crontab)
cat > /usr/local/bin/disk_check.sh << 'EOF'
#!/bin/bash
THRESHOLD=85
df -h | awk '$5 > THRESHOLD {print $0}' | mail -s "Disk Alert on $(hostname)" admin@example.com
EOF

# 配置 logrotate(以nginx为例)
cat > /etc/logrotate.d/nginx << 'EOF'
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx
endscript
}
EOF

互动话题:你遇到过最奇葩的磁盘满原因是什么?有人在 /tmp 里存了备份文件,有人是 Docker 镜像堆积了半年没清理。评论区聊聊你的踩坑经历!

推荐标签:#服务器运维 #Linux #磁盘管理 #故障排查 #运维实战 #系统监控

核心观点:磁盘满排查要系统化——先 df 确认,再 du 定位,别忘了检查已删除未释放的文件句柄,最后用 logrotate 和监控建立预防机制。

最新文章

随机文章