1. 程式人生 > >消失的硬碟空間:du與df統計不一致的解決方法

消失的硬碟空間: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

其他

是的,是的,如果你的伺服器沒有高可用性要求(非線上伺服器),那麼重啟就是最簡單直接的解決辦法。