問題:硬碟顯示被寫滿,但是用du -sh /*檢視時佔用硬碟空間之和還遠小於硬碟大小
即找不到硬碟分割槽是怎麼被寫滿的。

今天下午接到一學生緊急求助,說生產線伺服器硬碟滿了。該刪的日誌都刪掉了。可空間還是滿的,情況危急啊。這個問題,在多年以前直接和間接的遇到過3-4次。以前太懶惰了,這次記錄下來和大家分享。

相關日誌如下:

█ 檢視硬碟分割槽大小
[root@www ~]# cat /etc/redhat-release 
CentOS release 5.3 (Final)
[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             117G  111G     0 100% /
/dev/sda1             145M   12M  126M   9% /boot
tmpfs                 3.0G     0  3.0G   0% /dev/shm
這是一臺web伺服器(apache+tomcat+mysql)
通過dh -h命令檢視 總大小117G,使用了111G
[root@www /]# fdisk -l

Disk /dev/sda: 146.8 GB, 146815733760 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          19      152586   83  Linux
/dev/sda2              20        2108    16779892+  82  Linux swap / Solaris
/dev/sda3            2109       17849   126439582+  83  Linux
[root@www /]# fdisk -l /dev/sda3

Disk /dev/sda3: 129.4 GB, 129474132480 bytes
255 heads, 63 sectors/track, 15741 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sda3 doesn't contain a valid partition table
==========================================================================================
█ 使用du命令檢視到底哪些目錄佔用了空間
[root@www /]# du -sh /*
8.6M    /bin
6.1M    /boot
2.8G    /data ===》這裡是DB目錄
124K    /dev
60M     /etc
1.6G    /home ===》這裡是日誌目錄
120M    /lib
24M     /lib64
16K     /lost+found
8.0K    /media
0       /misc
12K     /mnt
0       /net
8.0K    /opt
0       /proc
614M    /root
35M     /sbin
8.0K    /selinux
24K     /server
8.0K    /srv
0       /sys
24K     /tmp
2.5G    /usr
29G     /var  ==》這裡是www目錄

可以看出,上面所有目錄之和 遠小於總的空間佔用111G,是什麼佔用了硬碟,還查不到呢?
---------------
解答:
出現上面問題原因:
在apache/tomcat服務在執行狀態下,清空了執行服務的日誌,這裡是清理了當天或正在寫入的apache及tomcat的日誌檔案,從而導致了上面問題。(有關原理細節見下文)

引申下:
一般情況下,大多數服務(包括指令碼)在執行時,是不能刪除當前正在寫入的日誌檔案的。這點請大家要記牢。

本文的解決辦法:
查詢機器自身的服務,然後重起apache和tomcat。
重起apache後:
[root@www 07]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             117G  109G  2.3G  98% /
/dev/sda1             145M   12M  126M   9% /boot
tmpfs                 3.0G     0  3.0G   0% /dev/shm

重起tomcat後:
[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             117G   38G   74G  34% /
/dev/sda1             145M   12M  126M   9% /boot
tmpfs                 3.0G     0  3.0G   0% /dev/shm

刪除檔案原理圖:

本文出自 “老男孩linux運維” 部落格,請務必保留此出處http://oldboy.blog.51cto.com/2561410/612351