今天在運行R腳本的時候報了個錯:Fatal error: cannot create 'R_TempDir'。排除了是自己寫的代碼的問題,想着應該是某個沒見過的原因,google之,發現網上的說法是/tmp文件夾占滿了磁盤空間。
運行 df 命令:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VG00-LV01
50G 47G 16M 100% /
發現確實有個分區被占滿了。。。
第一次碰到這種情況,繼續google之,使用如下命令
du -sh /* | sort -nr
可以得到 / 目錄下所有文件和目錄的大小的排序結果。
從中找出最大的,在我的機器中/var文件占用了47個G的大小,應該就是它了,使用上面的命令繼續追蹤:
du -sh /var/* | sort -nr du -sh /var/log/* | sort -nr du -sh /var/log/httpd/* | sort -nr
一層一層往下追蹤,最后發現是 httpd/目錄下的ssl_error_log占據了超大磁盤空間,看了下文件內容,估計是某次鏈接導致了大量錯誤信息被一遍遍的循環寫入。
不多想,直接把這文件刪除。
運行 df -i:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VG00-LV01
3276800 226882 3049918 7% /
tmpfs 4069835 7 4069828 1% /dev/shm
/dev/md0 51200 39 51161 1% /boot
/dev/mapper/VG00-LV02
56705024 11756 56693268 1% /opt
沒有太大使用量,這是因為-i查看inode節點情況,和文件大小是不同概念。
再次運行df -h命令:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VG00-LV01
50G 47G 16M 100% /
仍然還是100%,明明已經刪除了啊。。。 不解,繼續google之。。
結論是“在Linux中,當我們使用rm在linux上刪除了大文件,但是如果有進程打開了這個大文件,卻沒有關閉這個文件的句柄,那么linux內核還是不會釋放這個文件的磁盤空間,最后造成磁盤空間占用100%,整個系統無法正常運行。這種情況下,通過df和du命令查找的磁盤空間,兩者是無法匹配的,可能df顯示磁盤100%,而du查找目錄的磁盤容量占用卻很小。”
找出文件使用者,kill掉:
lsof -n | grep deleted
找到使用ssl_error_log文件的進程,kill掉,然后再次df -h,發現已經沒有100%的情況了。
處理完成~~
