CentOS 伺服器 - 可用磁碟空間不斷下降
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