服务器磁盘快满了,先别急着删:用 du、journalctl 和 logrotate 三步定位清理

举报
yd_226757564 发表于 2026/10/26 10:08:47 2026/10/26
【摘要】 磁盘满了不要到处删:先用 df 和 du 定位分区与大文件,再用 journalctl 清理并用 logrotate 管住日志增长,正在写的文件用清空代替删除。

磁盘报警最常见的第一反应是到处删文件,结果往往是删错了、空间也没释放,或者第二天又满了。更稳妥的顺序是:先确认是哪个分区满、再定位到具体目录和大文件、最后用系统自带的轮转机制把增长管住,而不是一次性清掉所有日志。


第一步:确认满的是哪里,是空间满还是 inode 满


df -h


df -i


只看 Use% 最高的那一行。如果是根分区满,就从根分区往下查;如果是 /var 单独分区,就重点查 /var。df -i 也要看,inode 用满时即使 df -h 还有空间,也写不进新文件,常见原因是大量小文件。


第二步:用 du 一层层往下找,不要一上来就删


du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20


找到最大的目录后,再往下一层:


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


如果怀疑是某个大文件,直接找出来:


find / -xdev -type f -size +500M 2>/dev/null | head -20


-xdev 的作用是只在当前文件系统里找,避免把挂载的其他盘也扫进来。找到大文件后先看它属于哪个服务、最近还在不在写,再决定处理方式。


第三步:日志往往是大头,先看 journal,再看应用日志


journalctl --disk-usage


如果 journal 占了几个 GB,可以先按大小或时间清理,清理前确认不需要这么久的日志留存:


journalctl --vacuum-size=500M


journalctl --vacuum-time=7d


要长期管住,在 /etc/systemd/journald.conf 里设置,例如 SystemMaxUse=500M,然后重启 journald 生效:


systemctl restart systemd-journald


应用日志则看 /var/log 下按大小排序:


du -sh /var/log/* 2>/dev/null | sort -hr | head -20


第四步:删之前先分清“正在写的文件”和“已删除还占着的文件”


对正在被进程写的文件,直接 rm 并不一定释放空间,文件可能变成 deleted 状态继续占盘。先查:


lsof | grep deleted


确认后更安全的做法是清空而不是删除,例如:


: > /var/log/xxx.log


或者用 truncate -s 0 /var/log/xxx.log。这样进程不用重启,空间马上释放。如果是已经不需要的历史日志压缩包、旧备份,先移到别处或确认备份后再删,不要凭文件名猜。


第五步:用 logrotate 把日志增长管住,而不是每次手动救火


给自己的应用写一个轮转配置,例如 /etc/logrotate.d/myapp:


/var/log/myapp/*.log {

  daily

  rotate 7

  compress

  missingok

  notifempty

  copytruncate

}


copytruncate 适合不能重启的应用,它是复制后清空原文件;如果应用支持重新打开日志文件,用 create + postrotate 重启或发信号更干净。写完后先演练,不要直接等第二天:


logrotate -d /etc/logrotate.d/myapp


logrotate -f /etc/logrotate.d/myapp


-d 是调试输出,不真正轮转;确认无报错后再用 -f 强制跑一次验证。


收尾检查清单


1. 再跑一次 df -h 和 df -i,确认 Use% 和 inode 都回到安全线以下。

2. 确认关键服务还能正常写日志,不要只看空间数字。

3. 把这次最大的三类占用记下来,下次报警时直接先查这三处。


一句话总结:先 df 定位分区,再 du 定位目录和文件,再用 journalctl 和 logrotate 管住日志增长;正在写的文件用清空代替删除,已删未释放的文件用 lsof 查出来。这样处理一次,磁盘问题才不容易反复出现。


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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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