作業を実行する前に、ディレクトリがあるシステムにログインすることとNFSを介してディレクトリにログインすることrm -rf
には時間に大きな違いがありますか?rm -rf
ベストアンサー1
もちろん、SSHが良いです。
Nfsは、さまざまなリモートプロシージャコールとデータ同期待ち時間を含む複雑なネットワークプロトコルを使用します。 SSH の場合、これは適用されません。
他にもロックがたくさんあります。 nfsのファイル削除は次のように機能します。
- あなたの
rm
コマンドはunlink()
システムコールを提供します - nfsドライバはそれをsunrpc要求に変換してnfsサーバーに送信します。
- nfs サーバーは、この sunrpc 要求を
unlink()
呼び出しに戻します。 unlink()
リモート側でこの呼び出しを実行します。- 成功後、「Okay, done」に対応するRPC応答メッセージをクライアントに返します。
- クライアントのカーネルドライバは、それを
unlink()
元の呼び出しの終了コード0に戻します。rm
rm
次のファイルに繰り返して1に移動
今重要なことは次のとおりです。午後2時~7時の間rm
待つ必要があります。次のunlink()
呼び出しは非同期的に送信できますが、シングルスレッドであり、イベント指向のツールではありません。可能であっても依然としてトリッキーなnfsマウントフラグが必要です。結果が出ないまで待ちます。
NFSとすべてのネットワークファイルシステムは常にはるかに遅いです。
ほとんどの場合、次のトリックを使用すると、再帰的な削除をほぼ無限にすばやく実行できます。
- まず、ディレクトリを別の名前(
mv -vf oldfilms oldfilms-
)に移動します。 - バックグラウンドで削除(
rm -rf oldfilms- &
)
すべてではありませんが、多くの点でこのディレクトリの削除はほぼ0回に発生したようです。
拡大する:@el.pascadoが彼の素晴らしいコメントで述べたように、実際に2-7を実行する必要があります。3倍すべてのファイルの場合:
- ファイルかディレクトリかを確認する(
lstat()
システムコールを使用) - それから適切な仕事をしてください。通常のファイル
unlink()
とディレクトリの場合は、opendir()
その中のすべてのファイル/ディレクトリを繰り返し削除し、最後closedir()
にを削除しますrmdir()
。 readdir()
最後に呼び出して、次のディレクトリエントリで繰り返します。
ファイルには3つのnfs RPCコマンドが必要で、ディレクトリには3つの追加コマンドが必要です。