Linux磁碟滿問題分析

一見發表於2018-12-21

線上一臺Linux伺服器最近經常磁碟根分割槽滿告警,
但不是普通的日誌檔案或資料檔案過多過大,現象如下:

1)執行“df -h”檢視各分割槽空間的使用情況
[root@XEN64 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  8.7G  535M  95% /
devtmpfs        7.7G     0  7.7G   0% /dev
tmpfs           7.7G     0  7.7G   0% /dev/shm
tmpfs           7.7G  666M  7.1G   9% /run
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/sda3        20G  3.3G   16G  18% /usr/local

可以看到根分割槽使用率超過了預警值,
進入根目錄,檢視根目錄下各子目錄的大小:
[root@XEN64 /]# du -sm *
0       bin
180     boot
0       dev
24      etc
3       home
0       lib
0       lib64
1       lost+found
1       media
1       mnt
32      opt
du: cannot access 'proc/17842/task/17842/fd/4': No such file or directory
du: cannot access 'proc/17842/task/17842/fdinfo/4': No such file or directory
du: cannot access 'proc/17842/fd/4': No such file or directory
du: cannot access 'proc/17842/fdinfo/4': No such file or directory
0       proc
2       root
666     run
0       sbin
1       srv
0       sys
96      tmp
5856    usr
221     var

進一步檢查/usr目錄:
[root@XEN64 /usr]# du -sm *
358     1.2-compat
164     bin
1       etc
1       games
33      include
912     lib
432     lib64
101     libexec
3269    local
1       man
46      sbin
547     share
1       src
0       tmp

對比du和df的結果,可以發現兩者的已使用大小不一致,
du命令得到的已用大小遠小於df命令已用大小,初步猜測存已被刪除檔案仍然有程式在寫它,導致du命令發現不了。
如果允許,最簡單的處理方式是重啟機器,不然用下列命令找出被刪除的,但仍然可能有程式在寫它的檔案:
pids=`ps aux|awk '{print $2}'`;for pid in $pids; do lsof -p $pid|grep del; done

見到廬山真面目:
[root@XEN64 /proc]# pids=`ps aux|awk '{ if (NR>1) print $2}'`;for pid in $pids; do lsof -p $pid|grep del; done
stati 28885 root    1w      REG        8,1 5969132048     409096 /tmp/process_monitor-root.log (deleted)
stati 28885 root    2w      REG        8,1 5969132048     409096 /tmp/process_monitor-root.log (deleted)
stati 28885 root    3u      REG        8,4   20480039   35651587 /data/consumer/log/consumer.log.5 (deleted)
consumer 29756 root    1w   REG        8,1 5969132048     409096 /tmp/process_monitor-root.log (deleted)
consumer 29756 root    2w   REG        8,1 5969132048     409096 /tmp/process_monitor-root.log (deleted)
consumer 29756 root    3u   REG        8,4   20480039   35651587 /data/consumer/log/consumer.log.5 (deleted)

果然是有大量的已經刪除檔案,辦法要麼重啟,要麼重啟持有它們的程式,問題即可解決。
 

相關文章