質問: ディレクトリあたりのファイル数 約100000個の小さなファイルを含むディレクトリがあります(各ファイルは1〜3行で、各ファイルはテキストファイルです)。サイズは、ディレクトリはそれほど大きくありません(<2gb)。このデータは、専門的に管理されているnfsサーバーにあります。サーバーはlinuxを実行します。ファイルシステムはext3だと思いますが、よくわかりません。また、サーバーへのrootアクセス権がありません。これらのファイルは、私が制御できない大規模な科学実験の出力です。しかし、私は結果を分析する必要があります。このディレクトリでのi/o操作/処理は非常に遅くなります。ファイルを開く(pythonではfopen)、開いているファイルから読み取る、ファイルを閉じるなど、すべて非常に低速です。 bashのls、duなどでは機能しません。質問は:linuxのディレクトリにあるファイルの最大数は、処理、fopen、読み取りなどを行うのに実用的な方法でいくつですか?答えは、fsの種類、カーネルのバージョン、サーバーのバージョン、ハードウェアなど、多くの要素に依存することを理解しています。可能な場合は、経験則にしたいだけです。
回答: ご想像のとおり、それは多くのことに依存します。主にファイルシステムのタイプとオプション、そしてある程度はカーネルのバージョンです。 ext2/ext3/ext4シリーズでは、dir_indexオプションが表示されたとき(ext3の最初のリリース後のある時点)に大幅な改善がありました。これにより、ディレクトリが線形ではなく検索ツリー(対数時間アクセス)として保存されます。リスト(線形時間アクセス)。これはnfsを介して見ることができるものではありませんが、管理者と連絡を取り合っている場合は、tune2fs -l /dev/something |grep featuresを実行するように管理者に依頼できます(アップグレードするように説得することもできますか?)。重要なのはファイルの数だけで、サイズは関係ありません。dir_indexを使用しても、100000は大きく感じられます。理想的には、ファイルを作成するプログラムの作成者に、サブディレクトリのレベルを追加してもらいます。パフォーマンスを低下させないために、dir_indexを使用しないext2またはext3、およびdir_indexまたはreiserfsを使用する20000の場合、ディレクトリあたり約1000ファイルの制限をお勧めします。ファイルの作成方法を制御できない場合は、他の作業を行う前に、ファイルを別のディレクトリに移動してください。