消失的硬碟空間:du與df統計不一致的解決方法
阿新 • • 發佈:2019-02-17
突然接到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
其他
是的,是的,如果你的伺服器沒有高可用性要求(非線上伺服器),那麼重啟就是最簡單直接的解決辦法。