df與du查看磁盤空間使用不一致的解決方法


近一段時間,某台服務器的磁盤空間使用不太正常,與其他的服務器相比,嚴重超出磁盤空間使用

使用df與du相關命令查看,具體結果如下:

du -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/vda1         50G   42G  5.5G  89% /
devtmpfs         1.9G     0  1.9G   0% /dev
tmpfs            1.9G   48K  1.9G   1% /dev/shm
tmpfs            1.9G  613M  1.3G  33% /run
tmpfs            1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs            380M     0  380M   0% /run/user/1003
tmpfs            380M     0  380M   0% /run/user/0

du --max-depth=1 -h
0       ./proc
0       ./sys
12K     ./opt
34M     ./etc
16K     ./lost+found
611M    ./run
4.0K    ./media
1.9G    ./data
4.0K    ./mnt
532M    ./var
5.7G    ./usr
200K    ./home
4.0K    ./srv
792K    ./tmp
16M     ./root
0       ./dev
216M    ./boot
8.9G    .

把比較大的日志文件刪除或者清空后仍不見好轉

后來,在網上查找相關原因,得到的結論如下:

在Linux中,當我們使用rm在linux上刪除了大文件,但是如果有進程打開了這個大文件,卻沒有關閉這個文件的句柄,那么linux內核還是不會釋放這個文件的磁盤空間,最后造成磁盤空間占用100%,整個系統無法正常運行。這種情況下,通過df和du命令查找的磁盤空間,兩者是無法匹配的,可能df顯示磁盤100%,而du查找目錄的磁盤容量占用卻很小。

於是使用如下命令:lsof -n | grep deleted ,找出那些文件已經被刪除,但是還有進程在訪問這些文件的進程,經過查詢可知,是mysql的鍋,果斷重啟mysql服務。

重啟mysql的過程心驚膽戰的,總擔心起不來,因為之前遇到過mysql服務重啟起不來的情況,不過幸好,服務重啟竟然起來了。

然后就是服務器卡的要死,通過使用top命令查看,發現磁盤負載很高,細心觀察,負載在逐漸下降,這個就應該是重啟mysql服務后,服務器在真實的刪除這個早就刪除的文件吧。

等磁盤負載下降到正常水平,再通過上述命令查看,磁盤使用情況總算正常了,特留此文章已被紀念緬懷。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM