まとめ
NTFS上で「空ディレクトリがどれだけのディスク容量を消費するのか」を実測した。
さまざまな因子があるため参考にもならない可能性が高いが、今回の検証による結果としては
空ディレクトリ1つあたり、1600バイト程度 のディスク容量
を消費していた。(空ディレクトリ10,000個の平均値、計測ミスの可能性もあり)
※この記事をこれ以降読んでも、とくにオチはありません。
実測に至った経緯
- Windowsのエクスプローラ上では、空ディレクトリの「ディスク上のサイズ」は「0 バイト」と表示される。(ディレクトリを 10,000個 作ったとしても、エクスプローラ上は 0バイト)
- しかし、空ディレクトリも名前などの情報を持つ以上、どこかに情報を記録しておく必要がある。
- 予測: ファイルと同じならば、1クラスタサイズ分 (4096バイト) 、もしくは NTFSのMaster File Table (MFT) の1レコード分 (1,024バイト) のディスク容量を消費すると予想したが、なにぶん NTFSの知識が足りず、結論を見切れなかった。
検証方法
- 空ディレクトリを10,000個作成し、その前後でのディスク使用量や空き領域を比較した。
- 作成した空ディレクトリの名前は、「subdir10000」~「subdir19999」
- この検証方法は、ほかの人にはお勧めしない。
おそらく、MFTが肥大化/無駄に拡張し、かつ、もう元のサイズには戻らない。
検証環境 (ディスク仕様)
- 固定ドライブ (普通のHDD)
- ファイルシステム: NTFS 3.1
- セクターあたりのバイト数: 512
- クラスターあたりのバイト数: 4,096
- 非システムボリューム
- ※OS: Windows 7 Professional (SP1)
検証結果
- 検証 (空ディレクトリを10,000個作成) は 2回行った。
- 検証の具体的な手順としては、コマンドプロンプトで下記のコマンドを実行した。
FOR /L %I IN (10000,1,19999) DO @( mkdir subdir%I dir | findstr の空き領域 )
- 検証結果 1回目
-
- 縦軸: ボリュームの空き領域 (
dir
の出力結果から算出) - 横軸: 作成したディレクトリの個数
いきなり、線形でない (=ディレクトリ数に比例しない) 結果が出た。空ディレクトリを 2,370個作成したところで いったんボリュームの空き領域が 4MB程度 回復(増加) し、以降は ほぼ線形に 空き領域が減少した。
思い当ることとしては、この検証に先立って空ディレクトリを 2,000個ほど作成し削除する操作をしていたため、その際に生まれて未使用になったMFTレコードが再利用された可能性がある。ただ、空き領域が増えた理由は不明。(検証環境ミスによる外因の可能性もあり)
2,370個目~10,000個目の間には、(ディレクトリ 7,630個分として)
空き領域は12,320,768バイト減少した。(1ディレクトリあたり、1615バイト程度の消費) - 縦軸: ボリュームの空き領域 (
- 検証結果 2回目
1個目から10,000個目まで、ほぼ線形に推移。空ディレクトリを10,000個作成する間に、空き領域は15,728,640バイト減少した。(1ディレクトリあたり、1573バイト程度の消費)
0 件のコメント :
コメントを投稿