Linux 服务器磁盘满了:从定位大文件到清理,一次讲清

举报
yd_23412927 发表于 2026/11/07 21:12:38 2026/11/07
【摘要】 Linux 服务器磁盘满了:从定位大文件到清理,一次讲清磁盘 100% 是运维最常见的半夜告警。服务写不进日志、数据库起不来、上传失败,根子往往都在磁盘满了。排查就三步:先看哪个分区满,再找是谁占的,最后安全地清。 一、先看哪个分区满了:dfdf -h # 看各分区使用率,重点看 Use% 接近 100% 的df -i # 再看 inode 用量,文件数太多也会...

Linux 服务器磁盘满了:从定位大文件到清理,一次讲清

磁盘 100% 是运维最常见的半夜告警。服务写不进日志、数据库起不来、上传失败,根子往往都在磁盘满了。排查就三步:先看哪个分区满,再找是谁占的,最后安全地清。

一、先看哪个分区满了:df

df -h        # 看各分区使用率,重点看 Use% 接近 100% 的
df -i        # 再看 inode 用量,文件数太多也会“满”

注意区分两种“满”:空间满了(df -h 的 Use% 到 100%),和 inode 用完了(df -i 的 IUse% 到 100%)。小文件太多会先耗尽 inode,这时删大文件没用,得删小文件。

二、找是谁占的:du

定位到满的分区,比如根分区 /,一层层往下钻:

du -sh /*            # 看根目录下各目录占多少
du -sh /var/* | sort -rh | head -10   # 找出 /var 下最大的 10 个
du -sh /home/* | sort -rh | head -10

常用的几个“重灾区”:/var/log(日志)、/var/lib/docker(容器镜像和数据卷)、/tmp(临时文件)、应用自己的数据目录。

装了 ncdu 的话更直观,可以像文件管理器一样逐层点进去看:

ncdu /var

三、日志是最常见的元凶

很多磁盘告警最后都是日志撑爆的。先确认日志目录大小:

du -sh /var/log
ls -lhS /var/log | head -10   # 按大小排序,看最大的日志文件

清理之前先想清楚:日志还能不能要。能不要的直接删,不能删的先压缩归档:

# 确认文件未被进程占用再删
rm -f /var/log/xxx.log.2026-10-*.gz   # 删旧的压缩日志
# 日志还在被写,删文件不释放空间,先清空
: > /var/log/xxx.log
# 或者用 truncate
truncate -s 0 /var/log/xxx.log

注意:直接 rm 一个正在被进程写的文件,空间不会释放,因为文件句柄还占着。必须清空文件内容,或者重启写日志的进程。可以用 lsof | grep deleted 找出这类“已删但还占着空间”的文件。

治本的办法是配好 logrotate,让日志自动轮转、压缩、过期删除:

cat /etc/logrotate.d/xxx
logrotate -d /etc/logrotate.d/xxx   # 调试模式,看轮转规则是否生效

系统日志也可以直接瘦身:

journalctl --disk-usage              # 看 systemd 日志占了多少
journalctl --vacuum-size=500M       # 只保留最近 500M
journalctl --vacuum-time=7d         # 只保留最近 7 天

四、Docker 占的空间

跑容器的机器,/var/lib/docker 经常是第一大户:

docker system df        # 看镜像、容器、数据卷各占多少
docker system prune -a --volumes   # 清理没用的镜像、容器、网络和匿名卷

prune 会删东西,执行前确认没有正在用的镜像和数据卷。只清悬空镜像更安全:

docker image prune -a

五、其他常见占位

位置 排查命令 处理
/tmp 临时文件 du -sh /tmp 删过期文件,重启后一般自动清
应用缓存 看应用自己的缓存目录 按应用文档清,别直接删数据目录
数据库 binlog du -sh /var/lib/mysql 按保留天数清理,勿删正在用的
备份文件 find / -name "*.bak" -o -name "*.tar.gz" 转移到对象存储或删旧备份
已删未释放 `lsof grep deleted`

六、排查流程

现象 先查 工具
磁盘告警 哪个分区满、是不是 inode 满 df -h、df -i
不知道谁占的 逐层定位大目录 du -sh、ncdu
日志撑爆 最大日志文件 ls -lhS、journalctl
删了文件空间不释放 已删未释放的文件句柄 lsof | grep deleted
容器机器满 镜像和卷占用 docker system df

小结

磁盘满了别急着扩容,先定位:df 看分区,du 找大户,日志和 Docker 是最常见的两处。清理时记住两条红线:删文件前确认有没有进程正在写,删数据前确认有没有备份。把 logrotate 和日志保留策略配好,这类告警以后会少很多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。