/home
私は、他のホストからNFSを介してマウントされた共有コンパイルサーバーの非ルートユーザーです。~/a/b
多くのサブディレクトリがあるディレクトリがありますc1,c2,...
。私は~/a/b
ほとんどのcN
ディレクトリを正常に完全に削除したかった。ただし、一部(たとえばc1
)には完全にアクセスできません。実行(cd
入力)できますが、リスト(ls
)はもちろん削除することはできません。と言うと、rm -rf ~/a/b/c1
プロセスは一時停止D
状態になります。
この問題を解決するには、root以外のユーザーとして何をすることができますか~/a/b
?
更新:NFSを除外するためにファイルサーバーにSSHで接続しましたが、そこでも操作を実行できないため、NFSの問題はまったくないようです。しかし、なぜカーネルはディレクトリの削除を拒否するのですか?
答え1
ファイルやディレクトリを削除するのはアトミックな操作であり、システムコールが必要なので、コマンドが中断されるとカーネルが中断されたためrm
です。 NFS ファイルシステムでは、(通常) サーバーが応答しなくなって発生することがあります。ローカルファイルシステムでは、これはハードウェアエラーのために発生する可能性があり、通常はそうです。ディスクに欠陥がある可能性があります。カーネルログでこれを確認できます。
答え2
検索と削除操作中に中断した場合は、次のようにプロセスのタイムアウトを設定できます(ここではbash
Windowsがcygwinを使用して呼び出します)。
bash -c "find . -regex ".+fileDirToDelete" -exec rm -Rf {} \; & pid=$!; sleep 100; kill $pid"
答え3
プロセスがバックグラウンドでファイルにアクセスしていることを確認してください(例:現在の作業ディレクトリ)。私はlsof
同じツールを使ってfuser -v
ディレクトリをめちゃくちゃにするプロセスがあることを確認して最初に削除します。必要に応じてnfsクライアントサービスを再起動し、ディレクトリが存在することを確認し、同じシェルの現在の作業ディレクトリの場合はディレクトリを削除しないでください。