2008-08-26 27 views
0

我最近在FreeBSD服務器上的驅動器上用完了磁盤空間。我截斷了導致問題的文件,但運行df時沒有看到反映出的變化。當我在分區上運行du -d0時,它顯示正確的值。有沒有辦法強制這些信息被更新?什麼導致這裏的輸出有所不同?獲得`df`以顯示FreeBSD上的更新信息

回答

2

這可能集中在如何截斷該文件。 DF作爲this post on unix.com explains報告不同的事情。正因爲空間沒有使用並不一定意味着它是免費的...

3

在BSD一個目錄項僅僅是底層文件數據(稱爲一個inode)多次提到的一個。當使用rm(1)命令刪除文件時,只有引用計數減少。如果引用計數仍爲正數(例如,由於符號鏈接,文件具有其他目錄條目),則不會刪除底層文件數據。

較新的BSD用戶往往沒有意識到,有一個文件打開程序還拿着一個參考。在進程使用它時,可以防止底層文件數據消失。如果引用計數下降到零,進程關閉文件,則文件空間被標記爲可用。此方案用於避免Microsoft Windows類型的問題,因爲它不會讓您刪除文件,因爲某些未指定的程序仍會將其打開。

一個簡單的方法來觀察,這是做到以下幾點

cp /bin/cat /tmp/cat-test 
/tmp/cat-test & 
rm /tmp/cat-test 

直到後臺進程被終止通過的/ tmp/CAT-測試中使用的文件空間仍保持分配和不可用所報告的DF(1 )但du(1)命令將無法解釋它,因爲它不再有文件名。

注意,如果該系統應不進程關閉文件崩潰則該文件的數據將仍然存在,但是未引用的,(8)的運行,將需要一個fsck的恢復文件系統空間。

將文件打開的過程是newsyslog(8)命令將信號發送到syslogd或其他日誌程序以通知它們應該關閉並重新打開日誌文件並將其旋轉後的一個原因。

Softupdates也可以實現文件系統可用空間作爲實際的inode空間恢復可被推遲;可以使用sync(8)命令來更快地發生這種情況。