最終更新時刻:2009年11月27日(金) 17時14分
27

linux上でディレクトリ内に作成できる最大ファイル数は1万から1.5万だが実際は5000個くらいでやめておいたほうが

公開日時:
2006/08/20 18:57
著者:
watanabe

あまりCNET向きとは言えない技術的過ぎるTIPSで恐縮なのだが。

Linuxのドキュメントには次のように記載されている。

現行の単方向リンクのリストによるディレクトリの実装で、一つのディレクト リ内のファイル数は、実運用上約 10-15k 個が上限になります。この制限はこ のような大きなディレクトリ内のファイルを作成および削除 (さらに検索) す る時のパフォーマンスの問題のためです。
JF: Linux Kernel 2.4 Documentation: ext2.txt より
注:これは現在主流のext3ではなく古いext2のものだが、実際問題としてこの制限はほとんど変わっていない。xfsになると話は別だが。

ということで、ひとつのディレクトリにつくれるファイル数は1万個くらいにしておいたほうがいいようだ。
だが筆者の経験上ではせいぜい5000個くらいでやめておいたほうがいい。
これ以上になるとたとえばlsコマンドの反応も遅くなりがちで、開発やデバッグ作業自体が滞るからだ。
もちろん使用しているマシンやHDDの性能にもよる。
またxfsといったさらに最新のファイルシステムだとひとつのディレクトリに数十万個程度のファイルは余裕のようだ。

たくさんのファイルを自動生成するタイプのアプリをつくるケースは意外とよくある。
squidプロキシーサーバはWebページのキャッシュファイルを大量に持つわけだし、
postfixメールサーバも大量のメールがある場合にそれをキューとしてファイルに持たなければならない。
そういったソフトはたくさんのファイルを複数のディレクトリに分けて保存するようになっている。

通常のWebアプリでも、たとえばDBへの問い合わせ結果をキャッシュファイルに保存することで性能を上げるという手法はよくある。
そのため、PHP言語のPEARライブラリのCache_Liteライブラリでは、hashedDirectoryLevel というオプションが設けられ、たくさんのキャッシュファイルを生成してもそれが適宜複数のディレクトリに分けて保存されるようにすることで性能の劣化を防げるようになっている。

以上、どこかに書いてありそうであまり書かれていないTIPSでした。

※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。

CNET_ID

メンバー限定サービスをご利用いただく場合、このページの上部からログイン、またはCNET_ID登録(無料)をしてください。