2010-12-12 27 views
4

我有一個vps slice運行centos 5.5我應該有15個磁盤空間,但根據df,它似乎使我的磁盤空間使用量翻了一番。du -skh * in /返回與df在centos上大不相同的大小5.5

當我運行 du -skh *

在/ root身份獲得:

[[email protected] /]# du -skh * 
0  aquota.group 
0  aquota.user 
5.2M bin 
4.0K boot 
4.0K dev 
4.9M etc 
2.5G home 
12M  lib 
14M  lib64 
4.0K media 
4.0K mnt 
299M opt 
0  proc 
692K root 
23M  sbin 
4.0K selinux 
4.0K srv 
0  sys 
48K  tmp 
2.0G usr 
121M var 

這是什麼我已上傳到機一致,並增加了約5gigs。

但是當我運行df我得到:

[[email protected] /]# df 
Filesystem   1K-blocks  Used Available Use% Mounted on 
/dev/simfs   15728640 11659048 4069592 75%/
none     262144   4 262140 1% /dev 

它顯示我幾乎使用了12演出了。

什麼導致了這種差異,有什麼我可以做的,我計劃基於15演出的服務器,但現在它基本上只讓我有大約7演出的東西就可以了。

謝謝。

回答

11

此效應最常見的原因是已刪除的打開文件。

如果刪除文件在刪除時未被使用,內核將只釋放已刪除文件的磁盤塊。否則,將推遲到文件關閉或系統重新啓動。

一個常見的Unix世界中的技巧,以確保沒有臨時文件將留圍繞如下:

  • 進程創建並打開一個臨時文件

  • 雖然仍持開放文件描述符,進程取消鏈接(即刪除)文件

  • 該進程使用文件描述符正常讀取和寫入文件

  • 的進程關閉文件描述符當它這樣做,內核釋放的空間

  • 如果過程(或系統)意外終止,臨時文件已被刪除,並沒有清理是必要的。

  • 作爲獎勵,刪除文件可以減少在創建臨時文件時命名衝突的可能性,並且還會爲正在運行的進程提供額外的一層模糊 - 對除root用戶以外的任何人都是如此。

這種行爲確保進程沒有處理這個突然從腳底下拉出文件,也是過程不必爲了刪除文件相互協商。但對於那些來自Windows系統的用戶來說,這是意外的行爲,因爲在那裏通常不允許刪除正在使用的文件。

lsof命令,當以root身份運行,將顯示所有打開的文件,它會明確指出被刪除刪除的文件:

# lsof 2>/dev/null | grep deleted 
bootlogd 2024  root 1w  REG    9,3   58  917506 /tmp/init.0W2ARi (deleted) 
bootlogd 2024  root 2w  REG    9,3   58  917506 /tmp/init.0W2ARi (deleted) 

停止並重新啓動有罪的過程,或者只是重新啓動服務器應該解決這個問題。

刪除的文件也可以由內核保持打開狀態,例如,如果它是已安裝的文件系統映像。在這種情況下,卸載文件系統或重新啓動服務器應該有所裨益。

就你而言,根據「缺失」空間的大小來判斷,我會查找你用來設置VPS的文件的任何引用,例如,安裝後刪除的Centos DVD映像。

+0

感謝您提到內核可能持有該文件(因此lsof不顯示它)。我有一個很大的文件(一個稀疏的lvm卷組)與一個循環設備相關聯,並且正在佔用我的空閒空間,但當然,lsof並沒有顯示任何內容。 – Augusto 2012-01-22 13:10:07

2

我和FreeBSD服務器有同樣的問題。重啓幫助。

+0

你是對的重新開始解決它。 – Kalendae 2010-12-12 23:57:18

3

我遇到過的另一種情況,雖然看起來不是你的問題,但如果你將一個分區掛載到現有文件的「頂部」。

如果這樣做,可以有效地隱藏掛載到分區(掛載點)上的目錄中存在的現有文件。

解決方法:在安裝的分區上停止打開文件的任何進程,卸載分區,找到並移動/刪除現在出現在安裝點目錄中的所有文件。

相關問題