FreeBSD 6の1つのサブディレクトリに保存されるファイルの総数に上限はありますか?
ファイルシステムはufsです
これは2008年11月のfreebsd-questionsリストで議論されました。 Erik Trulsson から引用するには:
ディスク上の各iノードには、そのiノードを指すハードリンクの数を示すフィールドが含まれています。このフィールドは(符号付き)16ビット値です。つまり、許可されるハードリンクの最大数は32767です。作成される各サブディレクトリには、その親へのハードリンク( '..')が含まれるため、単一ディレクトリへのサブディレクトリの数は以下に制限されます。 32767より。
通常のファイルには親ディレクトリへのハードリンクが含まれていないため、これによって1つのディレクトリに含めることができるファイルの数が制限されることはありませんが、1つのディレクトリに含めることができるファイルとディレクトリの総数にはもちろん制限があります。ファイルシステムが最初に作成されたときに作成されたiノードの数に基づくファイルシステム。
これらは理論上の限界です。上で説明したように、制限に達するかなり前にパフォーマンスの問題が発生し始めます。
合計iノードは、ディレクトリに配置できるファイルの合計の制限です。合計iノードは、ハードドライブをフォーマットするときに作成されます。小さいサイズのセグメントを使用すると、より多くのiノードを作成できます。詳細については、mannewfsを参照してください。
Vfs.ufs.dirhash_maxmemは、ディレクトリ内のディレクトリ名を保持するために使用されるメモリ用です。これはパフォーマンスにのみ影響し、制限はありません。より多くのメモリがある場合は、それを大きくします。それ以外の場合は、気にしないでください。
私はfreebsd6.xで、多数のファイル(50,000以上)を含むいくつかのことを行いましたが、特定の制限を覚えていません。 7.2システムを簡単にチェックすると、制限が100,000をはるかに超えていることがわかります。プロセスは現在も実行中です。失敗した場合は、7.2のハード制限をお知らせします。これは6.xと同様である可能性があります。
そうは言っても、新しいファイル/ディレクトリを作成すると、約30,000を超えるディレクトリエントリのパフォーマンスが大幅に低下します。その時点で、名前だけでなくHashOfName/nameという名前のファイルの作成が開始されるため、検索が簡単になります。
その数は、関係するファイルシステムのタイプによっても異なると思います。
あなたの質問はすでに回答されているので、パフォーマンスのヒントはほとんどありません。小さなファイルがたくさんある場合は、vfs.ufs.dirhash_maxmemを増やす必要があります。デフォルトの2MBは、数千のファイルには小さすぎます。
/etc/sysctl.confにそのような行があります
vfs.ufs.dirhash_maxmem=67108864
ここ( FSの改善@ BSDCON )とここ( Wiki )でdirhashについて読むことができます。