Из экспериментов с newfs_msdos я определил, что минимальное количество байтов, необходимое для создания раздела FAT32, составляет 34089472. На один байт меньше и программа жалуется:
$ newfs_msdos -F 32 -c 1 -S 512 -C 34089471 tm
newfs_msdos: 65524 clusters too few clusters for FAT32, need 65525
$ newfs_msdos -F 32 -c 1 -S 512 -C 34089472 tm
tm: 65525 sectors in 65525 FAT32 clusters (512 bytes/cluster)
BytesPerSec=512 SecPerClust=1 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=66581 FATsecs=512 RootCluster=2 FSInfo=1 Backup=2
Мой вопрос: как бы я рассчитал 34089472?
На странице FAT32 Wikipedia я вижу несколько метрик:
Требования FAT32: 1 сектор на каждую копию FAT на каждые 128 кластеров
Минимум FAT32: 1 сектор на кластер × 65 525 кластеров = 33 548 800 байтов (32 762,5 КБ)
Для меня это означало, что при 512 байтах на сектор, 65525 кластеров и (65525/128 = 512) дополнительных накладных расходов секторов означает, что это должно быть
(65525 + 512) * 512 = 33810944
Но это неправильно. Это на самом деле
(65525 + 1056) * 512 = 34089472
Откуда это 1056?
С другой стороны, FAT16 ведет себя так же. На самом деле вам нужно 2124800 байт вместо 2091520 (из приведенной выше страницы Википедии) + накладные расходы. Зачем?