var分割槽不足%15問題處理

yepkeepmoving發表於2016-10-14
現象描述
        凌晨收到值班同事電話,一臺DB伺服器var分割槽報警,顯示磁碟空間(inodes)不足%15,具體告警內容如下:
        Free inodes is less than 15% on volume /var
題分析
        收到電話後第一印象可能是由於/var/log下的日誌、/var/spool/clientmqueue導致var分割槽佔用空間較大。
處理步
        登陸伺服器,透過df -h 檢視磁碟空間使用情況。
         df -h
        Filesystem      Size  Used Avail Use% Mounted on
        /dev/sda7       6.0G  493M  5.2G   9% /
        tmpfs            32G     0   32G   0% /dev/shm
        /dev/sda1       124M   57M   62M  49% /boot
        /dev/sda8       1.1T   84G  929G   9% /home
        /dev/sda2       6.0G  2.1G  3.6G  37% /usr
        /dev/sda3       4.0G  1.7G  2.2G  44% /var
         發現磁碟使用空間還有很多,為什麼zabbix監控會報出var磁碟分割槽不足%15的使用情況呢?告警內容已經提示是inodes不足,下面就給出答案:
         df -i
        Filesystem       Inodes  IUsed    IFree IUse% Mounted on
        /dev/sda7        393216   9179   384037    3% /
        tmpfs           8240103      1  8240102    1% /dev/shm
        /dev/sda1         32768     46    32722    1% /boot
        /dev/sda8      71000064  12127 70987937    1% /home
        /dev/sda2        393216  87909   305307   23% /usr
        /dev/sda3        262144 222981    39163   86% /var        
        這裡我們看到var分割槽的inode使用情況已經不足%15了,因此我們可以明白為什麼會收到那條告警資訊了。瞭解了為什麼,那麼就具體尋找var下面哪個目錄較大、零碎檔案較多,從而清理分割槽空間。
        透過cd  /var/ ,透過du -hs * 發現磁碟空間最大的檔案來自/var/spool目錄,第一印象可能是/var/spool/clientmqueue,但進入發現實際佔用較大空間的是/var/spool/postfix/maildrop
這個目錄,這個目錄一般是系統郵件的回收站,刪除、丟棄的郵件會放到這裡,我們只需要刪除這裡的檔案即可騰出多餘的INode,從而減低/var空間使用率。
       cd /var/spool/postfix/maildrop
       ls |xarg-n 10 rm -rf
        df -i
        Filesystem       Inodes IUsed    IFree IUse% Mounted on
        /dev/sda7        393216  9179   384037    3% /
        tmpfs           8240103     1  8240102    1% /dev/shm
        /dev/sda1         32768    46    32722    1% /boot
        /dev/sda8      71000064 12127 70987937    1% /home
        /dev/sda2        393216 87909   305307   23% /usr
        /dev/sda3        262144  2409   259735    1% /var
        此時磁碟inode明顯降低,告警也隨之消除。
深入分
        為何/var/spool/postfix/maildrop目錄會生成大量的檔案?
        cat /etc/crontab   
        SHELL=/bin/bash
         PATH=/sbin:/bin:/usr/sbin:/usr/bin
        MAILTO=root
        HOME=/

         cat /etc/cron.d/0hourly
        SHELL=/bin/bash
        PATH=/sbin:/bin:/usr/sbin:/usr/bin
        MAILTO=root
        HOME=/
        這裡刪除郵件會自動儲存root使用者下的/var/spool/postfix/maildrop目錄中,我們可以透過以下方式避免:
        將MAILTO=root修改為MAILTO=空值即可,然後重啟crond服務 ( service crond restart)。
擴充套件
        1)目錄/var/spool/clientmqueue/也容易產生較多的零碎檔案,其原因是由於系統中有使用者開啟了cron任務,而cron中執行的程式有輸出內容,輸出內容會以郵件形式發給cron的使用者,而sendmail沒有啟動所以就產生了這些檔案。解決辦法如下:
            清理/var/spool/clientmqueue/下面的檔案,cd /var/spool/clientmqueue/ ;ls |xargs -n 10 rm -rf ;
            檢視產生/var/spool/clientmqueue/檔案的內容,找到對應的具體cron任務
            將任務指令碼輸出新增  >/dev/null  2>&1
        2)如果透過df  -h 和 df -i發現 分割槽空間很大,但裡面檔案幾乎沒有,即磁碟空間沒有被釋放。導致這種原因一般是由於磁碟有些程式用到了這個分割槽下的檔案,使用者在沒有停掉程式的情況下清理了這些檔案,但程式還在,從而磁碟空間沒有被釋放。解決方法如下:
            lsof|grep deleted
            mysqld     5668     mysql    5u      REG                8,3        0    1572866 /tmp/ibHVyCeJ (deleted)
            mysqld     5668     mysql    6u      REG                8,3        0    1572871 /tmp/ibW1Z6Gn (deleted)
            mysqld     5668     mysql    7u      REG                8,3        0    1572922 /tmp/ibz4HB91 (deleted)
            mysqld     5668     mysql    8u      REG                8,3        0    1572923 /tmp/ibFbld7k (deleted)
            mysqld     5668     mysql   12u      REG                8,3        0    1572924 /tmp/ibMFN1EZ (deleted)
            找到程式,直接殺死即可(也可以透過重啟作業系統解決)
    




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27067062/viewspace-2126313/,如需轉載,請註明出處,否則將追究法律責任。

相關文章