Как рассчитать минимальное количество байтов, необходимое для минимального раздела FAT32?
Из экспериментов с 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 (из приведенной выше страницы Википедии) + накладные расходы. Зачем?
2 ответа
Откуда это 1056?
Вы не включили:
Загрузочный блок
0x20
байт =32
байт.Две копии FAT (таблицы размещения файлов), одна резервная копия,
2 * 512 = 1024
,
Добавляем их:
1024 + 32 = 1056
См. Учебное пособие по файловой системе FAT для получения дополнительной информации.
Мой вопрос: как бы я рассчитал 34089472?
Вы имеете дело с блочным устройством, которое выполняет все передачи, чтение, запись и распределение данных в блоках фиксированного размера, в частности, в блоках по 512 байт.
Таким образом, первый расчет должен быть преобразованием в количество секторов:
34089472 bytes / 512 bytes per sector = 66581 sectors
Для меня это означало, что при 512 байтах на сектор, 65525 кластеров и (65525/128 = 512) дополнительных накладных расходов секторов
У вас есть неустановленное предположение, что вы используете один сектор на кластер.
В статье в Википедии, на которую вы ссылаетесь, уже есть ответ, но, видимо, вы ее упустили.
Для зарезервированной области есть 32 сектора (включая загрузочный сектор) (обычно 32 сектора в файловых системах FAT32).
Существует две FAT по 512 секторов в каждом (или всего 1024 сектора).
Для FAT32 нет корневого каталога.
В области данных имеется 65525 секторов для 65525 кластеров.
Это в общей сложности 66581 секторов.
С другой стороны, FAT16 ведет себя так же. На самом деле вам нужно 2124800 байт вместо 2091520 (из приведенной выше страницы Википедии) + накладные расходы. Зачем?
Снова преобразование в количество секторов:
2124800 bytes / 512 bytes per sector = 4150 sectors
Есть 32 сектора для зарезервированной области (которая включает загрузочный сектор) (очевидно, это также 32 сектора в файловых системах FAT16). (Раньше это было бы любое количество секторов, чтобы поместить FAT в начало дорожки.)
Предполагая, что вы используете один сектор на кластер и минимум 4085 кластеров, есть две FAT по 16 секторов в каждом (или всего 32 сектора).
Существует 1 сектор (или кластер) для корневого каталога для FAT16.
В области данных имеется 4085 секторов для 4085 кластеров.
Это в общей сложности 4150 секторов.