Linux

CentOS 伺服器 - 可用磁碟空間不斷下降

  • July 2, 2015

df 命令的結果:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda2      864000688 809338092  10773908  99% /
tmpfs           32965940         0  32965940   0% /dev/shm
/dev/sda1         198337     87394    100703  47% /boot

幾秒鐘後 df 命令的結果:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda2      864000688 809400076  10711924  99% /
tmpfs           32965940         0  32965940   0% /dev/shm
/dev/sda1         198337     87394    100703  47% /boot

我正在以令人難以置信的速度失去伺服器上的磁碟空間。並且每次可用空間達到 0 octect 時,Mysql 服務就會崩潰。

我已經有reboot伺服器來清除dmesg日誌,我已經刪除了每個大日誌文件(錯誤日誌、消息日誌和 named.run 日誌)並執行此請求:sudo /usr/sbin/lsof | grep deleted.

然而,我釋放的空間在一天之內就被吃掉了。

所以我執行瞭如下請求:

du -hsx * | sort -rh | head -15

還有這個 :

find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {

在我的根目錄的每個目錄中。

但我能找到的最大文件是我的數據庫中的一個轉儲文件,它只有一個 1Gb 的文件:

-rw-r--r-- 1 root root 1032237681  6 déc.   2013 dump_experta2.sql
-rw-r--r-- 1 root root  389789251  6 déc.   2013 dump_experta.sql

你能解釋一下為什麼一些不可見的文件似乎使用了可用空間嗎?以及如何定位和阻止這個空間磁碟洩漏?

**編輯:**感謝 HBruijn 的提示,我解決了我的問題,如果您遇到同樣的問題,這是我一步一步做的:

我跑了find / -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s

並得到了這個結果:

1216308 /usr
23356   /lib64
73176   /root
440     /tmp
4       /selinux
4       /command
5574820 /var
4       /media
16      /lost+found
352388  /lib
8       /opt
0       /.autorelabel
4       /service
0       /sys
36500   /www
0       /proc
81785   /boot
7760    /bin
160     /dev
742949400       /home
14572   /sbin
0       /currentsize
0       /.autofsck
2092    /package
4       /srv
4       /mnt
27676   /etc
72944   /test

所以看起來主目錄是最大的,所以我重複了這個過程來找到 home 中最大的目錄:

# find /home -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s
133952  /home/advisio
16      /home/dovecot
2210824 /home/vpopmail
186500  /home/admin
37152   /home/ginger
511121816       /home/user1
229278612       /home/user2

我重複了這個過程,看到 user1 數據已經增長,所以我繼續在 user1 目錄中搜尋,找到了這兩個沉重的目錄:

281766156       /home/user1/www/log
207269420       /home/user1/www/fichiers

“fichiers”目錄的大小並不罕見,因為它用於儲存無數的 pdf 和圖片文件。所以我查看了日誌文件夾,發現了這個:

# ls -l
-rwxrwxrwx 1 vroom users 288586156425  2 juil. 15:34 log-sql-error.txt

我意識到你所說的關於我的搜尋方法是非常正確的。通過在錯誤的目錄中搜尋日誌,我設法錯過了一個 288 Gb 的日誌文件。

無論如何,我已經停止了httpd服務mysqld,清空了錯誤日誌,現在這是我的 df:

Filesystem     1G-blocks  Used Available Use% Mounted on
/dev/sda2           824G  505G      278G  65% /
tmpfs                32G    0G       32G   0% /dev/shm
/dev/sda1             1G    1G        1G  47% /boot

現在,當我搜尋繁重的文件和文件夾時,我會使用您的建議,謝謝!

第一:這個序列find . -type d -print0 | xargs -0 du | sort -n是令人難以置信的遞歸和低效的。

找到最大的文件find / -type f -print0 | xargs -0 du | sort -n已經更好了,效率find / -type f -printf "%s %p\n" |sort -n更高。

通常更能說明問題的是您在哪裡失去了磁碟空間并快速找到最大的目錄du-s),因為許多小文件也會加起來(想想郵件隊列、列印假離線等)

第二:當您執行find *“在我的根目錄中的每個目錄中”*時,您可能忽略了根目錄下的“隱藏”文件/目錄,/即以點開頭的簡單文件/目錄/.<name> 和不太明顯的文件/目錄,例如僅由空格/ /或 TAB 字元組成的文件/目錄.

從…開始:

find / -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s 

並從那開始。

您已經查看了可能仍保持打開狀態的已刪除文件,lsof 但您可能有寫入大型(臨時)文件的程序,觀看它可能會很有趣且有用sudo lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | head -n 50

引用自:https://serverfault.com/questions/703061