多数のファイルを含むNFSディレクトリでlsコマンドがゆっくり中断されるのはなぜですか?

多数のファイルを含むNFSディレクトリでlsコマンドがゆっくり中断されるのはなぜですか?

NFSには多くのファイルを含むディレクトリがあることがわかりました。

ls *

次にCtrl-Cを押します。 lsが再び表示されるまでに少し時間がかかります(例:20秒)。

なぜ? lsコマンドを修正して応答性を高めることはできますか?

ベストアンサー1

を実行するときにls *最初に起こるのは、シェルが現在のディレクトリのリストを取得することです。ディレクトリが大きく、サーバーが遅い場合は時間がかかることがあります。

シェルが現在のディレクトリにファイル名のリストを持っている場合は、リストをソートして(ネットワーク対話と比較して非常に高速です)、lsこのlsコマンドは各ファイルを順番に検索してそのメタデータを検索します(stat呼び出されます)ファイルがディレクトリであることを確認するためにファイルがディレクトリである場合は、ディレクトリ自体ではlsなくその内容を一覧表示します。

Ctrl+を押すと、C現在のNFS操作は中断されません。システムが一貫していない可能性があるため、どこでもファイルシステムの操作を中断することはできません。ファイルを読み込んでもアクセス時間が更新されることがあります。ほとんどの場合、ファイルに対する基本的な読み取りまたは書き込み操作は人間の基準に基づいて即座に行われますが、NFSは例外であり、特に遅いネットワークを介して大量のデータを転送する場合はさらにそうです。

したがって、Ctrl+を押すと、C次の効果のみが適用されます。

  • シェルが現在ファイル名のリストを生成している場合は、リストが完全に検索されます。
  • lsサーバーがメタデータを提供すると、サーバーが起動して現在のファイルのメタデータをインポートします。
  • が起動して現在のディレクトリをリストしている場合、リストはls完全に検索されたか、少なくともその一部以降に検索されました。

これはコマンドのエラーではありませんls(コマンドがまだ起動していない可能性があります)。シェルのせいではなく、NFSのせいです。 NFSはかなり遅いです。

おすすめ記事