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

突然接到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    /home
3.8G    /usr
4.0K    /cgroup
4.0K    /media
4.0K    /misc
4.0K    /mnt
4.0K    /net
4.0K    /selinux
4.0K    /srv
4.1G    /var
5.6M    /tmp
6.7M    /share
9.0M    /bin
10M     /root
16K     /lost+found
16M     /sbin
18M     /libexec
23M     /opt
28M     /lib64
34M     /etc
77M     /boot
200K    /dev
290M    /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 9100
df -h

df统计结果:

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

其他

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

猜你喜欢

转载自blog.csdn.net/yiifaa/article/details/78847871