FAT関連メモ・続き
- 各FAT仕様におけるディスク容量の最大値
各FATにおいて、
0x000 = 未使用、0x001 = 予約、0xFF7 = 不良クラスタ、0xFF8〜0xFFF = 終端
となっているので、実際に利用可能なクラスタは、0xFF5個。
よって、各FAT仕様における最大クラスタ数は、以下の通りになる(はず)
それぞれにクラスタサイズを乗算した論理的な最大値を表にしてみる
(とは言っても、端数が分かり辛いので、全部、切り上げて考える)
クラスタサイズ | FAT12 | FAT16 | FAT32 |
---|---|---|---|
0x01=512Byte | 2MiB | 32Mi | 128GiB |
0x02=1KiB | 4MiB | 64MiB | 256GiB |
0x04=2KiB | 8MiB | 128MiB | 512GiB |
0x08=4KiB | 16MiB | 256MiB | 1TiB |
0x10=8KiB | 32MiB | 512MiB | 2TiB |
0x20=16KiB | 64MiB | 1GiB | 4TiB |
0x40=32KiB | 128MiB | 2GiB | 8TiB |
0x80=64KiB | 256MiB | 4GiB | 16TiB |
FAT32の論理的な最大値は、16TiBになるはずなのだが、
総セクタ数が32bitで管理されているので、
この上限となる2TiBに制限されてしまう。
(つまり、現実的には、この上限に近付きつつあるわけだ... )
- クラスタ数別最大容量
FAT32が、最大、268,435,445個のクラスタを扱えると言っても、
これらのクラスタ識別子を管理するテーブルだけでも、
256MiB * 32bit(4Byte) = 1GiB程度の領域が必要となる。
あくまで、最大ここまで使えるという事であって、
実用的な範囲で、バランスを考えて使う必要がありそうだ。
そこで、クラスタ数を適当に決めて、それぞれの最大容量を考えてみる。
試しに、クラスタ数を、2のべき乗で用意してみる。
クラスタサイズ | 64KiB=FAT16 | 128KiB | 256KiB | 512KiB | 1MiB | 2MiB | 4MiB | 8MiB |
---|---|---|---|---|---|---|---|---|
0x01=512Byte | 32MiB | 64MiB | 128MiB | 256MiB | 512MiB | 1GiB | 2GiB | 4GiB |
0x02=1KiB | 64MiB | 128MiB | 256MiB | 512MiB | 1GiB | 2GiB | 4GiB | 8GiB |
0x04=2KiB | 128MiB | 256MiB | 512MiB | 1GiB | 2GiB | 4GiB | 8GiB | 16GiB |
0x08=4KiB | 256MiB | 512MiB | 1GiB | 2GiB | 4GiB | 8GiB | 16GiB | 32GiB |
0x10=8KiB | 512MiB | 1GiB | 2GiB | 4GiB | 8GiB | 16GiB | 32GiB | 64GiB |
0x20=16KiB | 1GiB | 2GiB | 4GiB | 8GiB | 16GiB | 32GiB | 64GiB | 128GiB |
0x40=32KiB | 2GiB | 4GiB | 8GiB | 16GiB | 32GiB | 64GiB | 128GiB | 256GiB |
0x80=64KiB | 4GiB | 8GiB | 16GiB | 32GiB | 64GiB | 128GiB | 256GiB | 512GiB |
とても綺麗な?表になった気がするけど、
クラスタサイズを減らした分、クラスタ識別子を倍に増やせば、
同じ最大値になるのが良く分かる。笑
FAT16で2GiBのディスクを管理する場合、クラスタサイズが32KiBになるので、
ここで発生するクラスタギャップによる未使用領域を考えれば、
FAT32でクラスタ数を8倍して512KiBにしたとしても、
クラスタ管理領域としては、1MiB程で済むので、バランスが良いと考えるのか?
Windowsでは、先にクラスタ数が決まっていて、
ディスクの容量に合わせてクラスタサイズを変更しているみたい?
2MiB以上、4MiB未満辺りの数っぽい。
MSの資料によると、(http://support.microsoft.com/kb/314463/ja)
との事らしい...
つまり、4,177,920クラスタって事になりますな。
でも、これは、昔の話だろうから(Windows2000とか)、今はどうなんだろう?
32bitプログラムか64bitプログラムかって話はあると思うけれど、
今でも、16bitプログラムの制限とか、気にする必要があるのかなぁ?
微妙だぁ...