1

Из экспериментов с 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 ответа2

0

Откуда это 1056?

Вы не включили:

  1. Загрузочный блок 0x20 байтов = 32 байта.

  2. Две копии FAT (таблицы размещения файлов), одна резервная копия, 2 * 512 = 1024 .

Добавляем их:

1024 + 32 = 1056

См. Учебное пособие по файловой системе FAT для получения дополнительной информации.

0

Мой вопрос: как бы я рассчитал 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 секторов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .