Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

rm -rf 仍顯示「Directory not empty」?先證明哪個項目持續回來

不要重複破壞性命令;先確認是否仍為同一目錄、哪個項目殘留或重建,以及負責者是程序、掛載、NFS 伺服器或 FUSE 驅動。

確認目錄身分、項目與擁有者的示意圖
原創插畫:證明哪個項目殘留或返回。 Watch at Ease

不要重複破壞性命令;先確認是否仍為同一目錄、哪個項目殘留或重建,以及負責者是程序、掛載、NFS 伺服器或 FUSE 驅動。

ENOTEMPTY 表示刪除時仍有項目,但不指出擁有者。 預設列表看似空白可能漏掉 dotfile,也不能證明遠端或並發狀態。

1. 凍結目標身分

保存完整命令、stderr、結束狀態、絕對路徑、父路徑、device、inode、檔案系統類型與掛載來源。以非破壞方式解析連結,確認失敗名稱仍指向同一物件。

不要由看似空白的 ls 推論安全。命令可能在不同 container 或 mount namespace,bind mount 可能遮住另一棵樹,名稱也可能在嘗試之間被替換。

2. 兩次擷取全部項目

列出 dot 項目與異常位元組名稱,但不要把輸出直接餵給 rm。製作兩份含時間的名稱、metadata 與 device/inode 快照,區分穩定子項與刪除後重建的名稱。

ENOTEMPTY 只表示刪除當下仍有項目,不解釋原因。再次操作前保存精確子項名稱及 .nfs 或 .fuse_hidden 模式。

3. 分類回復項目的擁有者

一般本機項目要找出建立它的程式或工作;.nfs 或 .fuse_hidden 佔位要找仍開啟底層檔案的程序;NFS 則與儲存負責人比較 client/server 視圖。

不要終止無關程序,也不要假設 sudo 能改變檔案系統狀態。建立者可立即回填,遠端或使用者空間檔案系統也可能保留 client 未顯示的名稱。

4. 套用最小修復

停止已證明的 writer、關閉已證明的 handle,或由儲存負責人修復遠端/FUSE 狀態。只刪除已驗證的子項與目錄,不擴大路徑、不跨檔案系統,也不盲目重建受管掛載點。

若批准替換目錄,先記錄 owner、mode、ACL、label、mount role 與 service ownership;只重建名稱不等於保留契約。

5. 驗證未再出現並保存證據

刪除後重做原始名稱與身分快照,等待已知 writer 或 cache 週期,從同一 namespace 與權威儲存視圖確認路徑持續不存在。

記錄原始 errno、責任程序或儲存層、動作、相關雜湊/metadata 與 rollback。反覆的 NFS/FUSE 分歧或 I/O 錯誤應升級,不要用重試隱藏。

本機、活動與遠端目錄項目決策圖
原創插畫:分類後選擇最小修復。 Watch at Ease