
在過去的 15 個小時裡,我一直在嘗試從 centos 伺服器上刪除一個目錄,rm -Rf /root/FFDC
但遇到了很大的困難。我無法列出目錄,因為它會掛起系統(文件太多?),但我可以看到目錄大小不是通常的 4096 字節,而是 488MB!
[root@IS-11034 ~]# ls -al
total 11760008
drwxr-x--- 31 root root 4096 Aug 10 18:28 .
drwxr-xr-x 25 root root 4096 Aug 10 16:50 ..
drwxr-xr-x 2 root root 488701952 Aug 11 12:20 FFDC
我檢查了索引節點,一切似乎都很好。我檢查了 top,rm
15 小時後 CPU 使用率仍為 0.7%。檔案系統類型為 ext3。
除了備份和格式化之外,我現在不知道該去哪裡。
答案1
還ls -1f /root/FFDC
慢嗎?使用 -1f 時,不會對輸出進行排序,並且文件詳細資訊將被忽略。
如果上面的 ls 運行得很快,也許類似的東西find /root/FFDC | xargs rm -vf
會更快?普通程式可能會執行可能可以跳過的rm -rf
所有類型的遞歸。find
或者然後不。
您的檔案系統是否安裝了同步選項?如果是,那麼寫入/刪除效能比它可能的要慢得多非同步。如果有疑問,您可以嘗試mount -o remount,async /
(或者mount -o remount,async /root
如果這對您來說是一個單獨的檔案系統)。
答案2
您是否考慮過卸載檔案系統,然後執行 e2fsck 檢查檔案系統是否有錯誤?我會在備份、格式化、還原之前嘗試這個。
答案3
在檔案系統上執行 fsck 將解決該問題。當目錄曾經包含許多文件但現在不再包含時,通常會發生這種情況。目錄大小給出的數字很大,效能會受到影響。
答案4
我不確定fsck(8)
是否會重新組織目錄,您可以嘗試該-D
標誌(如 中所述e2fsck(8)
)。如果沒有,並且該目錄中確實沒有數百萬個文件,則可能類似於以下內容給出了一個合理大小的目錄:
cd /root mv FFDC FFCD-old mkdir FFCD # 調整 FFDC 的權限 mv FFDC-old/* FFDC # 檢查/移動 FFDC-old 中的任何 .xxx 檔案/目錄 rmdir FFCD-old
至少有幾個 bash 版本會出現.a[^.]*
錯誤和包含之類的錯誤.
,..
無論如何,否則您可以嘗試下一步到最後一步mv FFDC-old/.* FFDC
像ext3/ext4 這樣的檔案系統本質上將目錄處理為不可移動節點的連結列表,其中包含檔案名稱+索引節點號的空間,當檔案取消連結時,名稱的空間被釋放(並且應該與空閒的鄰居條目合併,如果有的話)。所以這麼大的目錄只有很少的文件能被創建,但這並不容易。也許創建數百萬個指向相同幾個檔案的硬連結?創建/刪除數百萬個帶有精心設計的名稱的連結?無論發生了什麼,都值得調查;這是一個惡作劇,某種檔案系統故障,......?