ルートディレクトリには,いらないファイルを置かないほうがよいと聞きましたが,本当ですか。また,本当なら理由も教えてください。
OSやファイルシステムによっても違いますが,ここでは最もユーザーの多いWindows 95のFAT16についての質問と仮定して話を進めます。
FAT16の場合,ルートディレクトリのエントリ(ディレクトリ中のファイル情報を格納するエリア)のサイズが16KBに決まっており,それ以上拡張できません。このエントリには,512個分のファイル情報を格納できますが,Windows 95の場合は最大でも256個までしか格納できません。これはWindows 95のLFN(ロングファイルネーム)のメカニズムによるものです。
LFNの管理下では,DOSの8+3文字形式のファイル名を格納している部分を1次フォルダエントリ,LFNを格納する部分を2次フォルダエントリと呼び,ファイル名を13文字ごとに格納しています。LFNは文字をすべて2バイトコードで格納しているため,例えば「DOSV_CLINIC_ANSWER.TXT」というファイル名を作ると,
第1エントリ DOSV_C~1.TXT(8+3形式)
第2エントリ DOSV_CLINIC_A
第3エントリ NSWER.TXT
となり,このファイル1個で3エントリ消費してしまいます。したがって,512個分あるといっても,実際は200個程度のファイルで満杯になってしまうわけです。
ルートディレクトリ以外のディレクトリエントリは,ファイル数が多くなってくるとサイズを拡張する仕組みがあるので,このような制限はありません。
したがってルートディレクトリに山ほどファイルを作ってしまうと,すぐ満杯になってしまうだけでなく,その下のサブディレクトリの操作もできなくなる可能性があります。これは,サブディレクトリ自体の情報もルートディレクトリエントリに入っているため,例えばサブディレクトリの下でファイルを作るさいに,仮にサブディレクトリのエントリサイズが飽和したとすると,新規エリアを確保するためにルートディレクトリを操作する必要があります。ところがルートディレクトリエントリが満杯だったりすると操作できず,結果としてファイルが作成できないのです。
FAT32やNTFSではこうした制限がなくなっているため,必ずしもルートディレクトリに置いていけないことはないのですが,個人的にはルートディレクトリにあれこれ置かないほうが見通しが良く,システムを管理しやすいと思います。
(大原雄介)