一个非常奇怪的 Linux 磁盘空间问题

2023-10-16 18:04:58 +08:00
 zhoudaiyu
今早收到告警有一台物理机(RHEL7.5 && 3.10 内核)的/var 挂载点空间使用率超过 85%了,于是赶紧找哪个文件较大,发现了/var/cache/atop.d/atop.acct 这个文件占用了 41G (总 50G ),于是先查看了有没有进程打开这个文件,确定没有后,给这个文件挪到了其他挂载点,本以为磁盘空间会被释放,但并没有,df 看磁盘剩余空间没有变,被挪过去的那个挂载点磁盘使用空间倒是涨上来了。于是各种查 lsof 、fuser 啥的都查了个遍也没有啥发现。还有/var 挂载点的文件系统是 xfs (不知道有帮助没),请大家帮忙出出主意有啥好的方法排查吗? reboot 比较难,上面业务很多
2080 次点击
所在节点    Linux
12 条回复
yanqiyu
2023-10-16 18:21:32 +08:00
确定检查方法对的?主要是有时候可能 lsof 里面的路径就不对/有些进程打开的文件只有 root 下才能看到
sudo lsof | egrep "deleted|COMMAND"
检查 DEVICE 号码和 SIZE 对的上的(不要只看路径,以及不要再非 root 下执行)

要是找不到另说,找到了就 echo > /proc/<pid>/fd/<fd> 释放空间

---
其实对于这种文件空间爆炸,建议就 echo >/path/to/file 再删除,能保证释放空间而不用 lsof 到处找
my3157
2023-10-16 18:26:43 +08:00
truncate -s 0 <fp>
seers
2023-10-16 19:15:33 +08:00
句柄没释放
pagxir
2023-10-16 19:24:45 +08:00
也有可能被 mount 成回环磁盘了。
zxf9799
2023-10-16 20:13:28 +08:00
1 楼正解,这个在服务器上遇到很多次了,估计有啥进程永久占用这个文件了,句柄保存的情况下空间不会释放,lsof 命令看下这个文件是不是还在
iphoneXr
2023-10-16 20:32:37 +08:00
atop 命令执行完成之后就会后台继续运行的
你要用进程查看下 是否 atop 进程还存在? 命令如下 ps aux|grep atop
杀完了 atop 进程再去用 ncdu 分析下磁盘大文件把。
iphoneXr
2023-10-16 20:34:37 +08:00
帮人帮到底把。
执行这个应该就能释放空间 恢复正常了
ps aux|grep atop| grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill -9
zhoudaiyu
2023-10-16 20:44:34 +08:00
@iphoneXr 看了无数遍了,没有 atop 进程,service 也是 disable 的
h2ero
2023-10-16 21:14:57 +08:00
既然是 atop 的,就 kill 下 atop 得了
zhoudaiyu
2023-10-17 10:45:52 +08:00
@yanqiyu
@my3157
@seers
@pagxir
@zxf9799
@iphoneXr
@h2ero
感谢大家,问题已经不明不白地解决了(执行了一下 atop ,出结果之前卡了一会( 20 多 s ),然后结果出来我就退了,神奇地发现了/var 磁盘使用率恢复了,/var/cache 下的 atop.d 的文件夹都没了),但还想知道为什么
julyclyde
2023-10-17 16:49:32 +08:00
@zhoudaiyu 你现在已经失去故障现场了,下回再研究吧
zydrsnuo
8 天前
atop 不直接产生记账文件, 而是触发内核写入记账文件, atop 退出时再调用内核停止记账. 如果 atop 异常退出, 它就没有关闭记账的动作, 记账文件会越来越大. 可以执行 accton off 命令停止记账.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982533

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX