Debian
設備錯誤上沒有剩餘空間,但 df 報告有更多可用空間
我使用 Apache2 在我的 Debian 網路伺服器上的 PHP 會話
mod_php
似乎隨機失敗,說沒有空間來編寫它們:sudo tail -60 /var/log/apache2/error.log [Fri Jan 30 15:55:35 2015] [error] [client xxx.xxx.xxx.xxx] PHP Warning: session_start() [<a href='function.session-start'>function.session-start</a>]: open(/tmp/sess_555555555555555555, O_RDWR) failed: No space left on device (28) in /path/to-first-session-use/core/bootstrap.php on line 18
當我嘗試:
ls /tmp
它只是永遠掛起,所以這很糟糕。
但是當我檢查可用空間並檢查 inode 使用是否合理時……
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 150G 121G 22G 85% / tmpfs 2.0G 0 2.0G 0% /lib/init/rw udev 10M 16K 10M 1% /dev tmpfs 2.0G 4.0K 2.0G 1% /dev/shm $ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 19922944 11143605 8779339 56% / tmpfs 513524 4 513520 1% /lib/init/rw udev 513524 135 513389 1% /dev tmpfs 513524 3 513521 1% /dev/shm
數字看起來不錯。當然,85% 比我想要的多,但不是 99% 或任何東西。
我懷疑這是一個問題,因為 5 年沒有重新啟動機器,並且可能創建了很多小文件,但我得到的 inode 資訊有點矛盾。我應該在哪裡調查?
編輯:
ls -l /
drwxrwxrwt 4 root root 692M Feb 1 11:09 tmp/ drwxr-xr-x 10 root root 4.0K Jan 1 2013 usr/ drwxr-xr-x 14 root root 4.0K Oct 7 2010 var/ ...etc
可能是
/tmp/
目錄本身充滿了未清理的陳舊 PHP 會話;這意味著問題的根源可能與/tmp/
目錄本身隔離。如果是這種情況,我會刪除所有/tmp/sess_*
文件。首先,列出所有sess_*
文件,如下所示:ls -la /tmp/sess_*
或者你可以
wc
這樣計數:ls -la /tmp/sess_* | wc -l
現在,一旦您確認那裡有一些瘋狂的文件,請繼續執行以下命令來刪除
/tmp/sess_*
文件:sudo rm -rf /tmp/sess_*
短暫的會話文件將被吹走。
但是另一種蠻力(但相對安全)的處理方式是清除
/tmp
目錄本身,重新創建/tmp
目錄並重新啟動伺服器。由於該
/tmp
目錄基本上是記憶體材料的編碼筆,因此那裡沒有任何有效的內容。所以我最好的建議是執行以下命令來刪除和重新建構/tmp
目錄。rm -rf /tmp && mkdir /tmp/ && chown root:root /tmp && chmod 1777 /tmp
現在一個襯里基本上是一個由它連接的 shell 命令列表
&&
,它將首先刪除/tmp
、重新創建/tmp
、將所有權更改/tmp
回root:root
,然後為/tmp
目錄設置適當的權限。如果您願意,如果您覺得這樣做更安全,您可以一個一個地執行每個命令。sudo rm -rf /tmp sudo mkdir /tmp sudo chown root:root /tmp sudo chmod 1777 /tmp
完成後,我建議重新啟動伺服器。事情應該再次平靜下來。