Linux

確定 inode 使用的位置

  • May 11, 2017

我最近在開發 Web 伺服器上安裝了 Munin 以跟踪系統使用情況。我注意到系統的 inode 使用量每天上升大約 7-8%,儘管磁碟使用量幾乎沒有增加。我猜有些東西正在寫大量的小文件,但我找不到什麼/在哪裡。

我知道如何查找磁碟空間使用情況,但我似乎找不到總結 inode 使用情況的方法。

有沒有一種按目錄確定 inode 使用情況的好方法,以便我可以找到使用的來源?

不要指望這會很快執行……

cd 到您懷疑可能存在包含大量 inode 的子目錄的目錄。如果此腳本花費大量時間,您可能已經找到了文件系統中的查找位置。/var 是一個好的開始…

否則,如果您切換到該文件系統的頂層目錄並執行它並等待它完成,您將找到包含所有 inode 的目錄。

find . -type d | 
while 
 read line  
do 
 echo "$( find "$line" -maxdepth 1 | wc -l) $line"  
done | 
sort -rn | less

我不擔心分類的成本。我執行了一個測試,對 350,000 個目錄的未排序輸出進行排序花了 8 秒。最初的發現花了。真正的成本是在 while 循環中打開所有這些目錄。(循環本身需要 22 秒)。(測試數據在具有 350,000 個目錄的子目錄上執行,其中一個有 100 萬個文件,其餘的有 1 到 15 個目錄)。

很多人指出 ls 並不擅長,因為它對輸出進行排序。我試過迴聲,但這也不是很好。其他人指出 stat 提供了此資訊(目錄條目數),但它不可移植。事實證明,find -maxdepth 在打開目錄和計算 .files 方面真的很快,所以……這裡是……每個人的積分!

引用自:https://serverfault.com/questions/38907