2017年8月27日日曜日

NTFS上の、空ディレクトリのサイズを知りたい。

まとめ

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 件のコメント :

コメントを投稿