消失的硬盘空间:du与df统计不一致的解决方法

来源:互联网 发布:网络剧张嘉倪孙尚香 编辑:程序博客网 时间:2024/06/05 20:43

突然接到Zabbix的告警邮件,说硬盘空间告警,赶紧登上服务器,用df查看硬盘利用率,发现已用空间果然较低,如下:

# 加上-h更容易看明白空间大小df -h

输出结果如下:

/dev/sdb1       2.2T  1.8T  488G  79% /home

继续分析“/home”的占用分布,如下:

# 只查看超过1G的目录du -h --max-depth=1 /home/yiifaa|sort -n -k1

输出结果如下:

位置 占用大小 ./logs 11G ./mis_analysis 51G ./opdir 253G ./openresty 5.3G ./sdk_collect 788G ./sdk_data 232G 总计 1340.30G

差距竟然达到了500G,初步以为是其他用户使用了其他的空间,赶紧切换到root用户,再次进行分析:

# 切换到根用户su root# 再次查看/home的占用情况du -h --max-depth=1 /home|sort -n -k1

输出结果如下:

1.3T    /1.3T    /home3.8G    /usr4.0K    /cgroup4.0K    /media4.0K    /misc4.0K    /mnt4.0K    /net4.0K    /selinux4.0K    /srv4.1G    /var5.6M    /tmp6.7M    /share9.0M    /bin10M     /root16K     /lost+found16M     /sbin18M     /libexec23M     /opt28M     /lib6434M     /etc77M     /boot200K    /dev290M    /lib

两相对照,du的两次统计数据基本相同,那么问题确定了,硬盘空间真的消失了500G。

翻阅了很多文档,最后基本可以确认,硬盘空间消失是因为删除的文件被其他程序引用,导致空间无法回收,所以解决的方法也很简单,找到引用文件的相关进程,然后停掉进程让空间回收即可,查找引用已删除文件的方法如下:

# 按已删除文件大小逆向排序lsof -s|grep deleted|sort -nr -k7|less

得到如下的结果:

python     9100   xiaoju    4w      REG               8,17 506684182703      11467 /home/xiaoju/sec_audit_log/biz/sec_audit.log (deleted)python     9100   xiaoju    3w      REG               8,17 506684182703      11467 /home/xiaoju/sec_audit_log/biz/sec_audit.log (deleted)python     9100   xiaoju   12w      REG               8,17 506684182703      11467 /home/xiaoju/sec_audit_log/biz/sec_audit.log (deleted)python     9100   xiaoju   11w      REG               8,17 506684182703      11467 /home/xiaoju/sec_audit_log/biz/sec_audit.log (deleted)python     9100   xiaoju   10w      REG               8,17 506684182703      11467 /home/xiaoju/sec_audit_log/biz/sec_audit.log (deleted)

很容易就找到了出问题的进程号——9100,结束掉相关进程,再次用df查看磁盘空间,发现统计数据终于一致了,如下:

kill 9100df -h

df统计结果:

Filesystem      Size  Used Avail Use% Mounted on/dev/sdb1       2.2T  1.3T  965G  57% /home

其他

是的,是的,如果你的服务器没有高可用性要求(非在线服务器),那么重启就是最简单直接的解决办法。

原创粉丝点击