Rhel

df 命令未顯示正確的值

  • July 19, 2013

這是一個 RHEL 伺服器,我在它上面執行一個 MySQL 伺服器,數據庫和日誌文件(但是,日誌記錄被禁用)位於/srv有足夠空間的目錄中。

最近我有一個崩潰的表,所以我嘗試修復它,但第二天我發現 MySQL 無法響應許多查詢,並出現錯誤指示沒有磁碟空間:

ERROR 1030 (HY000): Got error 28 from storage engine

所以我執行了以下命令來查看佔用空間的內容

[root@tms /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/server-slash
                     9.9G  9.5G     0 100% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             485M   58M  402M  13% /boot
/dev/mapper/server-var
                     739G  252G  450G  36% /srv

令人驚訝的是/目錄。但更令人驚訝的是,下面的目錄/並沒有表示已用空間超過2 GB,而df顯示的總空間為9.9 GB/

[root@tms /]# du -sh /*
7.5M    /bin
48M     /boot
200K    /dev
24M     /etc
4.0K    /home
223M    /lib
21M     /lib64
16K     /lost+found
4.0K    /media
4.0K    /mnt
183M    /opt
...deleted some file-not-found errors for files under /proc
0       /proc
144K    /root
14M     /sbin
4.0K    /selinux
252G    /srv
0       /sys
44K     /tmp
917M    /usr
259M    /var

那麼為什麼會df顯示錯誤的值呢?我怎樣才能找出實際佔用空間的內容?

一種常見的程式技術是創建一個臨時文件並立即 unlink() 它。這使文件(及其空間)在程序執行期間可用,但在使用它的程序終止時會自動導致其刪除。一個優點是不需要編寫結語(清理)程式碼。

要確定您是否有一個打開未連結文件的程序,請執行以下操作:

lsof -a +L1 /dev/server_slash

(或者)

lsof +D /dev/server_slash +L1

查找 NLINK 值為零 (0) 的任何文件。這些將是具有零連結計數的文件,當最後一個程序終止時將消失。SIZE/OFFSET 列將提供相關文件的字元大小。

引用自:https://unix.stackexchange.com/questions/82618