Все сайты, на которые я захожу, чтобы искать информацию о FAT16, просто декларативно заявляют, что на нем не может быть выделено более 2 ГБ. ХОРОШО. Отлично. Я верю тебе. Но как вы пришли к такому выводу (кроме простого тестирования)?
Есть ли какая-то формула, которую можно использовать, чтобы определить, сколько может вместить система FAT16?
file-storage
allocation
SangoProductions
источник
источник
Ответы:
FAT16 использует 16 бит для идентификации кластеров. Таким образом, до исчерпания идентификаторов существует максимум 65536 кластеров, а некоторые идентификаторы зарезервированы для использования не в файлах. Каждый файл занимает хотя бы один кластер. Большие кластеры увеличивают минимальное выделение для файла, увеличивая издержки на небольшие файлы.
Размер кластера сообщает вам максимальный идентифицируемый объем. Для кластеров 32 КБ это 32 * 1024 * 65536 B = 2 ГБ.
Вы можете бесконечно увеличивать размер кластера, увеличивая размер секторов на диске, но вы ограничены максимальным количеством файлов. Вы также можете столкнуться с проблемами с программным обеспечением, которое принимает размер сектора по умолчанию (512B)
В тот момент, когда были доступны физические тома объемом ~ 2 ГБ, процессоры и операционные системы были 32-битными, поэтому переход на FAT32 был разумным выбором, позволяя значительно большему количеству файлов в небольших кластерах
источник
На протяжении многих лет было несколько вариантов «FAT16» с разными ограничениями, но давайте рассмотрим версию, которая сохранилась от «compaq DOS 3.31» до windows 95.
Объемы FAT разделены на кластеры. Каждый кластер состоит из двух секторов. Количество секторов на кластер в FAT16 сохраняется как 8-битное число со знаком. Таким образом, максимально возможные сектора на кластер - 64.
Номера кластеров были сохранены как 16-битное значение без знака. Ограничение общего количества кластеров до 65536. Умножьте это на максимальное число секторов на кластеры, и вы получите ограничение в 4194304 сектора.
(Логический) размер сектора жестких дисков составляет 512 байт. Умножьте это на ограничение на число секторов, упомянутых выше, и вы получите свой лимит 2 ГБ. В принципе, среда с большими размерами сектора может поддерживать больший объем FAT16, но я не думаю, что это произошло на практике.
Windows NT изменила интерпретацию поля «секторы на кластер» на 8-битный без знака. Это позволило разделить 4GiB FAT16 с секторами 512 байт (и теоретически больше на дисках с большими секторами). В AIUI windows 98 добавлена поддержка чтения и записи таких разделов, но он не мог их создать, а дисковые утилиты не могли их починить.
Конечно, было бы возможно сделать относительно небольшие изменения в формате файловой системы для поддержки больших кластеров и, следовательно, больших объемов. Однако MS решила пойти на более радикальный вариант перехода на 32-битный кластерный индекс с Windows 95 OSR2, производящей FAT32.
Я считаю, что причиной перехода на более радикальный вариант была космическая эффективность. Учитывая типичные размеры файлов в то время, кластеры размером 32 кБ уже были довольно расточительными, а более крупные были бы даже такими.
источник