テクノロジー · 実用ガイド
rm -rf でも「Directory not empty」?戻るエントリを特定する
同じ directory か、残留・再生成する entry は何か、その owner が process、mount、NFS server、FUSE driver のどれかを証明するまで破壊的コマンドを繰り返しません。

同じ directory か、残留・再生成する entry は何か、その owner が process、mount、NFS server、FUSE driver のどれかを証明するまで破壊的コマンドを繰り返しません。
ENOTEMPTY は削除時に entry が残ったことを示しますが owner は示しません。 空に見える既定 listing は dotfile を省略し、remote/concurrent state を証明しません。
1. 対象 identity を固定する
正確な command、stderr、exit status、absolute path、parent、device、inode、filesystem type、mount source を保存します。symlink を非破壊で解決し、失敗名が同じ object を指すか確認します。
空に見える ls だけで安全と判断しません。別 container や mount namespace、bind mount、試行間の name replacement があり得ます。
2. 全 entry を二度記録する
dot entry と異常な byte name を列挙しますが、その出力を rm に渡しません。時刻付きの name、metadata、device/inode snapshot を二回取り、安定した child と再生成名を分けます。
ENOTEMPTY は削除時に entry が残ったことだけを示します。次の操作前に正確な child name と .nfs/.fuse_hidden pattern を保存します。
3. 戻る entry の owner を分類する
通常の local entry は生成 application/job を特定します。.nfs/.fuse_hidden は underlying file を開く process を探します。NFS は storage owner と client/server view を比較します。
無関係な process を kill せず、sudo で filesystem state が変わると仮定しません。creator や remote/userspace filesystem が名前を戻す場合があります。
4. 最小の修復を適用する
証明済み writer を停止し、handle を閉じ、または storage owner が remote/FUSE state を修復します。その後、検証済み child と directory だけを削除し、path を広げません。
directory replacement が承認された場合、owner、mode、ACL、label、mount role、service ownership を先に記録します。pathname の再作成は同じ契約ではありません。
5. 消失を検証し証拠を残す
削除後に snapshot を再取得し、既知の writer/cache interval を待ち、同じ namespace と authoritative storage view で継続して不在か確認します。
元 errno、owner process/storage layer、action、必要な hash/metadata、rollback を記録します。繰り返す NFS/FUSE divergence や I/O error は retry loop で隠しません。
