nfsを介するよりもローカルでrm -rfを実行する方が良いですか?

nfsを介するよりもローカルでrm -rfを実行する方が良いですか?

作業を実行する前に、ディレクトリがあるシステムにログインすることとNFSを介してディレクトリにログインすることrm -rfには時間に大きな違いがありますか?rm -rf

ベストアンサー1

もちろん、SSHが良いです。

Nfsは、さまざまなリモートプロシージャコールとデータ同期待ち時間を含む複雑なネットワークプロトコルを使用します。 SSH の場合、これは適用されません。

他にもロックがたくさんあります。 nfsのファイル削除は次のように機能します。

  1. あなたのrmコマンドはunlink()システムコールを提供します
  2. nfsドライバはそれをsunrpc要求に変換してnfsサーバーに送信します。
  3. nfs サーバーは、この sunrpc 要求をunlink()呼び出しに戻します。
  4. unlink()リモート側でこの呼び出しを実行します。
  5. 成功後、「Okay, done」に対応するRPC応答メッセージをクライアントに返します。
  6. クライアントのカーネルドライバは、それをunlink()元の呼び出しの終了コード0に戻します。rm
  7. rm次のファイルに繰り返して1に移動

今重要なことは次のとおりです。午後2時~7時の間rm待つ必要があります。次のunlink()呼び出しは非同期的に送信できますが、シングルスレッドであり、イベント指向のツールではありません。可能であっても依然としてトリッキーなnfsマウントフラグが必要です。結果が出ないまで待ちます。

NFSとすべてのネットワークファイルシステムは常にはるかに遅いです。


ほとんどの場合、次のトリックを使用すると、再帰的な削除をほぼ無限にすばやく実行できます。

  1. まず、ディレクトリを別の名前(mv -vf oldfilms oldfilms-)に移動します。
  2. バックグラウンドで削除(rm -rf oldfilms- &

すべてではありませんが、多くの点でこのディレクトリの削除はほぼ0回に発生したようです。


拡大する:@el.pascadoが彼の素晴らしいコメントで述べたように、実際に2-7を実行する必要があります。3倍すべてのファイルの場合:

  • ファイルかディレクトリかを確認する(lstat()システムコールを使用)
  • それから適切な仕事をしてください。通常のファイルunlink()とディレクトリの場合は、opendir()その中のすべてのファイル/ディレクトリを繰り返し削除し、最後closedir()にを削除しますrmdir()
  • readdir()最後に呼び出して、次のディレクトリエントリで繰り返します。

ファイルには3つのnfs RPCコマンドが必要で、ディレクトリには3つの追加コマンドが必要です。

おすすめ記事