web-dev-qa-db-ja.com

FAT16が2 GBを超えて保存できないのはなぜですか?

私がFAT16に関する情報を探しに行くすべてのサイトは、2 GBを超える割り当てができないと宣言的に述べています。 OK。すごい。私はあなたを信じています。しかし、どのようにしてその結論に達したのですか(単にそれをテストする以外に)?

FAT16システムがどれだけの容量を保持できるかを決定するために使用できるある種の公式はありますか?

26

FAT16は16ビットを使用してクラスターを識別します。したがって、識別子が不足するまでに最大65536個のクラスターがあり、一部の識別子はファイル以外の使用のために予約されています。各ファイルは、少なくとも1つのクラスターを占有します。クラスタが大きくなると、ファイルごとの最小割り当てが増加し、小さなファイルのオーバーヘッドが増加します。

次に、クラスターサイズから、識別可能な最大ボリュームがわかります。 32KiBクラスターの場合、これは32 * 1024 * 65536 B = 2GiBです。

あなたはcouldディスク上のセクターのサイズを増やすことにより、無期限にクラスターサイズを増やしますが、ファイルの最大数に制限されたままです。また、デフォルトのセクターサイズ(512B)を想定したソフトウェアで問題が発生します。

すぐに利用できる〜2GiBの物理ボリュームがあった時点で、プロセッサとOSは32ビットでした。そのため、FAT32への移行は賢明な選択であり、小さなクラスターで非常に多くのファイルを許可しました

66
Caleth

"FAT16"にはいくつかのバリエーションがあり、長年にわたってさまざまな制限がありましたが、 "コンパックDOS 3.31"からWindows 95まで存続していたバージョンについて考えてみましょう。

FATボリュームはクラスターに分割されます。各クラスターは、2つの累乗のセクターで構成されます。 FAT16のクラスターあたりのセクター数は、8ビットの符号付き数値として格納されます。したがって、クラスターあたりの可能な最大セクターは64です。

クラスタ番号は、16ビットの符号なしの値として保存されました。クラスターの合計を65536に制限します。これにクラスターあたりの最大セクター数を掛けると、4194304セクターの制限が適用されます。

ハードドライブの(論理)セクターサイズは512バイトです。上記のセクター数の制限を掛けると、2GiBの制限が適用されます。原則として、より大きなセクターサイズのメディアはより大きなFAT16ボリュームをサポートできますが、これは実際には発生しなかったと思います。

Windows NTは、「クラスターあたりのセクター」フィールドの解釈を符号なし8ビットに変更しました。これにより、512バイトのセクターを持つ4GiB FAT16パーティションが可能になりました(理論的には、セクターがより大きいドライブではより大きくなります)。 AIUI Windows 98は、そのようなパーティションの読み取りと書き込みのサポートを追加しましたが、それらを作成できず、ディスクユーティリティがそれらを修復できませんでした。


より大きなクラスター、したがってより大きなボリュームをサポートするために、ファイルシステムフォーマットに比較的マイナーな調整を加えることは確かに可能でした。ただし、MSは、Windows 95 OSR2がFAT32を生成する32ビットのクラスターインデックスに移行するという、より根本的なオプションを選択することを決定しました。

より過激なオプションを選択した理由は、スペース効率にあると思います。当時の典型的なファイルサイズを考えると、32kiBクラスターはすでにかなり無駄があり、より大きなクラスターもそうなるでしょう。

12
Peter Green