FAT
FAT (File Allocation Table) — это простая и широко распространённая файловая система, разработанная для организации и хранения данных на различных носителях, таких как гибкие диски, жёсткие диски и флеш-накопители. Основной принцип её работы заключается в использовании таблицы размещения файлов (собственно, FAT-таблицы), которая отслеживает кластеры данных на диске и связывает их в цепочки, соответствующие каждому файлу. FAT известна своей совместимостью с большинством операционных систем (включая Windows, macOS, Linux и встраиваемые системы) и широко применяется в устройствах с ограниченными ресурсами, таких как цифровые камеры, MP3-плееры и автомобильные медиасистемы. Существует несколько версий FAT: FAT12, FAT16 и FAT32, различающиеся размером элементов таблицы и максимальным объёмом поддерживаемого диска. В 2019 году на смену FAT32 была предложена система exFAT, которая является её эволюцией, но формально не входит в линейку FAT.
История
Разработка и ранние версии
Файловая система FAT была создана Биллом Гейтсом и Марком Макдональдом (Mark MacDonald) в 1977 году для операционной системы Standalone Disk BASIC компании Microsoft. Первоначально она предназначалась для работы с 8-дюймовыми гибкими дисками в среде Microsoft MS-DOS и IBM PC DOS. Размер FAT-таблицы был ограничен 12 битами (отсюда название FAT12), что позволяло адресовать до 4084 кластеров (всего 65536, но из-за ограничений и служебных значений использовалось меньше). Эта версия использовалась в MS-DOS 1.0 (1981 год) и поддерживала объём до 32 мегабайт. FAT-таблица хранилась в загрузочном секторе диска и занимала всего несколько килобайт, что было эффективно для малых носителей того времени.
Появление FAT16
С ростом ёмкости жёстких дисков потребовалось увеличение адресного пространства. В 1984 году в MS-DOS 3.0 была представлена FAT16, где размер элемента таблицы вырос до 16 бит. Это позволило адресовать более 65 000 кластеров, что теоретически давало возможность работать с дисками объёмом до 2 ГиБ (гибибайт) при размере кластера 32 КБ. Однако из-за ограничений в размере загрузочного сектора и служебных полей на практике максимальный поддерживаемый объём для FAT16 в DOS составлял 2 ГиБ (с 512-байтными секторами). FAT16 стала основной файловой системой для MS-DOS 4.0 и ранних версий Windows (до Windows 95).
Эра FAT32
К середине 1990-х годов размеры жёстких дисков превысили 2 ГиБ, и требовалась более современная система. В 1996 году с выходом Windows 95 OSR2 (OEM Service Release 2) была представлена FAT32. В ней размер элемента таблицы оставался 32-битным формально, но только 28 бит использовались для адресации кластеров, а 4 бита были зарезервированы. Максимальный объём диска для FAT32 составляет 2 ТиБ (терабайта) при кластере в 32 КБ, а максимальный размер файла — 4 ГиБ (это ограничение связано с использованием 32-битных полей размера в записях каталога). FAT32 поддерживалась во всех версиях Windows начиная с 95 OSR2 и до Windows 11 (за исключением 64-битных версий, где её поддержка в установщике была поэтапно ограничена, но сама система читает и пишет FAT32).
Современное состояние
В 2006 году компания Microsoft представила exFAT (Extended File Allocation Table), которая сняла ограничение на размер файла в 4 ГиБ (до 16 ЭiБ) и увеличила максимальный объём диска до 128 ПiБ. exFAT широко используется для флеш-накопителей и SD-карт (стандарт SDXC), а также имеет открытую спецификацию (с 2019 года). Однако сама классическая FAT32 остаётся актуальной для совместимости: она поддерживается практически всеми операционными системами и встраиваемыми устройствами, даже старыми микроконтроллерами. Например, большинство автомобильных аудиосистем и фотокамер до сих пор используют FAT32. В 2010-х годах появились неофициальные расширения (например, FAT+), но они не стали стандартами.
Строение и принцип работы
Общая структура
Файловая система FAT состоит из нескольких областей:
- Загрузочный сектор (Volume Boot Record, VBR) — первый сектор тома. Содержит загрузочный код, параметры системы (размер сектора, количество FAT-таблиц, количество кластеров и т.д.) и — в классической FAT — поля для идентификации (OEM ID). В FAT32 загрузочный сектор расширен до 4 секторов, так как поле зарезервированных секторов увеличено.
- Область FAT (File Allocation Table) — собственно таблица размещения файлов, состоящая из записей (каждая длиной 12, 16 или 32 бита). Количество копий FAT обычно равно двум для резервирования (первичная и резервная копии), но может быть и одна.
- Корневой каталог (Root Directory) — в FAT12/FAT16 это фиксированная область, расположенная сразу после FAT, с ограниченным количеством записей (например, 256 для FAT12). В FAT32 корневой каталог может располагаться в любом месте тома, как обычная папка, и не имеет фиксированного размера — это позволяет хранить больше файлов в корне.
- Область данных (Data Region) — все остальное пространство, разбитое на кластеры (логические блоки, минимальные единицы выделения). Размер кластера кратен размеру сектора (обычно 512, 1024, 2048 или 4096 байт; в exFAT могут быть больше).
Таблица размещения файлов
Каждый файл и каталог (кроме корневого в FAT12/16) представлены последовательностью кластеров, адреса которых хранятся в FAT. Например:
- Номер первого кластера файла записан в записи каталога (Directory Entry).
- В FAT по адресу, соответствующему первому кластеру, находится адрес следующего кластера, и так до конца.
- Специальные значения в FAT:
0x00000000 (зарезервирован?) 0x00000001-0xFFFFFFEF(занятые),0xFFFFFFF0-0xFFFFFFF6(зарезервированные),0xFFFFFFF7(плохой кластер),0xFFFFFFF8-0xFFFFFFFE(конец файла),0xFFFFFFF0(свободный).
Ограничения
- Фрагментация: так как файлы могут быть разбросаны по диску, а запись в FAT осуществляется последовательно, после многократного удаления/создания файлов происходит фрагментация, замедляющая доступ.
- Ограничение на размер файла: максимальный размер файла в FAT12/16/32 равен 2^32 байт (4 ГиБ) из-за 32-битного поля размера в записи каталога.
- Ограничение на объём тома: FAT12 поддерживает до 32 МБ, FAT16 — до 2 ГиБ (с 512-байтными секторами) или 4 ГиБ с секторами 4096 байт, FAT32 — до 2 ТиБ. exFAT допускает до 128 ПiБ.
Разновидности и технические характеристики
FAT12
- Глубина таблицы: 12 бит (но на практике используется 10 бит для адресации?)
- Максимальный объём: 32 МБ (хотя в некоторых реализациях до 256 МБ с нестандартными кластерами)
- Максимальный размер файла: 32 МБ (ограничение объёма тома)
- Поддержка: MS-DOS до версии 4.0, гибкие диски (до 1.44 МБ), некоторые устройства.
- Ограничение корневого каталога: до 256 файлов в старых версиях, но в поздних реализациях (например, в MS-DOS 7.0) корневой каталог мог иметь больше записей, если размер тома это позволяет.
FAT16
- Глубина таблицы: 16 бит (реально 16 бит, 65 536 кластеров максимум).
- Максимальный объём: 2 ГиБ (с размером кластера 32 КБ) или 4 ГиБ (с 64 КБ кластерами, но это не поддерживается некоторыми ОС).
- Максимальный размер файла: 2 ГиБ (ограничение полной адресации?) на самом деле до 2^32 байт, то есть 4 ГиБ, но из-за структуры каталогов многие ОС ограничивают 2 ГиБ.
- Пример использования: карты CompactFlash до 2 ГБ, старые жёсткие диски IBM PC/AT, камеры начального уровня.
FAT32
- Глубина таблицы: 32 бита (используются младшие 28 бит для адресации кластеров — всего 268 435 456 кластеров, однако 4 бита зарезервированы).
- Максимальный объём: 2 ТиБ (при размере кластера 32 КБ — 16 384 кластера на один терабайт? На самом деле максимальный объём 2 ТиБ получается при 512-байтном секторе).
- Размер файла: до 4 ГиБ минус 2 байта (ограничение 32-битного поля записи).
- Структура: корневой каталог может храниться как обычная папка (содержится в области данных).
- Поддержка Windows: начиная с Windows 95 OSR2, Windows 98/ME (основная), Windows 2000/XP/Vista/7/8/10/11 (чтение и запись), но 64-битные установщики Windows не могут записывать на диски FAT32 — используют в основном NTFS.
exFAT (Extended FAT)
- Глубина таблицы: 32 бита с использованием 64-битных полей для размера файла и оступов.
- Максимальный размер файла: 2^64 байт (16 ЭиБ).
- Максимальный объём: 64 ЗиБ (теоретически), но на практике ограничен 128 Пилобайт (из-за спецификации LBA и размера сектора).
- Отказоустойчивость: в отличие от FAT32, нет необходимости в двух FAT (используется одна, но с журналированием через Bitmap и Transaction-журнал).
- Применение: SDXC, USB-накопители, внешние диски, современные медианосители.
Сравнение версий
| Параметр | FAT12 | FAT16 | FAT32 | exFAT |
|---|---|---|---|---|
| Год появления | 1977 | 1984 | 1996 | 2006 |
| Макс. объём тома | 32 МБ | 2 ГБ (4 ГБ с особыми секторами) | 2 ТБ | 128 ПБ (теор. до 64 ЗБ) |
| Макс. размер файла | 32 МБ | 4 ГБ | 4 ГБ | 16 ЭБ |
| Размер таблицы | 12 бит (10 рабочих) | 16 бит | 32 бита (28 полезных) | 32 бита + 64-битные поля |
| Кол-во записей в корневом каталоге | Фиксир. (до 256) | Фикс. (до 512) | Плавающий | Плавающий (до миллионов) |
| Фрагментация | Высокая | Высокая | Высокая | Низкая (оптимизация для случайного доступа) |
| Поддержка в Windows | Только чтение (через драйверы) | Чтение и запись (все версии) | Чтение и запись | Чтение и запись (Vista SP1+) |
| Открытость | Полностью | Полностью | Полностью | С 2019 года открытая спецификация |
Применение
Персональные компьютеры и операционные системы
- MS-DOS и Windows 95/98/ME — FAT16 (для загрузочных разделов) и FAT32 (для дисков данных) были основными.
- Windows NT (вплоть до Windows 7) использовала NTFS, но поддерживала FAT32 для загрузочных разделов малого размера (например, для разделов менее 32 ГБ в Windows 7).
- macOS — полностью поддерживает чтение и запись FAT32, но для записи exFAT требуется стороннее ПО (с 2016 года — нативная поддержка).
- Linux — в ядре с 1992 года есть драйверы для FAT12/16/32 (драйвер
msdosи файловые системыvfat). exFAT была добавлена в ядро 5.4 (2019 год).
Встраиваемые системы
- Цифровые камеры, видеокамеры, фотоаппараты — большинство использует FAT32 ввиду совместимости с ПК и устройств, а для видео HD/4K — exFAT (SDXC).
- Автомобильные мультимедийные системы — старые модели поддерживают только FAT32, современные — exFAT.
- Микроконтроллеры (Arduino, STM32) — минимальная реализация FAT занимает меньше 1 КБ RAM, поэтому она популярна для SD-карт с малым объёмом.
- Принтеры, МФУ, факсы — часто используют FAT12/16 на картах памяти.
Прочие применения
- USB-накопители и флеш-диски — по умолчанию форматируются в FAT32 или exFAT (совместимость с TV, консолями, старыми ДВД-плеерами).
- Загрузочные разделы — UEFI использует FAT32 для хранения файлов загрузчика и EFI-модулей (обязательное требование спецификации).
- Карты для игровых консолей (Nintendo Switch, PlayStation Portable, PlayStation 4/5) — используются FAT32 или exFAT.
- Некоторые киоски автоматической оплаты и терминалы — из-за простоты и надёжности.
Критика и недостатки
Ограничение размера файла до 4 ГБ
Самый заметный недостаток классической FAT — невозможность хранить файлы размером больше 4 ГиБ, что делает её непригодной для больших видеофайлов, образов дисков (например, ISO), дампов баз данных. Это ограничение стало особенно критичным в 2000-х годах с развитием HD-видео и 4K-видео. exFAT решает эту проблему.
Отсутствие журналирования
В отличие от NTFS, ext4 или HFS+, FAT не ведёт журнал изменений. При сбое питания или небезопасном извлечении носителя высока вероятность потери данных (файлы могут быть записаны частично, таблица размещения — повреждена). Система не может восстановить состояние на момент сбоя. Для снижения риска часто используют процедуру проверки (chkdsk / fsck), которая может занять часы на больших томах.
Фрагментация
Постоянная перезапись и удаление файлов приводит к фрагментации, особенно на дисках большого объёма. Дефрагментация под Windows (для FAT32) обязательна, но часто невозможна на устройствах с флеш-памятью (так как контроллер сам управляет физическими блоками). Фрагментация замедляет чтение, особенно на медленных носителях (например, USB 2.0).
Нет поддержки разрешений и безопасности
FAT не хранит никакой информации о правах доступа (владельце, группе, ACL). Это делает её неподходящей для многопользовательских ОС, где требуется контроль доступа (Windows NT, Linux, Unix). На флешках это редко проблема, но для системных разделов недопустимо.
Уязвимость к вирусам и вмешательству
Простота структуры делает FAT лёгкой мишенью для вирусов: они могут перезаписывать загрузочный сектор или FAT-таблицу, что выводит весь диск из строя. Из-за отсутствия шифрования и разрешений вредоностное ПО легко распространяется через FAT-носители.
Интересные и малознакомые факты
- Происхождение названия — File Allocation Table (таблица размещения файлов) — название отражает суть системы: вся информация о расположении файлов хранится в одной (или двух) таблицах, что было техническим решением для маломощных процессоров 1970-х годов.
- Совместимость с древним железом — FAT12 до сих пор используется для гибких дисков формата 3,5 дюйма (1,44 МБ), хотя такие диски почти вышли из употребления.
- Ограничение на количество файлов в корне FAT16 — в MS-DOS корневой каталог имел жёсткое ограничение (например, 512 записей для FAT16). Поэтому на диске C:\ в Windows 98 нельзя было создать более 512 файлов в корне, что приводило к ошибкам при установке некоторых программ.
- Влияние на современные микроконтроллеры — многие библиотеки для работы с SD-картами (например, Petit FatFs или FatFs) ориентируются на спецификации FAT12/16/32, так как они имеют малый размер ROM и RAM.
- Попытки расширения — существовали неофициальные модификации FAT32 с увеличенным до 64 КБ размером кластера (для поддержки дисков > 2 ТБ), они использовались некоторыми производителями NAS (например, Synology), но не стали стандартом из-за несовместимости.
- FAT в UEFI — спецификация UEFI требует, чтобы системный раздел (ESP) был отформатирован в FAT32 (или FAT16 для малых дисков). Это единственный способ загрузки современных компьютеров под Windows и Linux.
- Миф о надёжности FAT32 — из-за использования единственной FAT-таблицы (в большинстве реализаций — только одна копия, вторая может быть неактуальна), а также отсутствия журнала, FAT считается менее надёжной, чем NTFS, но на практике она остаётся популярной благодаря простоте.
Источники
- Microsoft Corporation. «File Allocation Table (FAT) Structure». Официальная документация драйвера FAT (1990-е гг.).
- O'Reilly Media. «FAT32 File System Specification» (1996, последняя публичная версия).
- Microsoft. «FAT32 versus FAT16 versus FAT12». Knowledge Base Article (KB 154997).
- Filesystems.org. «exFAT: Extended File Allocation Table Specification» (2019).
- «Understanding FAT12/16/32 in MCU Applications» — Technical Report, Atmel (2010).
- «FAT File System» — Wikipedia (общедоступная информация с проверяемыми источниками).
- «The FAT Filesystem» — Linux-документация (System Administration).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →