FAT16の情報を探しに行くすべてのサイトは、2 GBを超える容量を割り当てることができないと宣言的に述べています。OK。すばらしいです。私はあなたを信じています。しかし、どうやってその結論に達しますか(テストするだけではありません)?
FAT16システムがどれだけ保持できるかを判断するために使用できる式はありますか?
FAT16の情報を探しに行くすべてのサイトは、2 GBを超える容量を割り当てることができないと宣言的に述べています。OK。すばらしいです。私はあなたを信じています。しかし、どうやってその結論に達しますか(テストするだけではありません)?
FAT16システムがどれだけ保持できるかを判断するために使用できる式はありますか?
回答:
FAT16は16ビットを使用してクラスターを識別します。したがって、識別子がなくなる前に最大65536のクラスターがあり、一部の識別子はファイル以外の使用のために予約されています。各ファイルは少なくとも1つのクラスターを占有します。クラスターを大きくすると、ファイルごとの最小割り当てが増加し、小さなファイルのオーバーヘッドが増加します。
クラスターサイズは、識別可能な最大ボリュームを示します。32KiBクラスターの場合、32 * 1024 * 65536 B = 2GiBです。
ディスク上のセクターのサイズを増やすことにより、クラスターサイズを無制限に増やすことができますが、ファイルの最大数に制限されたままになります。また、デフォルトのセクターサイズ(512B)を想定したソフトウェアで問題が発生します。
〜2GiBの物理ボリュームがすぐに利用できる時点では、プロセッサーとOSは32ビットであったため、FAT32への移行は賢明な選択であり、小さなクラスターで非常に多くのファイルを許可しました
実際、長年、さまざまな制限のある「FAT16」のいくつかのバリアントがありましたが、「compaq 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クラスターはすでにかなり無駄であり、より大きなクラスターもそうでした。