Linux 磁盘空间排查:df/du 定位大文件与日志清理

举报
yd_212935556 发表于 2026/11/10 15:29:50 2026/11/10
【摘要】 磁盘满了别急着删文件:先用 df -h 确认满盘,再用 du 逐层定位、find 找大文件,日志用 journalctl 与 logrotate 安全清理,文末附十分钟排查清单。

磁盘满了是最让人头疼的线上故障之一:服务写不进日志、数据库拒绝写入、应用突然崩溃,而根因往往只是一个被忽略的大文件或者失控增长的日志。本文用一套固定的排查顺序,帮你快速定位问题,再安全地清理空间。

第一步,先看整体:用 df 看哪里满了

遇到磁盘告警,第一反应不要直接删文件,先确认是哪块盘满了。df -h 以人类可读的方式显示每个挂载点的总容量、已用和可用空间,重点看 Use% 接近 100% 的那一行,再看 Mounted on 确认是根分区、数据分区还是日志分区满了。df -i 也值得顺手跑一下,它看的是 inode 使用率:小文件太多时,磁盘明明还有空间,也会因为 inode 耗尽而写不进去。

第二步,再看目录:用 du 逐层下钻

知道哪块盘满了,下一步是找出是哪个目录吃掉了空间。du -sh /* 可以一次性看到根目录下每个一级目录的大小;找到最大的那个,再对它继续下钻,例如 du -sh /var/*。如果想直接看到排序结果,可以用 du -ah /var | sort -rh | head -20,列出 /var 下面最大的前 20 个文件和目录。逐层下钻比上来就全盘扫描快得多,也更容易定位到真正的元凶。

第三步,找大文件:find 帮你点名

目录定位之后,用 find 直接把大文件列出来:find / -type f -size +500M -exec ls -lh {} \; 会找出大于 500M 的文件;把路径换成已经锁定的目录,速度更快。常见的嫌疑对象有:没有轮转的日志文件、堆积的备份包、被遗忘的安装包和镜像文件、应用导出的临时大文件。看到结果先别急着删,先确认文件归属和业务用途。

第四步,日志清理:先止血,再瘦身

日志是最常见的磁盘杀手,清理要分情况处理。对于 systemd 的日志,先用 journalctl --disk-usage 看占用,再用 journalctl --vacuum-size=500M 把总量压到 500M 以内,或者用 journalctl --vacuum-time=7d 只保留最近 7 天。对于文本日志,优先检查 logrotate 是否配置正确、轮转是否生效;临时止血可以用 truncate -s 0 文件名 或者 : > 文件名 把文件截断为空,而不是直接删除。

这里有一个关键细节:正在被进程写的文件不能直接 rm。删除后文件句柄还在,磁盘空间不会释放,进程还会继续往已删除的文件里写。正确做法是先截断,或者重启相关服务释放句柄。删除前最好先确认文件是否还在被使用,可以用 lsof 文件名 检查。

第五步,清理之后:做预防,别再满一次

清理只是救火,预防才能避免重演。第一,给日志配好 logrotate,设置好轮转周期、保留份数和压缩;第二,对备份和临时文件设好保留期限,用定时任务定期清理;第三,把 /var/log 这类容易增长的目录单独分区,避免日志把根分区拖垮;第四,给磁盘使用率设告警阈值,比如 80% 提醒、90% 紧急处理,留出足够的反应时间。

排查清单

最后把流程收成一张清单:df -h 确认满盘,df -i 检查 inode,du -sh 逐层定位目录,du 加 sort 找最大的目录,find 找大于 500M 的文件,journalctl 看日志占用,truncate 截断正在写的日志,logrotate 做好长期轮转。按这个顺序走,大多数磁盘满的问题都能在十分钟内定位,再用安全的方式清理干净。记住原则:先定位再动手,先截断再删除,清理之后补上轮转和告警。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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