Проектирование файловой системы FAT

Computer file system architecture design

ТОЛСТЫЙ
Разработчик(и)Microsoft , SCP , IBM , Compaq , Цифровые исследования , Novell , Caldera
Полное имяТаблица размещения файлов:
FAT12 (12-битная версия),
FAT16 (16-битные версии),
FAT32 (32-битная версия с использованием 28 бит),
exFAT (64-битные версии)
Введено1977 ( автономный диск BASIC-80 )
FAT12: август 1980 (SCP  QDOS )
FAT16: август 1984 (IBM  PC DOS 3.0)
FAT16B: ноябрь 1987 ( Compaq MS-DOS 3.31)
FAT32: август 1996 ( Windows 95 OSR2 )
exFAT: ноябрь 2006 ( Windows Embedded CE 6.0 )
Идентификаторы разделовMBR / EBR :
FAT12 :  ea FAT16 :  ea FAT32 :  ea exFAT :  ea BDP :0x01
0x040x060x0E
0x0B0x0C
0x07

EBD0A0A2-B9E5-4433­87C0-68B6B72699C7
Структуры
Содержимое каталогаСтол
Распределение файловСвязанный список
Плохие блокиКластерная маркировка
Пределы
Максимальный размер томаFAT12: 32  МБ (256  МБ для кластеров по 64  КБ )
FAT16: 2  ГБ (4  ГБ для кластеров по 64  КБ )
FAT32: 2  ТБ (16  ТБ для секторов по 4  КБ )
Максимальный размер файла4 294 967 295 байт (4  ГБ - 1) с FAT16B и FAT32 [1]
Макс . кол- во файловFAT12: 4068 для  кластеров по 8 КБ
FAT16: 65460 для  кластеров по 32 КБ
FAT32: 268173300 для  кластеров по 32 КБ
Максимальная длина имени файла8.3 имя файла или 255 символов UCS-2 при использовании LFN
Функции
Даты записаныДата/время изменения, дата/время создания (только DOS 7.0 и выше), дата доступа (доступно только при включенном ACCDATE ), [2] дата/время удаления (только с DELWATCH 2)
Диапазон дат1980-01-01 по 2099-12-31 ( 2107-12-31 )
Разрешение даты2 секунды для времени последнего изменения,
10 мс для времени создания,
1 день для даты доступа,
2 секунды для времени удаления
ВилкиНе изначально
АтрибутыТолько для чтения, Скрытый, Системный, Том, Каталог, Архив

Разрешения файловой системы
FAT12/FAT16: права доступа к файлам, каталогам и томам для чтения, записи, выполнения, удаления только с DR-DOS , PalmDOS , Novell DOS , OpenDOS , FlexOS , 4680 OS , 4690 OS , Concurrent DOS , Multiuser DOS , System Manager , REAL/32 (право выполнения только с FlexOS, 4680 OS, 4690 OS; отдельные пароли файлов/каталогов не с FlexOS, 4680 OS, 4690 OS; классы разрешений World/Group/Owner только с загруженной многопользовательской безопасностью)
FAT32: частичные, только с DR-DOS, REAL/32 и 4690 OS
Прозрачное
сжатие
FAT12/FAT16: для каждого тома, SuperStor , Stacker , DoubleSpace , DriveSpace
FAT32: нет
Прозрачное
шифрование
FAT12/FAT16: только для тома с DR-DOS
FAT32: нет

Файловая система FAT — это файловая система, используемая в операционных системах семейства MS-DOS и Windows 9x . [3] Она продолжает использоваться на мобильных устройствах и встраиваемых системах и, таким образом, является хорошо подходящей файловой системой для обмена данными между компьютерами и устройствами практически любого типа и возраста с 1981 года по настоящее время.

Структура

Файловая система FAT состоит из четырех областей:

Области файловой системы FAT, включающие четыре основные области
ОбластьРазмер в секторахСодержаниеПримечания
Зарезервированные сектора(количество зарезервированных секторов)Загрузочный секторПервый зарезервированный сектор (логический сектор 0) — это загрузочный сектор (также называемый Volume Boot Record или просто VBR ). Он включает область, называемую BIOS Parameter Block ( BPB ), которая содержит некоторую базовую информацию о файловой системе, в частности, ее тип и указатели на расположение других разделов, и обычно содержит код загрузчика операционной системы.

Важная информация из загрузочного сектора доступна через структуру операционной системы, называемую блоком параметров диска ( DPB ) в DOS и OS/2.

Общее количество зарезервированных секторов указывается в поле внутри загрузочного сектора и обычно составляет 32 в файловых системах FAT32. [4]

Для файловых систем FAT32 зарезервированные сектора включают сектор информации о файловой системе в логическом секторе 1 и резервный загрузочный сектор в логическом секторе 6. В то время как многие другие поставщики продолжали использовать односекторную настройку (только логический сектор 0) для загрузчика, код загрузочного сектора Microsoft расширился и охватывает логические секторы 0 и 2 с момента введения FAT32, причем логический сектор 0 зависит от подпрограмм в логическом секторе 2. Область резервного загрузочного сектора также состоит из трех логических секторов 6, 7 и 8. В некоторых случаях Microsoft также использует сектор 12 области зарезервированных секторов для расширенного загрузчика.

Сектор информации FS (только FAT32)
Дополнительные зарезервированные сектора (необязательно)
Регион FAT(количество FAT) * (секторов на FAT)Таблица размещения файлов №1Обычно он содержит две копии таблицы размещения файлов для проверки избыточности, хотя используется редко, даже утилитами восстановления дисков. Это карты области данных, указывающие, какие кластеры используются файлами и каталогами. В FAT12 и FAT16 они следуют сразу за зарезервированными секторами. Обычно дополнительные копии хранятся в тесной синхронизации при записи, а при чтении они используются только при возникновении ошибок в первой FAT. Первые два кластера (кластер 0 и 1) на карте содержат специальные значения.
Таблица размещения файлов №2 ... (необязательно)
Регион корневого каталога(количество корневых записей * 32) / (байт на сектор)Корневой каталог (только FAT12 и FAT16)Это таблица каталогов , которая хранит информацию о файлах и каталогах, расположенных в корневом каталоге. Она используется только с FAT12 и FAT16 и накладывает на корневой каталог фиксированный максимальный размер, который предварительно выделяется при создании этого тома. FAT32 хранит корневой каталог в области данных вместе с файлами и другими каталогами, позволяя ему расти без такого ограничения. Таким образом, для FAT32 область данных начинается здесь.
Регион данных(количество кластеров) * (секторов на кластер)Область данных (для файлов и каталогов) ... (до конца раздела или диска)Здесь хранятся фактические данные файлов и каталогов, и они занимают большую часть раздела. FAT32 обычно начинает таблицу корневых каталогов в кластере номер 2: первый кластер области данных.

FAT использует формат little-endian для всех записей в заголовке (за исключением, где это явно указано, некоторых записей в загрузочных секторах Atari ST) и FAT(s). [5] Можно выделить больше секторов FAT, чем необходимо для количества кластеров. Конец последнего сектора каждой копии FAT может быть неиспользованным, если нет соответствующих кластеров. Общее количество секторов (как указано в загрузочной записи) может быть больше, чем количество секторов, используемых данными (кластеры × секторы на кластер), FAT (количество FAT × секторы на FAT), корневой каталог (n/a для FAT32) и скрытые секторы, включая загрузочный сектор: это приведет к неиспользуемым секторам в конце тома. Если раздел содержит больше секторов, чем общее количество секторов, занятых файловой системой, это также приведет к неиспользуемым секторам в конце раздела, после тома.

Зона зарезервированных секторов

Загрузочный сектор

На неразделенных устройствах хранения данных , таких как дискеты , загрузочный сектор ( VBR ) является первым сектором (логический сектор 0 с физическим адресом CHS 0/0/1 или адресом LBA 0). Для разделенных устройств хранения данных, таких как жесткие диски, загрузочный сектор является первым сектором раздела, как указано в таблице разделов устройства.

Общая структура загрузочного сектора, используемая большинством версий FAT для IBM-совместимых машин x86, начиная с DOS 2.0
Смещение байтаДлина (байты)Содержание
0x0003Инструкция перехода. Если загрузочный сектор имеет действительную подпись, находящуюся в последних двух байтах загрузочного сектора (проверенную большинством загрузчиков, находящихся в системной BIOS или MBR), и этот том загружается, предыдущий загрузчик передаст выполнение в эту точку входа с определенными значениями регистров, а затем инструкция перехода пропустит остальную часть (неисполняемого) заголовка. См. Запись загрузки тома .

Начиная с DOS 2.0, допустимые загрузочные диски x86 должны начинаться либо с короткого перехода, за которым следует NOP ( последовательность опстрингов 0xEB 0x?? 0x90 [6] [7] , как это видно с DOS 3.0 [nb 1] —и в DOS 1.1 [8] [9] ), либо с ближнего перехода ( 0xE9 0x?? 0x?? [6] [7] , как это видно на большинстве ( Compaq , TeleVideo ) отформатированных в DOS 2.x дисков, а также на некоторых ( Epson , Olivetti ) дисках DOS 3.1). Для обратной совместимости MS-DOS, PC DOS и DR-DOS также принимают переход ( 0x69 0x?? 0x?? ) [6] [7] [10] на сменных дисках. На жестких дисках DR DOS дополнительно принимает переставленную последовательность JMPS, начинающуюся с NOP ( 0x90 0xEB 0x?? ), [10] тогда как MS-DOS/PC DOS этого не делают. (См. ниже о совместимости с Atari ST.) Наличие одного из этих шаблонов opstring (в сочетании с проверкой на допустимое значение дескриптора носителя по смещению 0x015 ) служит индикатором для DOS 3.3 и выше того, что присутствует какой-то вид BPB (хотя точный размер не должен определяться из цели перехода, поскольку некоторые загрузочные секторы содержат частные данные загрузчика после BPB), в то время как для томов DOS 1.x (и некоторых DOS 3.0) им придется вернуться к методу DOS 1.x, чтобы определить формат через байт носителя в FAT (в логическом секторе 1).

0x0038Имя OEM (дополнено пробелами 0x20 ). Это значение определяет, в какой системе был отформатирован диск.

Хотя официально документировано как свободное для использования OEM, MS-DOS/PC DOS (начиная с версии 3.1), Windows 95/98/SE/ME и OS/2 проверяют это поле, чтобы определить, на какие другие части загрузочной записи можно положиться и как их интерпретировать. Поэтому установка метки OEM на произвольные или фиктивные значения может привести к тому, что MS-DOS, PC DOS и OS/2 не будут правильно распознавать том и приводить к повреждению данных при записи. [11] [12] [13] Типичными примерами являются " IBM␠␠3.3", " MSDOS5.0", " MSWIN4.1", " IBM␠␠7.1", " mkdosfs␠", и " FreeDOS␠".

Некоторые поставщики хранят в этой записи лицензионную информацию или ключи доступа.

Volume Tracker в Windows 95/98/SE/ME перезапишет OEM-метку ?????IHCподписями " " (остаток от " ␠OGACIHC" для " Chicago ") даже при, казалось бы, доступе к диску только для чтения (например, DIR A:), если носитель не защищен от записи. Учитывая зависимость от определенных значений, описанных выше, это может, в зависимости от фактического формата и содержимого BPB, привести к тому, что MS-DOS/PC DOS и OS/2 больше не будут распознавать носитель и выдавать сообщения об ошибках, несмотря на то, что носитель не является дефектным и все еще может быть прочитан без проблем в других операционных системах. Windows 9x считывает эти самомаркированные диски без каких-либо проблем, но выдает некоторые странные значения для бессмысленных параметров, которые не существуют или не используются, когда диск был отформатирован с использованием более старой спецификации BPB, например, серийный номер диска (который существует только для дисков, отформатированных в DOS 5.0 или более поздней версии, и в Windows 9x после перезаписи OEM-метки на ?????IHCбудет сообщать об этом как 0000-0000или любое другое значение, сохраненное в поле серийного номера диска при использовании диска, отформатированного в другой системе). [14] Это применимо только к съемным дискам.

Некоторые загрузчики вносят коррективы или отказываются передавать управление загрузочному сектору в зависимости от определенных значений, обнаруженных здесь (например, смещение NEWLDR 0x018 ).

Загрузочное ПЗУ компьютера Wang Professional Computer будет считать диск загрузочным, только если первые четыре символа метки OEM — « Wang». Аналогично, ПЗУ BIOS компьютера Philips :YES будет загружаться с диска, только если первые четыре символа метки OEM — « :YES».

Если в FAT32 EBPB сигнатура в секторе со смещением 0x042 равна 0x29 , а обе записи общего количества секторов равны 0, запись файловой системы может служить 64-битной записью общего количества секторов, а запись метки OEM может использоваться как альтернативный тип файловой системы вместо обычной записи со смещением 0x052 .

Аналогичным образом, если эта запись установлена ​​в " EXFAT␠␠␠", это указывает на использование exFAT BPB , расположенного по смещению сектора от 0x040 до 0x077 , тогда как тома NTFS используют " " [15] для указания NTFS BPB .NTFS␠␠␠␠

0x00BварьируетсяБлок параметров BIOS (13, 19, 21 или 25 байт), расширенный блок параметров BIOS (32 или 51 байт) или расширенный блок параметров BIOS FAT32 (60 или 79 байт); размер и содержимое различаются в зависимости от операционной системы и версии, см. ниже
варьируетсяварьируетсяЗагрузочный код, специфичный для файловой системы и операционной системы; часто начинается сразу после [E]BPB, но иногда между концом [E]BPB и началом загрузочного кода хранятся дополнительные «личные» данные загрузчика; поэтому переход по смещению 0x001 не может быть использован для надежного получения точного формата [E]BPB.

(В сочетании с DOS 3.31 BPB некоторые загрузчики GPT (например, BootDuet ) используют 0x1FA0x1FD для хранения старших 4 байтов скрытых секторов для томов, расположенных за пределами первых 2 32 -1 секторов. Поскольку это место может содержать код или другие данные в других загрузочных секторах, запись в него может быть невозможна, если не все 0x1F90x1FD содержат ноль.)

0x1FD1Номер физического диска (только в загрузочных секторах DOS 3.2 - 3.31). С OS/2 1.0 и DOS 4.0 эта запись переместилась в сектор со смещением 0x024 (по смещению 0x19 в EBPB). Большинство загрузочных секторов Microsoft и IBM с тех пор сохраняют значения 0x00 по смещению 0x1FC и 0x1FD , хотя они не являются частью сигнатуры по адресу 0x1FE .

Если это относится к загрузочному тому, улучшенный MBR DR-DOS 7.07 может быть настроен (см. NEWLDR offset 0x014 ) для динамического обновления этой записи до значения DL, предоставленного во время загрузки, или значения, сохраненного в таблице разделов. Это позволяет загружать альтернативные диски, даже если код VBR игнорирует значение DL.

0x1FE2Подпись загрузочного сектора ( 0x55 0xAA ). [4] [nb 2] Эта подпись указывает на совместимый с IBM PC загрузочный код и проверяется большинством загрузчиков, находящихся в системной BIOS или MBR, перед передачей выполнения загрузочному коду загрузочного сектора (но, например, не исходным IBM PC ROM-BIOS [16] ). Эта подпись не указывает на конкретную файловую систему или операционную систему. Поскольку эта подпись присутствует не на всех дисках, отформатированных в FAT (например, не на DOS 1.x [8] [9] или не загружаемых с x86 томах FAT), операционные системы не должны полагаться на эту подпись при входе в тома (старые выпуски MS-DOS/PC DOS до 3.3 проверяли эту подпись, но более новые выпуски, а также DR-DOS этого не делают). Инструменты форматирования не должны записывать эту подпись, если записанный загрузочный сектор не содержит по крайней мере заглушку фиктивного загрузчика, совместимого с x86; как минимум, он должен остановить ЦП в бесконечном цикле ( 0xF4 0xEB 0xFD ) или выдать INT 19h и RETF ( 0xCD 0x19 0xCB ). Однако эти строки операций не следует использовать при смещении сектора 0x000 , поскольку DOS проверяет другие коды операций как сигнатуры. Многие дискеты MSX-DOS 2 используют 0xEB 0xFE 0x90 при смещении сектора 0x000 , чтобы поймать ЦП в тесном цикле, сохраняя при этом шаблон кода операции, распознаваемый MS-DOS/PC DOS.

Эта подпись должна быть расположена в фиксированном смещении сектора 0x1FE для размеров сектора 512 или выше. Если размер физического сектора больше, она может быть повторена в конце физического сектора.

Atari ST будет считать диск загрузочным для Atari 68000 , если контрольная сумма по 256 big-endian словам загрузочного сектора равна 0x1234 . [17] [nb 3] Если код загрузчика совместим с IBM, важно убедиться, что контрольная сумма по загрузочному сектору не совпадает с этой контрольной суммой случайно. Если это произойдет, можно использовать изменение неиспользуемого бита (например, до или после области загрузочного кода), чтобы гарантировать, что это условие не выполняется.

В редких случаях на образах дисков наблюдалась обратная сигнатура 0xAA 0x55 . Это может быть результатом неправильной реализации в инструменте форматирования на основе неправильной документации, [nb 2], но это также может указывать на перестановку порядка байтов в образе диска, что могло произойти при передаче между платформами с разным порядком байтов . Значения BPB и файловые системы FAT12, FAT16 и FAT32 предназначены только для использования представления little-endian , и нет известных реализаций вариантов, использующих значения big-endian .

Дискеты Atari ST, отформатированные в FAT, имеют очень похожую структуру загрузочного сектора
Смещение байтаДлина (байты)Содержание
0x0002Инструкция перехода. Оригинальные загрузочные секторы Atari ST начинаются с инструкции 68000 BRA.S ( 0x60 0x?? ). [5] Для совместимости с операционными системами ПК диски, отформатированные Atari ST, начиная с TOS 1.4, начинаются с 0xE9 0x?? .
0x0026Имя OEM (дополненное пробелами 0x20 ), например, " " ( 0x4C 0x6F 0x61 0x64 0x65 0x72 ) на томах, содержащих загрузчик Atari ST. См. меры предосторожности при использовании имени OEM для дисков, отформатированных на ПК, выше. Смещение и длина этой записи отличаются от записи на дисках, отформатированных на ПК.Loader
0x0083Серийный номер диска [5] (по умолчанию: 0x00 0x00 0x00 ), используемый Atari ST для обнаружения смены диска. (Windows 9x Volume Tracker всегда будет сохранять здесь " " на незащищенных от записи дискетах; см. выше.) Это значение необходимо изменить, если содержимое диска было изменено извне, в противном случае Atari ST может не распознать изменение при повторной вставке. Эта запись перекрывает поле OEM Name на дисках, отформатированных для ПК. Для максимальной совместимости может потребоваться сопоставить здесь определенные шаблоны; см. выше.IHC
0x00B19Блок параметров BIOS DOS 3.0 ( формат little-endian )
0x01EварьируетсяДанные частного загрузочного сектора (смешанный формат с прямым и обратным порядком байтов )
варьируетсяварьируетсяФайловая система и специфичный для операционной системы загрузочный код Atari ST. Не следует делать никаких предположений относительно позиции загрузки кода, который должен быть перемещаемым. Если загрузка операционной системы (TOS.IMG [5] ) не удалась, код может вернуться в BIOS Atari ST с инструкцией 68000 RTS ( код операции 0x4E75 с байтовой последовательностью big-endian 0x4E 0x75 [nb 2] ) и всеми регистрами без изменений.
0x1FE2Контрольная сумма. 16-битная контрольная сумма по 256 словам с обратным порядком байтов 512-байтового загрузочного сектора, включая это слово, должна соответствовать магическому значению 0x1234 , чтобы указать исполняемый код загрузочного сектора Atari ST 68000. [17] Эта запись контрольной суммы может использоваться для соответствующего выравнивания контрольной суммы. [примечание 3]

Если размер логического сектора больше 512 байт, остаток не включается в контрольную сумму и обычно заполняется нулями. [17] Поскольку некоторые операционные системы ПК ошибочно не принимают дискеты в формате FAT, если сигнатура 0x55 0xAA [nb 2] отсутствует, рекомендуется поместить 0x55 0xAA в это место (и добавить совместимый с IBM загрузчик или заглушку) и использовать неиспользуемое слово в области личных данных или загрузочного кода или серийного номера, чтобы гарантировать, что контрольная сумма 0x1234 [nb 3] не совпадет (если только общий код FAT не будет исполняемым файлом как IBM PC, так и Atari ST одновременно).

Тома MSX-DOS, отформатированные в FAT12, имеют очень похожую структуру загрузочного сектора.
Смещение байтаДлина (байты)Содержание
0x0003Фиктивная инструкция перехода (например, 0xEB 0xFE 0x90 ).
0x0038Имя OEM (дополнено пробелами 0x20 ).
0x00B19DOS 3.0 БПБ
0x01Eварьируется (2)Точка входа кода MSX-DOS 1 для процессоров Z80 в загрузочный код MSX. Это то место, куда машины MSX-DOS 1 переходят при передаче управления загрузочному сектору. Это место перекрывается с форматами BPB, начиная с DOS 3.2, или кодом загрузочного сектора, совместимым с x86, совместимых с загрузочными секторами IBM PC, и приведет к сбою на машине MSX, если не были приняты специальные меры предосторожности, например, не зацикливание ЦП здесь (opstring 0x18 0xFE для JR 0x01E ).
0x0206Подпись тома MSX-DOS 2 " VOL_ID".
0x0261Флаг восстановления MSX-DOS 2 (по умолчанию: 0x00 . Если сигнатура " " присутствует в смещении сектора 0x020 , этот флаг указывает, содержит ли том удаленные файлы, которые можно восстановить (см. смещение 0x0C в записях каталога).VOL_ID
0x0274Серийный номер диска MSX-DOS 2 (по умолчанию: 0x00000000 ). Если сигнатура " " присутствует в смещении сектора 0x020 , MSX-DOS 2 сохраняет здесь серийный номер тома для обнаружения смены носителя.VOL_ID
0x02B5сдержанный
0x030варьируется (2)Точка входа кода MSX-DOS 2 для процессоров Z80 в загрузочный код MSX. Это то место, куда машины MSX-DOS 2 переходят при передаче управления загрузочному сектору. Это место перекрывается с форматами EBPB, начиная с DOS 4.0 / OS/2 1.2 или кодом загрузочного сектора, совместимым с x86, загрузочных секторов, совместимых с IBM PC, и приведет к сбою на машине MSX, если не были приняты специальные меры предосторожности, такие как захват ЦП в тесном цикле здесь (opstring 0x18 0xFE для JR 0x030 ).
0x1FE2Подпись

Блок параметров BIOS

Общая структура первых 25 байт блока параметров BIOS (BPB), используемая версиями FAT, начиная с DOS 2.0 (байты со смещением сектора от 0x00B до 0x017 хранятся с DOS 2.0, но не всегда используются до DOS 3.2, значения с 0x018 по 0x01B используются с DOS 3.0)
Смещение сектораСмещение BPBДлина (байты)Содержание
0x00B0x002Байт на логический сектор; наиболее распространенное значение — 512. Некоторые операционные системы не поддерживают другие размеры секторов. Для простоты и максимальной производительности размер логического сектора часто совпадает с размером физического сектора диска, но может быть больше или меньше в некоторых сценариях.

Минимально допустимое значение для незагружаемых томов FAT12/FAT16 с логическими секторами до 65 535 составляет 32 байта, или 64 байта для более чем 65 535 логических секторов. Минимальное практическое значение составляет 128. Некоторые OEM-версии DOS до DOS 3.31 использовали логические размеры секторов до 8192 байт для логических секторных FAT . Atari ST GEMDOS поддерживает логические размеры секторов от 512 до 4096. [17] DR-DOS поддерживает загрузку с томов FAT12/FAT16 с логическими размерами секторов до 32 КБ и реализации INT 13h, поддерживающие физические секторы до 1024 байт/сектор. [nb 4] Минимальный логический размер сектора для стандартных томов FAT32 составляет 512 байт, который можно уменьшить до 128 байт без поддержки сектора информации FS.

Дисководы и контроллеры гибких дисков используют физические размеры секторов 128, 256, 512 и 1024 байта (например, PC/AX). Atari Portfolio поддерживает размер сектора 512 для томов размером более 64 КБ, 256 байт для томов размером более 32 КБ и 128 байт для меньших томов. Магнитооптические приводы использовали размеры секторов 512, 1024 и 2048 байт. В 2005 году некоторые жесткие диски Seagate использовали размеры секторов 1024 байта вместо стандартных 512 байт. [18] Жесткие диски Advanced Format используют 4096 байт на сектор ( 4Kn ) с 2010 года, но также смогут эмулировать 512-байтовые секторы ( 512e ) в течение переходного периода.

Linux и, соответственно, Android поддерживают гораздо больший размер логического сектора, официально задокументированный на странице Man для утилит файловой системы, как размер до 32 КБ.

0x00D0x021Логических секторов на кластер. Допустимые значения: 1, 2, 4, 8, 16, 32, 64 и 128. Некоторые версии MS-DOS 3.x поддерживали максимальный размер кластера только 4 КБ, тогда как современные MS-DOS/PC DOS и Windows 95 поддерживают максимальный размер кластера 32 КБ. Windows 98/SE/ME также частично поддерживают размер кластера 64 КБ, но некоторые службы FCB недоступны на таких дисках, и различные приложения не работают. Семейство Windows NT и некоторые альтернативные версии DOS, такие как PTS-DOS, полностью поддерживают кластеры 64 КБ.

Для большинства операционных систем на базе DOS максимальный размер кластера остается равным 32 КБ (или 64 КБ) даже для размеров сектора более 512 байт.

Для логических секторов размером 1 КБ, 2 КБ и 4 КБ Windows NT 4.0 поддерживает размер кластера 128 КБ, тогда как для секторов размером 2 КБ и 4 КБ размер кластера может достигать 256 КБ.

Некоторые версии DR-DOS обеспечивают ограниченную поддержку кластеров размером 128 КБ с 512 байтами на сектор, используя значение сектора/кластера, равное 0.

MS-DOS/PC DOS зависнет при запуске, если это значение ошибочно указано как 0. [19] : INT 21h AX=53h 

0x00E0x032Количество зарезервированных логических секторов. Количество логических секторов перед первым FAT в образе файловой системы. Не менее 1 для этого сектора, обычно 32 для FAT32 (для хранения расширенного загрузочного сектора, сектора информации о ФС и резервных загрузочных секторов).

Поскольку тома, отформатированные в DR-DOS 7.0x FAT32, используют загрузочный сектор с одним сектором, сектор информации о ФС и резервный сектор, некоторые тома, отформатированные в DR-DOS, используют здесь значение 4.

0x0100x051Количество таблиц размещения файлов. Почти всегда 2; RAM-диски могут использовать 1. Большинство версий MS-DOS/PC DOS не поддерживают более 2 FAT. Некоторые операционные системы DOS поддерживают только две FAT в своем встроенном драйвере диска, но поддерживают другие числа FAT для драйверов блочных устройств, загруженных позже.

Тома, объявляющие 2 FAT в этой записи, никогда не будут рассматриваться как тома TFAT . Если значение отличается от 2, некоторые операционные системы Microsoft могут попытаться смонтировать том как том TFAT и использовать второй кластер (кластер 1) первого FAT для определения статуса TFAT.

0x0110x062Максимальное количество записей корневого каталога FAT12 или FAT16. 0 для FAT32, где корневой каталог хранится в обычных кластерах данных; см. смещение 0x02C в FAT32 EBPB.

Значение 0 без FAT32 EBPB (без сигнатуры 0x29 или 0x28 по смещению 0x042 ) может также указывать на корневой каталог переменного размера в некоторых нестандартных реализациях FAT12 и FAT16, которые хранят начальный кластер корневого каталога в записи кластера 1 в FAT. [20] Однако это расширение не поддерживается основными операционными системами, [20] поскольку оно может конфликтовать с другими использованиями записи кластера 1 для флагов обслуживания, текущего маркера конца цепочки или расширений TFAT .

Это значение должно быть скорректировано так, чтобы записи каталога всегда занимали полные логические сектора, учитывая, что каждая запись каталога занимает 32 байта. MS-DOS/PC DOS требуют, чтобы это значение было кратно 16. Максимальное значение, поддерживаемое на гибких дисках, составляет 240, [6] максимальное значение, поддерживаемое MS-DOS/PC DOS на жестких дисках, составляет 512. [6] DR-DOS поддерживает загрузку с томов FAT12/FAT16, если загрузочный файл находится в первых 2048 записях корневого каталога.

0x0130x082Всего логических секторов. 0 для FAT32. (Если ноль, использовать 4-байтовое значение по смещению 0x020 )
0x0150x0A1Дескриптор носителя (сравните: FAT ID): [21] [22] [23] [nb 1]
0xE5
  • 8-дюймовый (200 мм) односторонний, 77 дорожек на стороне, 26 секторов на дорожке, 128 байт на сектор (250,25 КБ) (только DR-DOS)
0xED
  • 5,25-дюймовый (130 мм) двухсторонний, 80 дорожек на стороне, 9 секторов, 720 КБ ( только Tandy 2000 ) [13]
0xEE
  • Предназначено для нестандартных пользовательских разделов (использующих нестандартные форматы BPB или требующих специального доступа к носителям, например, 48-/64-битной адресации); соответствует 0xF8 , но не распознается неосведомленными системами по своей сути; значение не обязательно должно быть идентичным идентификатору FAT, никогда не используется в качестве маркера конца цепочки кластера (зарезервировано для DR-DOS)
0xEF
  • Предназначен для нестандартных пользовательских форматов супердискет ; соответствует 0xF0 , но не распознается неосведомленными системами по своей сути; значение не обязательно должно быть идентичным идентификатору FAT, никогда не используется в качестве маркера конца цепочки кластера (зарезервировано для DR-DOS)
0xF0 [24] [25] [26]
  • 3,5-дюймовый (90 мм) двухсторонний, 80 дорожек на стороне, 18 или 36 секторов на дорожке (1440 КБ, известный как «1,44 МБ»; или 2880 КБ, известный как «2,88 МБ»).
  • Предназначен для использования с пользовательскими форматами дискет и супердискет, геометрия которых определена в BPB.
  • Используется также для других типов носителей, таких как ленты. [27]
0xF4
0xF5
  • Фиксированный диск, 4-сторонний, 12 секторов на дорожку (1,95? МБ) ( только Altos MS-DOS 2.11 ) [28]
0xF8
  • Фиксированный диск (т.е. обычно раздел на жестком диске). (начиная с DOS 2.0) [29] [30]
  • Предназначен для использования с любыми секционированными фиксированными или съемными носителями, геометрия которых определена в BPB.
  • 3,5-дюймовый односторонний, 80 дорожек на стороне, 9 секторов на дорожке (360 КБ) (MS-DOS 3.1 [7] и MSX-DOS)
  • 5,25-дюймовый двухсторонний, 80 дорожек на стороне, 9 секторов на дорожке (720 КБ) ( только Sanyo  55x DS-DOS 2.11) [13]
  • Односторонний ( только Altos MS-DOS 2.11 ) [28]
0xF9 [24] [25] [26]
  • 3,5-дюймовый двухсторонний, 80 дорожек на стороне, 9 секторов на дорожке (720 КБ) (начиная с DOS 3.2) [29]
  • 3,5-дюймовый двухсторонний, 80 дорожек на стороне, 18 секторов на дорожке (1440 КБ) (только DOS 3.2) [29]
  • 5,25-дюймовый двухсторонний, 80 дорожек на стороне, 15 секторов на дорожке (1200 КБ, известный как «1,2 МБ») (начиная с DOS 3.0) [29]
  • Односторонний ( только Altos MS-DOS 2.11 ) [28]
0xFA
  • 3,5-дюймовый и 5,25-дюймовый односторонний, 80 дорожек на стороне, 8 секторов на дорожке (320 КБ)
  • Используется также для RAM-дисков и ROM-дисков (например, в Columbia Data Products [31] и в HP 200LX ).
  • Жесткий диск ( только Tandy  MS-DOS)
0xФБ
  • 3,5-дюймовый и 5,25-дюймовый двухсторонний, 80 дорожек на стороне, 8 секторов на дорожке (640 КБ)
0xFC
  • 5,25-дюймовый односторонний, 40 дорожек на стороне, 9 секторов на дорожке (180 КБ) (начиная с DOS 2.0) [29]
0xФД
  • 5,25-дюймовый двухсторонний, 40 дорожек на стороне, 9 секторов на дорожке (360 КБ) (начиная с DOS 2.0) [29]
  • 8-дюймовый двухсторонний, 77 дорожек на стороне, 26 секторов на дорожке, 128 байт на сектор (500,5 КБ)
  • (8-дюймовый двухсторонний, (одинарной и) двойной плотности (DOS 1) [29] )
0xFE
  • 5,25-дюймовый односторонний, 40 дорожек на стороне, 8 секторов на дорожке (160 КБ) (начиная с DOS 1.0) [29] [32]
  • 8-дюймовый односторонний, 77 дорожек на стороне, 26 секторов на дорожке, 128 байт на сектор (250,25 КБ) [28] [32]
  • 8-дюймовый двухсторонний, 77 дорожек на стороне, 8 секторов на дорожке, 1024 байта на сектор (1232 КБ) [32]
  • (8-дюймовый односторонний, (одинарной и) двойной плотности (DOS 1) [29] )
0xFF
  • 5,25-дюймовый двухсторонний, 40 дорожек на стороне, 8 секторов на дорожке (320 КБ) (начиная с DOS 1.1) [29] [32]
  • Жесткий диск ( только Sanyo  55x DS-DOS 2.11) [13]

Это значение должно отражать дескриптор носителя, хранящийся (в записи для кластера 0) в первом байте каждой копии FAT. Некоторые операционные системы до DOS 3.2 ( 86-DOS , MS-DOS / PC DOS 1.x и MSX-DOS версии 1.0) полностью игнорируют параметры загрузочного сектора и используют значение дескриптора носителя из первого байта FAT для выбора среди внутренне предопределенных шаблонов параметров. Должно быть больше или равно 0xF0 , начиная с DOS 4.0. [6]

На съемных дисках DR-DOS предполагает наличие BPB, если это значение больше или равно 0xF0 , [6] тогда как для фиксированных дисков оно должно быть равно 0xF8 , чтобы предположить наличие BPB.

Первоначально эти значения предназначались для использования в качестве битовых флагов; для любого сменного носителя без распознаваемого формата BPB и дескриптора носителя 0xF8 или 0xFA до 0xFF MS-DOS/PC DOS обрабатывает бит 1 как флаг для выбора формата с 9 секторами на дорожку, а не с 8 секторами, а бит 0 — как флаг для указания двухстороннего носителя. [7] Значения с 0x00 по 0xEF и с 0xF1 по 0xF7 зарезервированы и не должны использоваться.

0x0160x0B2Логические сектора на таблицу размещения файлов для FAT12/FAT16. FAT32 устанавливает это значение на 0 и использует вместо него 32-битное значение со смещением 0x024 .

DOS 3.0 БПБ:

Следующие расширения были задокументированы со времен DOS 3.0, однако они уже поддерживались некоторыми выпусками DOS 2.11. [28] MS-DOS 3.10 по-прежнему поддерживала формат DOS 2.0, но могла использовать и формат DOS 3.0.

Смещение сектораСмещение BPBДлина (байты)Содержание
0x00B0x0013DOS 2.0 БПБ
0x0180x0D2Физические секторы на дорожку для дисков с геометрией INT 13h CHS [4] , например, 15 для дискеты «1,20 МБ» (1200 КБ).

Нулевая запись указывает на то, что эта запись зарезервирована, но не используется.

0x01A0x0F2Количество головок для дисков с геометрией INT 13h CHS, [4] например, 2 для двухсторонней дискеты.

Ошибка во всех версиях MS-DOS/PC DOS вплоть до 7.10 приводит к сбою этих операционных систем при использовании геометрии CHS с 256 головками, поэтому почти все BIOS выбирают максимум 255 головок.

Нулевая запись указывает на то, что эта запись зарезервирована, но не используется.

0x01С0x112Количество скрытых секторов, предшествующих разделу, содержащему этот том FAT. Это поле всегда должно быть равно нулю на носителях, которые не разбиты на разделы. Эта запись DOS 3.0 несовместима с аналогичной записью по смещению 0x01C в BPB, начиная с DOS 3.31.

Его нельзя использовать, если запись логического сектора по смещению 0x013 равна нулю.

DOS 3.2 БПБ:

Официально MS-DOS 3.20 по-прежнему использовала формат DOS 3.0, но SYSбыла FORMATадаптирована для поддержки уже на 6 байт длиннее формата (из которого не все записи были использованы).

Смещение сектораСмещение BPBДлина (байты)Содержание
0x00B0x0019DOS 3.0 БПБ
0x01E0x132Всего логических секторов, включая скрытые. Эта запись DOS 3.2 несовместима с аналогичной записью по смещению 0x020 в BPB, начиная с DOS 3.31.

Его нельзя использовать, если запись логического сектора по смещению 0x013 равна нулю.

ДОС 3.31 БПБ:

Официально представленный в DOS 3.31 и не используемый в DOS 3.2, некоторые утилиты DOS 3.2 были разработаны так, чтобы знать об этом новом формате. Официальная документация рекомендует доверять этим значениям только в том случае, если запись логических секторов по смещению 0x013 равна нулю.

Смещение сектораСмещение BPBДлина (байты)Содержание
0x00B0x0013DOS 2.0 БПБ
0x0180x0D2Физические секторы на дорожку для дисков с геометрией INT 13h CHS, [4] например, 18 для дискеты "1,44 МБ" (1440 КБ). Не используется для приводов, которые больше не поддерживают доступ CHS. Идентично записи, доступной с DOS 3.0.

Нулевая запись указывает на то, что эта запись зарезервирована, но не используется. Значение 0 может указывать на доступ только LBA, но может вызвать исключение деления на ноль в некоторых загрузчиках, которого можно избежать, сохранив здесь нейтральное значение 1, если никакая геометрия CHS не может быть разумно эмулирована.

0x01A0x0F2Количество головок для дисков с геометрией INT 13h CHS, [4] например, 2 для двухсторонней дискеты. Не используется для приводов, которые больше не поддерживают доступ CHS. Идентично записи, доступной с DOS 3.0.

Ошибка во всех версиях MS-DOS/PC DOS вплоть до 7.10 приводит к сбою этих операционных систем при использовании геометрии CHS с 256 головками, поэтому почти все BIOS выбирают максимум 255 головок.

Нулевая запись указывает на то, что эта запись зарезервирована, но не используется. Значение 0 может указывать на доступ только LBA, но может вызвать исключение деления на ноль в некоторых загрузчиках, которого можно избежать, сохранив здесь нейтральное значение 1, если никакая геометрия CHS не может быть разумно эмулирована.

0x01С0x114Количество скрытых секторов, предшествующих разделу, содержащему этот том FAT. Это поле всегда должно быть равно нулю на носителях, которые не разбиты на разделы. [24] [25] [26] Эта запись DOS 3.31 несовместима с аналогичной записью по смещению 0x01C в DOS 3.0-3.3 BPB. По крайней мере, ей можно доверять, если она содержит ноль или если запись логических секторов по смещению 0x013 равна нулю.

Если он принадлежит расширенному активному разделу (AAP), выбранному во время загрузки, запись BPB будет динамически обновляться расширенной MBR для отражения значения «относительных секторов» в таблице разделов, хранящейся по смещению 0x1B6 в AAP или NEWLDR MBR, чтобы стало возможным загружать операционную систему с EBR .

(Некоторые загрузчики GPT (например, BootDuet ) используют смещения загрузочного сектора 0x1FA–0x1FD для хранения старших 4 байтов 64-битного значения скрытых секторов для томов, расположенных за пределами первых 2 32 −1 секторов.)

0x0200x154Всего логических секторов (если больше 65535; в противном случае см. смещение 0x013 ). Эта запись DOS 3.31 несовместима с аналогичной записью по смещению 0x01E в DOS 3.2-3.3 BPB. Официально ее следует использовать только в том случае, если запись логических секторов по смещению 0x013 равна нулю, но некоторые операционные системы (некоторые старые версии DR DOS) используют эту запись также для меньших дисков.

Для разделенных носителей, если эта запись и запись по адресу 0x013 равны 0 (как это видно на некоторых томах DOS 3.x FAT16), многие операционные системы (включая MS-DOS/PC DOS) вместо этого извлекут значение из соответствующей записи раздела (по смещению 0xC ) в MBR .

Если обе эти записи равны 0 на томах, использующих FAT32 EBPB с сигнатурой 0x29 , значения, превышающие предел 4 294 967 295 (2 32 −1) (например, некоторые тома DR-DOS с 32-битными кластерными записями), могут использовать вместо этого 64-битную запись со смещением 0x052 .

Простая формула переводит заданный номер кластера тома CNв логический номер сектора LSN: [24] [25] [26]

  1. Определите (один раз) , где зарезервированное количество секторов хранится по смещению 0x00E , количество FAT по смещению 0x010 , секторы на FAT по смещению 0x016 (FAT12/FAT16) или 0x024 (FAT32), записи корневого каталога по смещению 0x011 , размер сектора по смещению 0x00B и округлите до целого числа.SSA=RSC+FN×SF+ceil((32×RDE)/SS)RSCFNSFRDESSceil(x)
  2. Определите , где хранятся сектора в кластере по смещению 0x00D .LSN=SSA+(CN−2)×SCSC

На неразделенных носителях число скрытых секторов тома равно нулю, и поэтому LSNи LBAадреса становятся одинаковыми до тех пор, пока логический размер сектора тома идентичен физическому размеру сектора базового носителя. При этих условиях также просто выполнять преобразование между CHSадресами и LSNsтакже:

LSN=SPT×(HN+(NOS×TN))+SN−1, где секторы на дорожку SPTхранятся по смещению 0x018 , а количество сторон по смещению 0x01A . Номер дорожки , номер головки и номер сектора соответствуют цилиндру-головке-сектору : формула дает известное преобразование CHS в LBA .NOSTNHNSN

Расширенный блок параметров BIOS

Дальнейшая структура, используемая FAT12 и FAT16, начиная с OS/2 1.0 и DOS 4.0, также известная как расширенный блок параметров BIOS (EBPB) (байты ниже смещения сектора 0x024 такие же, как для DOS 3.31 BPB):

Смещение секторасмещение EBPBДлина (байты)Содержание
0x00B0x0025ДОС 3.31 БПБ
0x0240x191Номер физического диска ( 0x00 для (первого) съемного носителя, 0x80 для (первого) фиксированного диска согласно INT 13h ). Допустимые значения для возможных физических дисков в зависимости от BIOS: 0x00 - 0x7E и 0x80 - 0xFE . Значения 0x7F и 0xFF зарезервированы для внутренних целей, таких как удаленная загрузка или загрузка ROM, и никогда не должны встречаться на диске. Некоторые загрузчики, такие как загрузчик MS-DOS/PC DOS, используют это значение при загрузке операционной системы, другие вообще игнорируют его или используют номер диска, предоставленный в регистре DL базовым загрузчиком (например, со многими BIOS и MBR). Запись иногда изменяется командой SYS или может быть динамически исправлена ​​предыдущим загрузчиком начальной загрузки, чтобы заставить код загрузочного сектора загрузить операционную систему с физических дисков, отличных от используемых по умолчанию.

Подобная запись существовала (только) в загрузочных секторах DOS 3.2 - 3.31 по смещению сектора 0x1FD .

Если это относится к загрузочному тому, улучшенный MBR DR-DOS 7.07 может быть настроен (см. NEWLDR offset 0x014 ) для динамического обновления этой записи EBPB до значения DL, предоставленного во время загрузки, или значения, сохраненного в таблице разделов. Это позволяет загружать альтернативные диски, даже если код VBR игнорирует значение DL.

0x0250x1A1Сдержанный;
  • В некоторых загрузочных кодах MS-DOS/PC DOS используется как блокнот для INT 13h текущего старшего байта для предполагаемого 16-битного слова со смещением 0x024 . Некоторые загрузочные секторы DR-DOS FAT12/FAT16 также используют эту запись как блокнот, но для других целей.
  • В этом месте VGA-Copy хранит CRC для ROM-BIOS системы.
  • Некоторые менеджеры загрузки используют эту запись для сообщения желаемой буквы диска, под которой должен располагаться том, операционным системам, таким как OS/2, путем установки бита 7 и указания номера диска в битах 6-0 (C: = значение 0, D: = значение 1, ...). Поскольку это обычно влияет только на образ загрузочного сектора в памяти, это не вызывает проблем совместимости с другими вариантами использования;
  • В Windows NT используется для флагов CHKDSK (биты 7-2 всегда очищены, бит 1: обнаружены ошибки ввода-вывода на диске, возможные поврежденные сектора, запустить сканирование поверхности при следующей загрузке, бит 0: том «грязный» и не был правильно размонтирован перед выключением, запустить CHKDSK при следующей загрузке). [30] Должен быть установлен в 0 инструментами форматирования. [24] [25] [26] См. также: Битовые флаги во второй записи кластера в FAT.
0x0260x1Б1Расширенная загрузочная подпись. (Должна быть 0x29 [24] [25] [26] [21], чтобы указать, что существует EBPB со следующими 3 записями (начиная с OS/2 1.2 и DOS 4.0). Может быть 0x28 на некоторых дисках OS/2 1.0-1.1 и PC DOS 3.4, указывая на более раннюю форму формата EBPB, за которой следует только серийный номер. MS-DOS/PC DOS 4.0 и выше, OS/2 1.2 и выше, а также семейство Windows NT распознают обе подписи соответственно.)
0x0270x1С4Идентификатор тома (серийный номер)

Обычно серийный номер "xxxx-xxxx" создается путем 16-битного сложения обоих значений DX, возвращаемых INT 21h/AH=2Ah (получить системную дату) [nb 5] и INT 21h/AH=2Ch (получить системное время) [nb 5] для старшего слова и еще одного 16-битного сложения обоих значений CX для младшего слова серийного номера. В качестве альтернативы некоторые дисковые утилиты DR-DOS предоставляют /#возможность генерировать человекочитаемую временную метку "mmdd-hhmm", собранную из закодированных в BCD 8-битных значений для месяца, дня, часа и минуты вместо серийного номера.

0x02B0x2011Метка тома раздела, дополненная пробелами ( 0x20 ), например, " " Программное обеспечение, изменяющее метку тома каталога в файловой системе, также должно обновлять эту запись, но не все программы это делают. Метка тома раздела обычно отображается в инструментах разбиения на разделы, поскольку она доступна без монтирования тома. Поддерживается с OS/2 1.2 и MS-DOS 4.0 и выше.NO␠NAME␠␠␠␠

Недоступно, если сигнатура по адресу 0x026 установлена ​​на 0x28 .

Эта область использовалась загрузочными секторами DOS 3.2–3.3 для хранения частной копии таблицы параметров диска (DPT) вместо использования указателя INT 1Eh для извлечения таблицы ПЗУ, как в более поздних выпусках загрузочного сектора. Повторное использование этого местоположения для в основном косметической метки тома раздела минимизировало проблемы, если некоторые старые системные утилиты все еще пытались исправить прежний DPT.

0x0360x2Б8Тип файловой системы, дополненный пробелами ( 0x20 ), например, " ", " ", " "FAT12␠␠␠FAT16␠␠␠FAT␠␠␠␠␠

Эта запись предназначена только для отображения и не должна использоваться операционной системой для определения типа файловой системы. Тем не менее, она иногда используется для идентификации сторонним программным обеспечением, поэтому значения не должны отличаться от официально используемых. Поддерживается с OS/2 1.2 и MS-DOS 4.0 и выше.

Недоступно, если сигнатура по адресу 0x026 установлена ​​на 0x28 .

Расширенный блок параметров BIOS FAT32

По сути, FAT32 вставляет 28 байт в EBPB, за которыми следуют оставшиеся 26 (или иногда только 7) байт EBPB, как показано выше для FAT12 и FAT16. Операционные системы Microsoft и IBM определяют тип файловой системы FAT, используемой на томе, исключительно по количеству кластеров, а не по используемому формату BPB или указанному типу файловой системы, то есть технически возможно использовать "FAT32 EBPB" также для томов FAT12 и FAT16, а также DOS 4.0 EBPB для небольших томов FAT32. Поскольку было обнаружено, что такие тома создаются операционными системами Windows при некоторых странных условиях, [nb 6] операционные системы должны быть готовы справиться с этими гибридными формами.

Смещение сектораСмещение FAT32 EBPBДлина (байты)Содержание
0x00B0x0025ДОС 3.31 БПБ
0x0240x194Логические сектора в таблице размещения файлов (соответствует старой записи по смещению 0x0B в DOS 2.0 BPB).

Байт со смещением 0x026 в этой записи никогда не должен становиться 0x28 или 0x29 , чтобы избежать неправильной интерпретации формата EBPB в операционных системах, не поддерживающих FAT32.

К счастью, при нормальных обстоятельствах (размер сектора 512 байт) этого произойти не может, так как файловая система FAT32 имеет не более 0xffffff6 = 268435446 кластеров. Один сектор Fat вмещает 512 / 4 = 128 дескрипторов кластера. Таким образом, потребуется не более ceil(268435446 / 128) = 2097152 = 0x200000 секторов, что делает третий байт числа секторов FAT не более 0x20, что меньше запрещенных значений 0x28 и 0x29.

0x0280x1D2Описание диска / флаги зеркалирования (биты 3-0: отсчитываемый от нуля номер активной FAT, если установлен бит 7. [4] Если бит 7 очищен, все FAT зеркалируются как обычно. Другие биты зарезервированы и должны быть равны 0.)

Загрузочные секторы DR-DOS 7.07 FAT32 с двойной поддержкой LBA и CHS используют биты 15-8 для хранения флага доступа и части сообщения. Эти биты содержат либо битовую комбинацию 0110:1111b (строчная буква 'o', бит 13 установлен для доступа CHS), либо 0100:1111b (заглавная буква 'O', бит 13 очищен для доступа LBA). Байт также используется для второго символа в потенциальном сообщении об ошибке "No␠IBMBIO␠␠COM" (см. смещение 0x034 ), отображаемом либо в смешанном, либо в верхнем регистре, тем самым указывая, какой тип доступа не удался). Инструменты форматирования или инструменты не-DR SYS-типа могут очистить эти биты, но другие дисковые инструменты должны оставить биты 15-8 без изменений.

0x02A0x1F2Версия (определяется как 0.0). Старший байт номера версии хранится по смещению 0x02B , а младший байт — по смещению 0x02A . [4] Реализации FAT32 должны отказываться монтировать тома с неизвестными им номерами версий.
0x02C0x214Номер кластера начала корневого каталога, обычно 2 (первый кластер [33] ), если он не содержит плохих секторов. (Реализация FAT32 от Microsoft накладывает искусственное ограничение в 65 535 записей на каталог, в то время как многие сторонние реализации этого не делают.)

Значение кластера 0 официально не допускается и никогда не может указывать на допустимый начальный кластер корневого каталога. Некоторые нестандартные реализации FAT32 могут рассматривать его как индикатор для поиска корневого каталога фиксированного размера, где он ожидался бы на томах FAT16; см. смещение 0x011 .

0x0300x252Логический номер сектора информации файловой системы, обычно 1, т. е. второй из трех загрузочных секторов FAT32.

Некоторые реализации FAT32 поддерживают небольшое изменение спецификации Microsoft, делая сектор информации FS необязательным, указывая значение 0xFFFF [19] (или 0x0000 ) в этой записи. Поскольку логический сектор 0 никогда не может быть допустимым сектором информации FS, но секторы информации FS используют ту же сигнатуру, что и во многих загрузочных секторах [ требуется ссылка ] , реализации файловой системы никогда не должны пытаться использовать логический сектор 0 в качестве сектора информации FS и вместо этого предполагать, что эта функция не поддерживается на этом конкретном томе. Без сектора информации FS минимально допустимый размер логического сектора томов FAT32 может быть уменьшен до 128 байт для специальных целей.

0x0320x272Первый логический номер сектора копии трех загрузочных секторов FAT32, обычно 6. [4]

Поскольку тома, отформатированные в DR-DOS 7.0x FAT32, используют загрузочный сектор из одного сектора, некоторые тома, отформатированные в DR-DOS, используют здесь значение 2.

Значения 0x0000 [4] (и/или 0xFFFF [19] ) зарезервированы и указывают на отсутствие доступного резервного сектора.

0x0340x2912Зарезервировано (может быть изменено на байт-заполнитель формата 0xF6 [nb 7] как артефакт MS-DOS , должно быть инициализировано в 0 инструментами форматирования, но не должно быть изменено реализациями файловой системы или дисковыми инструментами в дальнейшем.)FDISK

Загрузочные секторы DR-DOS 7.07 FAT32 используют эти 12 байт для хранения имени файла " " IBMBIO␠␠COM[ nb 8] , который должен быть загружен (до первых 29 696 байт или фактического размера файла, в зависимости от того, что меньше) и выполнен загрузочным сектором, за которым следует завершающий символ NUL ( 0x00 ). Это также часть сообщения об ошибке, указывающая фактическое имя загрузочного файла и метод доступа (см. смещение 0x028 ).

0x0400x351См. 0x024 для FAT12/FAT16 (номер физического диска)

exFAT BPB расположены в секторе смещения от 0x040 до 0x077 , перекрывая все оставшиеся записи стандартного FAT32 EBPB, включая эту. Их можно обнаружить по сигнатуре метки OEM " " в секторе смещения 0x003 . В этом случае байты от 0x00B до 0x03F обычно устанавливаются в 0x00 .EXFAT␠␠␠

0x0410x361См. 0x025 для FAT12/FAT16 (Используется для различных целей; см. FAT12/FAT16)

Может содержать артефакты байта-заполнителя формата 0xF6 [nb 7] после разбиения на разделы с помощью MS-DOS FDISK, но еще не отформатирован.

0x0420x371См. 0x026 для FAT12/FAT16 (Расширенная загрузочная подпись, 0x29 )

Большинство реализаций файловой системы FAT32 не поддерживают альтернативную сигнатуру 0x28 [15] для обозначения сокращенной формы FAT32 EBPB, за которой следует только серийный номер (и без записей метки тома и типа файловой системы), но поскольку эти 19 в основном неиспользуемых байтов могут служить различным целям в некоторых сценариях, реализации должны принимать 0x28 в качестве альтернативной сигнатуры, а затем возвращаться к использованию метки тома каталога в файловой системе вместо EBPB для совместимости с потенциальными расширениями.

0x0430x384См. 0x027 для FAT12/FAT16 (идентификатор тома)
0x0470x3C11См. 0x02B для FAT12/FAT16 (метка тома)

Недоступно, если сигнатура по смещению 0x042 установлена ​​на 0x28 .

0x0520x478См. 0x036 для FAT12/FAT16 (тип файловой системы, дополненный пробелами ( 0x20 ), например, " ").FAT32␠␠␠

Недоступно, если сигнатура по адресу 0x042 установлена ​​на 0x28 .

Если обе записи общего числа логических секторов по смещению 0x020 и 0x013 равны 0 на томах, использующих FAT32 EBPB с сигнатурой 0x29 , тома с более чем 4 294 967 295 (2 32 -1) секторами (например, некоторые тома DR-DOS с 32-битными кластерными записями) могут использовать эту запись как запись общего числа логических секторов 64 бит вместо этого. В этом случае метка OEM по смещению сектора 0x003 может быть извлечена как новый тип файловой системы .

Исключения

Версии DOS до 3.2 полностью или частично полагались на байт дескриптора носителя в BPB или байт FAT ID в кластере 0 первой FAT для определения форматов дискет FAT12, даже если присутствует BPB. В зависимости от найденного FAT ID и обнаруженного типа привода они по умолчанию используют один из следующих прототипов BPB вместо использования значений, фактически сохраненных в BPB. [nb 1]

Первоначально FAT ID должен был быть битовым флагом со всеми установленными битами, за исключением очищенного бита 2 для указания формата 80 дорожек (вместо 40 дорожек), очищенного бита 1 для указания формата 9 секторов (вместо 8 секторов) и очищенного бита 0 для указания одностороннего формата (вместо двухстороннего) [7], но эта схема не была принята всеми OEM-производителями и устарела с появлением жестких дисков и форматов высокой плотности. Кроме того, различные 8-дюймовые форматы, поддерживаемые 86-DOS и MS-DOS, не соответствуют этой схеме.

FAT ID (сравните с идентификатором носителя по смещению BPB 0x0A ) [22] [23]0xFF0xFE0xФД0xFC0xФБ0xFA0xF90xF80xF00xED0xE5
Размер8"5,25"8"8"5,25"8"8"5,25"5,25"5,25" / 3,5"5,25" / 3,5"5,25"3,5"3,5"5,25"5,25" / 3,5"3,5"3,5"3,5"5,25"8"
Плотность?ДД 48т/дСДДДДД 48т/дСДСДДД 48т/дДД 48т/д??HD 96 точек на дюймДД 135т/дHD 135 точек на дюймQD 96tpi?ДДHD 135 точек на дюймЭДQD 96tpiСД
Модуляция?МФМФММФММФМФМФММФММФММФММФММФММФММФММФММФММФММФММФММФМФМ
Форматированная емкость (КБ)?320250 ("старый") [28] [32]1200160250 («новый») [28] [32]5003601806403201200720144072036036014402880720243 / 250
Цилиндры (CHS)774077774077774040808080808080808080808077
Физические сектора/дорожки
(смещение BPB 0x0D )
?8268826269988159189 (8 [31] )9918369 (8 [31] )26
Количество головок
(смещение BPB 0x0F )
?21 [28] [32]2 [7] [22] [32] (1)11 [7] [28] [32]2 [22]21212222112221
Полезная нагрузка байта/физический сектор?5121281024512128128512512512512512512512512512512512512512128
Байты / логический сектор
(смещение BPB 0x00 )
?5121281024512128128512512512512512512512512512512512512512128
Логические сектора/кластер
(смещение BPB 0x02 )
?2411442121 [22] (2? [7] )121?2?12?4
Зарезервированные логические сектора
(смещение BPB 0x03 )
?11 [28] [32]114 [28] [32]4111111 (2)111111?1
Количество FAT
(смещение BPB 0x05 )
?22222222222222222222
Записи корневого каталога
(смещение BPB 0x06 )
?112 (7 секторов)68 (17 секторов)192 (6 секторов)64 (4 сектора)68 (17 секторов)68 (17 секторов)112 (7 секторов)64 (4 сектора)112 (7 секторов)112 (7 секторов)224 (14 секторов)112 (7 секторов)224 (14 секторов)?112 (7 секторов)?224 (14 секторов)240 (15 секторов)?64 (16 секторов)
Всего логических секторов
(смещение BPB 0x08 )
?6402002 [28] [32]1232 [22] [32] (616 [7] )3202002 [7] [28] [32]4004 [22]7203601280640240014402880?720?28805760?2002
Логические сектора / FAT
(смещение BPB 0x0B )
?16 [28] [32]216 [28] [32]6? [22]2222 [22] (1? [7] )739 (7)?2?99?1
Скрытые сектора
(смещение BPB 0x11 )
?03 [22] (0 [7] )0000000000000000?0
Общее количество кластеров?3154971227313?997? [22]354351??23717132847????28472863??
Логический порядок секторов?????????????????????
Картографирование секторов?
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ трек+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ трек+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
?
сектор+ трек+
сектор+ трек+
сектор+ головка+ дорожка+
сектор+ головка+ дорожка+
?
сектор+ трек+
Первый физический сектор (CHS)?11111111??111?1?11?1
DRIVER.SYS /F:n?0340?300??127???79?3
Присутствие БПБ???????????ДаДаДа???ДаДа??
Поддерживать?
ДОС 1.1 [32]
ДОС 1.0 [28] [32]
ДОС 2.0
ДОС 1.0 [32]
? [28] [32]
ДОС 2.0
ДОС 2.0
ДОС 2.0
??
ДОС 3.0
ДОС 3.2
только DOS 3.2;
(DR-DOS)
Sanyo 55x
только DS-DOS 2.11
MS-DOS 3.1 [7]
MSX-DOS
ДОС 3.3
ДОС 5.0
только Тэнди 2000
Только DR-DOS

Microsoft рекомендует различать два 8-дюймовых формата для FAT ID 0xFE , пытаясь прочитать адресную метку одинарной плотности. Если это приводит к ошибке, носитель должен быть двойной плотности. [23]

В таблице не перечислен ряд несовместимых форматов 8-дюймовых и 5,25-дюймовых дискет FAT12, поддерживаемых 86-DOS , которые различаются либо размером записей каталога (16 байт против 32 байт), либо размером зарезервированной области секторов (несколько целых дорожек против одного логического сектора).

Реализация одностороннего формата FAT12 размером 315 КБ, используемого в MS-DOS для Apricot PC и F1e [34], имела другую структуру загрузочного сектора, чтобы соответствовать несовместимому с IBM BIOS этого компьютера. Инструкция перехода и имя OEM были опущены, а параметры MS-DOS BPB (смещения 0x00B - 0x017 в стандартном загрузочном секторе) были расположены по смещению 0x050 . Portable , F1, PC duo и Xi FD вместо этого поддерживали нестандартный двухсторонний формат FAT12 размером 720 КБ. [34] Различия в структуре загрузочного сектора и идентификаторах носителей сделали эти форматы несовместимыми со многими другими операционными системами. Параметры геометрии для этих форматов следующие:

  • 315 КБ: Байт на логический сектор: 512 байт, логических секторов на кластер: 1, зарезервированных логических секторов: 1, количество FAT: 2, записей корневого каталога: 128, всего логических секторов: 630, идентификатор FAT: 0xFC , логических секторов на FAT: 2, физических секторов на дорожку: 9, количество головок: 1. [34] [35]
  • 720 КБ: Байт на логический сектор: 512 байт, логических секторов на кластер: 2, зарезервированных логических секторов: 1, количество FAT: 2, записей корневого каталога: 176, всего логических секторов: 1440, идентификатор FAT: 0xFE , логических секторов на FAT: 3, физических секторов на дорожку: 9, количество головок: 2. [34]

Более поздние версии Apricot MS-DOS получили возможность читать и записывать диски со стандартным загрузочным сектором в дополнение к тем, что имели Apricot. Эти форматы также поддерживались DOS Plus 2.1e/g для серии Apricot ACT.

Адаптация DOS Plus для BBC Master 512 поддерживала два формата FAT12 на 80-дорожечных, двухсторонних, 5,25-дюймовых дисках с двойной плотностью, которые вообще не использовали обычные загрузочные секторы. Диски данных объемом 800 КБ не имели загрузочного сектора и начинались с одной копии FAT. [35] Первый байт перемещенного FAT в логическом секторе 0 использовался для определения емкости диска. Загрузочные диски объемом 640 КБ начинались с миниатюрной файловой системы ADFS , содержащей загрузчик, за которым следовал один FAT. [35] [36] Кроме того, формат объемом 640 КБ отличался использованием физических номеров секторов CHS, начинающихся с 0 (а не с 1, как обычно), и увеличением секторов в порядке сектор-дорожка-головка (а не сектор-головка-дорожка, как обычно). [36] FAT начиналась в начале следующей дорожки. Эти различия делают эти форматы нераспознаваемыми другими операционными системами. Параметры геометрии для этих форматов являются:

  • 800 КБ: Байт на логический сектор: 1024 байта, логических секторов на кластер: 1, зарезервированных логических секторов: 0, количество FAT: 1, записей корневого каталога: 192, всего логических секторов: 800, идентификатор FAT: 0xFD , логических секторов на FAT: 2, физических секторов на дорожку: 5, количество головок: 2. [35] [36]
  • 640 КБ: Байт на логический сектор: 256 байт, логических секторов на кластер: 8, зарезервированных логических секторов: 16, количество FAT: 1, записей корневого каталога: 112, всего логических секторов: 2560, идентификатор FAT: 0xFF , логических секторов на FAT: 2, физических секторов на дорожку: 16, количество головок: 2. [35] [36]

DOS Plus для Master 512 также могла получать доступ к стандартным дискам ПК, отформатированным до 180 КБ или 360 КБ , используя первый байт FAT в логическом секторе 1 для определения емкости.

DEC Rainbow 100 (все варианты) поддерживал один формат FAT12 на 80-дорожечных, односторонних, 5,25-дюймовых дисках с четверной плотностью. Первые две дорожки были зарезервированы для загрузчика, но не содержали MBR или BPB (вместо этого MS-DOS использовала статический BPB в памяти). Загрузочный сектор (дорожка 0, сторона 0, сектор 1) был кодом Z80, начинающимся с DI 0xF3 . Начальная загрузка 8088 была загружена Z80. Дорожка 1, сторона 0, сектор 2 начинается с байта идентификатора носителя/FAT 0xFA . Неотформатированные диски используют вместо этого 0xE5 . Файловая система начинается с дорожки 2, стороны 0, сектора 1. В корневом каталоге есть 2 копии FAT и 96 записей. Кроме того, существует физическое-логическое отображение дорожек для осуществления чередования секторов 2:1. Диски были отформатированы с физическими секторами в порядке нумерации от 1 до 10 на каждой дорожке после зарезервированных дорожек, но логические сектора от 1 до 10 хранились в физических секторах 1, 6, 2, 7, 3, 8, 4, 9, 5, 10. [37]

Информационный сектор ФС

«Информационный сектор FS» был введен в FAT32 [38] для ускорения времени доступа к некоторым операциям (в частности, получения объема свободного места). Он расположен в логическом секторе, номер которого указан в загрузочной записи FAT32 EBPB в позиции 0x030 (обычно логический сектор 1, сразу после самой загрузочной записи).

Смещение байтаДлина (байты)Содержание
0x0004Сигнатура сектора информации FS ( 0x52 0x52 0x61 0x41 = " ")RRaA

Пока сектор информации о файловой системе находится в логическом секторе 1, месте, где FAT обычно начинается в файловых системах FAT12 и FAT16 (только с одним зарезервированным сектором), наличие этой сигнатуры гарантирует, что ранние версии DOS никогда не попытаются смонтировать том FAT32, поскольку они ожидают, что значения в кластере 0 и кластере 1 будут соответствовать определенным битовым шаблонам, которым эта сигнатура не соответствует.

0x004480Зарезервировано (значения байтов должны быть установлены на 0x00 во время форматирования, но на них не следует полагаться и они никогда не должны изменяться в дальнейшем)
0x1E44Сигнатура сектора информации FS ( 0x72 0x72 0x41 0x61 = " ")rrAa
0x1E84Последнее известное число свободных кластеров данных на томе или 0xFFFFFFFF , если неизвестно. Должно быть установлено на 0xFFFFFFFF во время форматирования и обновлено операционной системой позже. Не следует абсолютно полагаться на правильность во всех сценариях. Перед использованием этого значения операционная система должна проверить его работоспособность, чтобы оно было меньше или равно количеству кластеров тома.
0x1EC4Номер последнего известного выделенного кластера данных. Должен быть установлен на 0xFFFFFFFF во время форматирования и обновлен операционной системой позже. С 0xFFFFFFFF система должна начать с кластера 0x00000002 . Не следует полностью полагаться на то, что он будет правильным во всех сценариях. Перед использованием этого значения операционная система должна проверить его на предмет допустимости номера кластера на томе.
0x1F012Зарезервировано (значения байтов должны быть установлены на 0x00 во время форматирования, но на них не следует полагаться и они никогда не должны изменяться в дальнейшем)
0x1FC4Сигнатура сектора информации FS ( 0x00 0x00 0x55 0xAA ) [4] [nb 2] (Все четыре байта должны совпасть, прежде чем содержимое этого сектора можно будет считать имеющим правильный формат.)

Данные сектора могут быть устаревшими и не отражать текущее содержимое носителя, поскольку не все операционные системы обновляют или используют этот сектор, и даже если они это делают, содержимое недействительно, если носитель был извлечен без надлежащего размонтирования тома или после сбоя питания. Поэтому операционные системы должны сначала проверить необязательные битовые флаги состояния выключения тома, находящиеся в записи FAT кластера 1 или FAT32 EBPB по смещению 0x041 , и игнорировать данные, хранящиеся в секторе информации FS, если эти битовые флаги указывают на то, что том не был надлежащим образом размонтирован ранее. Это не вызывает никаких проблем, кроме возможного снижения скорости для первого запроса свободного пространства или выделения кластера данных; см. фрагментация.

Если этот сектор присутствует на томе FAT32, минимально допустимый размер логического сектора составляет 512 байт, тогда как в противном случае он был бы 128 байт. Некоторые реализации FAT32 поддерживают небольшое изменение спецификации Microsoft, делая сектор информации FS необязательным, указывая значение 0xFFFF [19] (или 0x0000 ) в записи по смещению 0x030 .

FAT-регион

Таблица размещения файлов

Карта кластера

Область данных тома делится на кластеры одинакового размера — небольшие блоки непрерывного пространства. Размеры кластеров различаются в зависимости от типа используемой файловой системы FAT и размера диска; типичные размеры кластеров варьируются от 2 до 32 КБ . [39]

Каждый файл может занимать один или несколько кластеров в зависимости от его размера. Таким образом, файл представлен цепочкой кластеров (называемой односвязным списком ). Эти кластеры не обязательно хранятся рядом друг с другом на поверхности диска, а часто фрагментированы по всей области данных.

Каждая версия файловой системы FAT использует разный размер для записей FAT. Меньшие числа приводят к меньшему FAT, но тратят место в больших разделах, поскольку приходится выделять его в больших кластерах.

Файловая система FAT12 использует 12 бит на запись FAT, таким образом , две записи охватывают 3 байта. Это последовательно little-endian : если эти три байта рассматривать как одно little-endian 24-битное число, 12 младших значащих бит представляют первую запись (например, кластер 0), а 12 старших значащих бит — вторую (например, кластер 1). Другими словами, в то время как младшие восемь бит первого кластера в строке хранятся в первом байте, старшие четыре бита хранятся в младшем полубайте второго байта, тогда как младшие четыре бита последующего кластера в строке хранятся в старшем полубайте второго байта, а его старшие восемь бит — в третьем байте.

Пример начала таблицы FAT12 с несколькими цепочками кластеров
Компенсировать+0+1+2+3+4+5+6+7+8+9
+0000Ф0Ф ФФФ034000056000078000ФФА Ф0014
+0010С 0000DЭ000000111Ф0ФФ00Ф 0ФФ1560
+002001197 0ФФФ7А Ф01ФФ0 Ж00007 0ФФ000000
  • FAT ID / маркер порядка байтов (в зарезервированном кластере № 0), где 0xF0 указывает на том на неразмеченном супердискете (для размеченных дисков должен быть 0xF8)
  • Индикатор конца цепочки / флаги обслуживания (в зарезервированном кластере № 1)
  • Вторая цепочка (7 кластеров) для нефрагментированного файла (здесь: #2, #3, #4, #5, #6, #7, #8)
  • Третья цепочка (7 кластеров) для фрагментированного, возможно, разросшегося файла (здесь: #9, #A, #14, #15, #16, #19, #1A)
  • Четвертая цепочка (7 кластеров) для нефрагментированного, возможно усеченного файла (здесь: #B, #C, #D, #E, #F, #10, #11)
  • Пустые кластеры (здесь: #12, #1B, #1C, #1E, #1F)
  • Пятая цепочка (1 кластер) для подкаталога (здесь: #13)
  • Плохие кластеры (3 кластера) (здесь: #17, #18, #1D)

Файловая система FAT16 использует 16 бит на запись FAT, таким образом , одна запись охватывает два байта в порядке байтов от младшего к старшему:

Пример таблицы FAT16 с несколькими цепочками кластеров
Компенсировать+0+1+2+3+4+5+6+7+8+9
+0000Ф0ФФФФФФ030004000500060007000800
+0010ФФФФ001400000D0000001000
+00201100ФФФФ0000ФФФФ150016001900Ф7ФФ
+0030Ф7ФФ00ФФФФ00000000Ф7ФФ00000000

Файловая система FAT32 использует 32 бита на запись FAT, таким образом, одна запись охватывает четыре байта в порядке little-endian. Четыре верхних бита каждой записи зарезервированы для других целей; они очищаются во время форматирования и не должны изменяться в противном случае. Они должны быть замаскированы перед интерпретацией записи как 28-битного адреса кластера.

Пример таблицы FAT32, начинающейся с нескольких цепочек кластеров
Компенсировать+0+1+2+3+4+5+6+7+8+9
+0000Ф0ФФФФФФФФФФФФФФФФ04000000
+001005000000060000000700000008000000
+0020ФФФФФФ00000014000000000000
+00300D00000000000000000010000000
+004011000000ФФФФФФ00000000ФФФФФФ
+0050150000001600000019000000Ф7ФФФФ
+0060Ф7ФФФФ000000ФФФФФФ00000000
+007000000000Ф7ФФФФ0000000000000000
  • Первая цепочка (1 кластер) для корневого каталога, на который указывает запись в FAT32 BPB (здесь: #2)
  • Вторая цепочка (6 кластеров) для нефрагментированного файла (здесь: #3, #4, #5, #6, #7, #8)

Таблица размещения файлов ( FAT ) — это непрерывный ряд секторов, следующих сразу за областью зарезервированных секторов. Она представляет собой список записей, которые сопоставляются с каждым кластером на томе. Каждая запись записывает одну из четырех вещей:

  • номер следующего кластера в цепочке
  • специальная запись конца цепочки кластеров ( EOC ), которая указывает на конец цепочки
  • специальная запись для обозначения плохого кластера
  • ноль, чтобы отметить, что кластер не используется

Для самых ранних версий DOS, чтобы распознать файловую систему, система должна была быть загружена с тома, или FAT тома должна начинаться со второго сектора тома (логический сектор 1 с физическим адресом CHS 0/0/2 или адресом LBA 1), то есть сразу после загрузочного сектора. Операционные системы предполагают это жестко зашитое расположение FAT, чтобы найти идентификатор FAT в записи кластера 0 FAT на дискетах DOS 1.0-1.1 FAT, где не найдено допустимого BPB.

Специальные записи

Первые две записи в FAT хранят специальные значения:

Первая запись (кластер 0 в FAT) содержит идентификатор FAT со времен MS-DOS 1.20 и PC DOS 1.1 (допустимые значения 0xF0 - 0xFF с зарезервированными 0xF1 - 0xF7 ) в битах 7-0, который также копируется в BPB загрузочного сектора, смещение 0x015 со времен DOS 2.0. Оставшиеся 4 бита (если FAT12), 8 бит (если FAT16) или 20 бит (если FAT32, 4 бита MSB равны нулю) этой записи всегда равны 1. Эти значения были организованы таким образом, чтобы запись также функционировала как маркер конца цепочки "trap-all" для всех кластеров данных, содержащих нулевое значение. Кроме того, для идентификаторов FAT, отличных от 0xFF0x00 ), можно определить правильный порядок полубайтов и байтов, который будет использоваться драйвером файловой системы, однако официально файловая система FAT использует только представление с прямым порядком байтов , и нет известных реализаций вариантов, использующих значения с обратным порядком байтов . 86-DOS 0.42 вплоть до MS-DOS 1.14 использовали жестко заданные профили дисков вместо идентификатора FAT, но использовали этот байт для различения носителей, отформатированных с 32-байтовыми или 16-байтовыми записями каталогов, как это было до 86-DOS 0.42.

Вторая запись (кластер 1 в FAT) номинально хранит маркер конца цепочки кластеров, используемый форматером, но обычно всегда содержит 0xFFF / 0xFFFF / 0x0FFFFFFF , то есть, за исключением битов 31-28 на томах FAT32, эти биты обычно всегда установлены. Однако некоторые операционные системы Microsoft устанавливают эти биты, если том не является томом, содержащим работающую операционную систему (то есть, используйте здесь 0xFFFFFFFF вместо 0x0FFFFFFF ). [40] (В сочетании с альтернативными маркерами конца цепочки младшие биты 2-0 могут стать нулевыми для наименьшего разрешенного маркера конца цепочки 0xFF8 / 0xFFF8 / 0x?FFFFFF8 ; бит 3 также должен быть зарезервирован, учитывая, что кластеры 0xFF0 / 0xFFF0 / 0x?FFFFFF0 и выше официально зарезервированы. Некоторые операционные системы могут не иметь возможности монтировать некоторые тома, если какой-либо из этих битов не установлен, поэтому маркер конца цепочки по умолчанию не следует изменять.) Для DOS 1 и 2 запись была задокументирована как зарезервированная для будущего использования.

Начиная с DOS 7.1 два самых значимых бита этой записи кластера могут содержать два необязательных битовых флага, представляющих текущее состояние тома на FAT16 и FAT32, но не на томах FAT12. Эти битовые флаги поддерживаются не всеми операционными системами, но операционные системы, поддерживающие эту функцию, устанавливают эти биты при завершении работы и очищают самый значимый бит при запуске:
Если бит 15 (на FAT16) или бит 27 (на FAT32) [41] не установлен при монтировании тома, том не был должным образом размонтирован перед выключением или извлечением и, таким образом, находится в неизвестном и, возможно, «грязном» состоянии. [27] На томах FAT32 сектор информации FS может содержать устаревшие данные и, таким образом, не должен использоваться. Затем операционная система обычно запускает SCANDISK или CHKDSK при следующем запуске [nb 9] [41] (но не при вставке съемного носителя), чтобы обеспечить и, возможно, восстановить целостность тома.
Если бит 14 (в FAT16) или бит 26 (в FAT32) [41] очищен, операционная система обнаружила ошибки ввода-вывода диска при запуске, [41] что может быть признаком наличия поврежденных секторов. Операционные системы, знающие об этом расширении, будут интерпретировать это как рекомендацию выполнить сканирование поверхности ( SCANDISK ) при следующей загрузке. [27] [41] (Похожий набор битовых флагов существует в FAT12/FAT16 EBPB по смещению 0x1A или FAT32 EBPB по смещению 0x36 . В то время как запись кластера 1 может быть доступна драйверам файловой системы после того, как они смонтировали том, запись EBPB доступна, даже если том не смонтирован, и, таким образом, ее проще использовать драйверам блочных устройств диска или инструментам разбиения на разделы.)

Если количество FAT в BPB не установлено равным 2, вторая запись кластера в первой FAT (кластер 1) может также отражать статус тома TFAT для операционных систем, поддерживающих TFAT. Если запись кластера 1 в этой FAT содержит значение 0, это может означать, что вторая FAT представляет собой последнее известное допустимое состояние транзакции и должна быть скопирована поверх первой FAT, тогда как первая FAT должна быть скопирована поверх второй FAT, если установлены все биты.

Некоторые нестандартные реализации FAT12/FAT16 используют запись кластера 1 для хранения начального кластера корневого каталога переменного размера (обычно 2 [33] ). Это может произойти, когда количество записей корневого каталога в BPB имеет значение 0 и не найдено ни одного FAT32 EBPB (нет сигнатуры 0x29 или 0x28 по смещению 0x042 ). [20] Однако это расширение не поддерживается основными операционными системами, [20] поскольку оно конфликтует с другими возможными использованиями записи кластера 1. Большинство конфликтов можно исключить, если это расширение разрешено только для FAT12 с кластерами менее 0xFEF и томов FAT16 с кластерами менее 0x3FEF и 2 FAT.

Поскольку эти первые две записи FAT хранят специальные значения, кластеров данных 0 или 1 нет. Первый кластер данных (после корневого каталога, если FAT12/FAT16) — это кластер 2, [33] отмечающий начало области данных.

Кластерные значения

Значения ввода FAT:

FAT12FAT16FAT32Описание
0x0000x00000x?0000000Free Cluster; также используется DOS для обозначения родительского каталога, начального кластера в записях ".." подкаталогов корневого каталога на томах FAT12/FAT16. [42] [6]

В противном случае, если это значение встречается в цепочках кластеров (например, в записях каталогов нулевой длины или удаленных файлах), реализации файловой системы должны рассматривать это как маркер конца цепочки. [7]

0x0010x00010x?0000001Зарезервировано для внутренних целей; MS-DOS/PC DOS используют это значение кластера как временный индикатор несвободного кластера при построении цепочек кластеров во время выделения файлов (видно на диске только в случае сбоя или отключения питания в середине этого процесса). [42] [6]

Если это значение встречается в цепочках кластеров на диске, реализации файловой системы должны рассматривать его как маркер конца цепочки.

0x002 - 0xФЕФ0x0002 - 0xFFEF (0x0002 - 0x7FFF)0x?0000002 - 0x?FFFFFEFИспользуется как кластеры данных; значение указывает на следующий кластер. MS-DOS/PC DOS принимает значения до 0xFEF / 0xFFEF / 0x0FFFFFEF (иногда больше; см. ниже), тогда как для Atari GEMDOS на томах FAT16 допускаются только значения до 0x7FFF .
0xFF0 [число 10]  - 0xFF5 (0xFF1 - 0xFF5)0xFFF0 - 0xFFF50x?FFFFFF0 - 0x?FFFFFF5Зарезервировано в некоторых контекстах [43] или также используется [24] [25] [26] [4] [44] как кластеры данных в некоторых нестандартных системах. Размеры томов, которые будут использовать эти значения как кластеры данных, следует избегать, но если эти значения встречаются в существующих томах, файловая система должна обрабатывать их как обычные кластеры данных в цепочках кластеров (в идеале применяя дополнительные проверки работоспособности), подобно тому, что делают MS-DOS, PC DOS и DR-DOS [6] и следует избегать выделения их для файлов в противном случае.

MS-DOS/PC DOS 3.3 и выше обрабатывает значение 0xFF0 [nb 10] [6] на томах FAT12 (но не на FAT16 или FAT32) как дополнительный маркер конца цепочки, аналогичный 0xFF8 - 0xFFF . [6] Для совместимости с MS-DOS/PC DOS файловые системы должны избегать использования кластера данных 0xFF0 в цепочках кластеров на томах FAT12 (то есть обрабатывать его как зарезервированный кластер, аналогичный 0xFF7 ). (Примечание. Соответствие младшего байта номера кластера значениям идентификатора FAT и дескриптора носителя является причиной того, что эти значения кластера зарезервированы.)

0xFF60xFFF60x?FFFFFF6Зарезервировано; не использовать. [24] [25] [26] [4] [21] [44] (Примечание. Соответствует значению заполнителя формата по умолчанию 0xF6 на IBM-совместимых компьютерах.) Не следует создавать тома, которые будут использовать это значение в качестве кластера данных, но если это значение встречается в существующих томах, файловая система должна рассматривать его как обычный кластер данных в цепочках кластеров (в идеале применяя дополнительные проверки работоспособности) и должна избегать выделения его для файлов в противном случае. [7]
0xFF70xFFF70x?FFFFFF7Плохой сектор в кластере или зарезервированный кластер (начиная с DOS 2.0).

Значения cutover для максимального количества кластеров для файловых систем FAT12 и FAT16 определяются таким образом, что максимально возможные значения кластера данных ( 0xFF5 и 0xFFF5 , [6] соответственно) всегда будут меньше этого значения. [6] Следовательно, это значение обычно не может встречаться в цепочках кластеров, но если оно встречается, его можно рассматривать как обычный кластер данных, поскольку 0xFF7 мог быть нестандартным кластером данных на томах FAT12 до введения маркера плохого кластера в DOS 2.0 или введения FAT16 в DOS 3.0, [7] а 0xFFF7 мог быть нестандартным кластером данных на томах FAT16 до введения FAT32 в DOS 7.10. Теоретически, 0x0FFFFFF7 может быть частью допустимой цепочки кластеров на томах FAT32, но дисковые утилиты должны избегать создания томов FAT32, где это состояние может возникнуть. Файловая система должна избегать выделения этого кластера для файлов. [7]

Дисковые утилиты не должны пытаться восстановить «потерянные кластеры», содержащие это значение в FAT, а должны считать их плохими кластерами.

0xFF8 - 0xFFF (и опционально 0xFF0; [примечание 10] см. примечание)0xFFF8 - 0xFFFF0x?FFFFFF8 - 0x?FFFFFFFFПоследний кластер в файле (EOC). Реализации файловых систем должны обрабатывать все эти значения как маркер конца цепочки одновременно. [7] Большинство реализаций файловых систем (включая 86-DOS, MS-DOS, PC DOS и DR-DOS) используют 0xFFF [7] / 0xFFFF [7] / 0x0FFFFFFF в качестве маркера конца файла при выделении файлов, но версии Linux до 2.5.40 использовали 0xFF8 / 0xFFF8 / 0x0FFFFFF8 . [45] Версии mkdosfs (dosfstools до 3.0.26) продолжают использовать 0x0FFFFFF8 для корневого каталога на томах FAT32, тогда как некоторые инструменты восстановления и дефрагментации дисков используют другие значения в наборе (например, SCANDISK может использовать вместо этого 0xFF8 / 0xFFF8 / 0x0FFFFFF8 ). В то время как в оригинальной 8-битной реализации FAT в Standalone Disk BASIC от Microsoft использовались различные конечные маркеры ( 0xC0 .. 0xCD ) для указания количества секторов (от 0 до 13), использованных в последнем кластере, занятом файлом, в DOS различные конечные маркеры были перепрофилированы для указания различных типов носителей [7] с текущим используемым конечным маркером, указанным в записи кластера 1, однако эта концепция, по-видимому, не получила широкого распространения на практике — и в той степени, в которой в некоторых сценариях тома могут не распознаваться некоторыми операционными системами, если некоторые из младших битов значения, хранящегося в кластере 1, не установлены. Кроме того, некоторые неисправные реализации файловой системы принимают только 0xFFF / 0xFFFF / 0x?FFFFFFF в качестве допустимого маркера конца цепочки.

Реализации файловых систем должны проверять значения кластеров в цепочках кластеров относительно максимально допустимого значения кластера, рассчитанного по фактическому размеру тома, и обрабатывать более высокие значения так, как если бы они также были маркерами конца цепочки. (Низший байт номера кластера концептуально соответствует идентификатору FAT и значениям дескриптора носителя; [7] см. примечание выше для специального использования MS-DOS/PC DOS 0xFF0 [nb 10] на томах FAT12. [6] )

FAT32 использует 28 бит для номеров кластеров. Оставшиеся 4 бита в 32-битной записи FAT обычно равны нулю, но зарезервированы и должны оставаться нетронутыми. Стандартный совместимый драйвер файловой системы FAT32 или инструмент обслуживания не должен полагаться на то, что верхние 4 бита равны нулю, и он должен отбросить их перед оценкой номера кластера, чтобы справиться с возможными будущими расширениями, где эти биты могут использоваться для других целей. Они не должны очищаться драйвером файловой системы при выделении новых кластеров, но должны очищаться во время переформатирования.

Область корневого каталога

Таблица корневого каталога в файловых системах FAT12 и FAT16 занимает специальное местоположение области корневого каталога .

Регион данных

За исключением таблицы корневого каталога в файловых системах FAT12 и FAT16, которая занимает специальное местоположение Root Directory Region , все таблицы каталогов хранятся в регионе данных. Фактическое количество записей в каталоге, хранящемся в регионе данных, может увеличиваться путем добавления еще одного кластера в цепочку в FAT.

Таблица каталогов

Таблица каталогов — это особый тип файла, представляющий каталог (также известный как папка). Начиная с 86-DOS 0.42 [ 46] каждый файл или (начиная с MS-DOS 1.40 и PC DOS 2.0) подкаталог, хранящийся в нем, представлен 32-байтовой записью в таблице. Каждая запись записывает имя, расширение, атрибуты ( архив , каталог, скрытый, только для чтения, системный и том), адрес первого кластера данных файла/каталога, размер файла/каталога и дату [46] и (начиная с PC DOS 1.1) также время последнего изменения. Более ранние версии 86-DOS использовали только 16-байтовые записи каталогов, не поддерживая файлы размером более 16 МБ и не поддерживая время последнего изменения. [46]

Сама файловая система FAT не накладывает никаких ограничений на глубину дерева подкаталогов, пока есть свободные кластеры, доступные для размещения подкаталогов, однако внутренняя структура текущего каталога (CDS) в MS-DOS/PC DOS ограничивает абсолютный путь к каталогу 66 символами (включая букву диска, но исключая разделитель байтов NUL), [24] [25] [26] тем самым ограничивая максимальную поддерживаемую глубину подкаталогов 32, что бы ни произошло раньше. Concurrent DOS, Multiuser DOS и DR DOS 3.31 по 6.0 (до включения обновлений 1992-11) не хранят абсолютные пути к рабочим каталогам внутри себя и, следовательно, не показывают это ограничение. [47] То же самое относится к Atari GEMDOS, но Atari Desktop не поддерживает более 8 уровней подкаталогов. Большинство приложений, знающих об этом расширении, поддерживают пути длиной не менее 127 байт. FlexOS, 4680 OS и 4690 OS также поддерживают длину до 127 байт, что позволяет использовать глубину до 60 уровней. [48] PalmDOS, DR DOS 6.0 (начиная с BDOS 7.1) и выше, Novell DOS и OpenDOS поддерживают совместимый с MS-DOS CDS и, следовательно, имеют те же ограничения по длине, что и MS-DOS/PC DOS.

Каждой записи могут предшествовать «поддельные записи» для поддержки длинного имени файла VFAT (LFN); см. подробнее ниже.

Допустимые символы для коротких имен файлов DOS включают в себя следующие:

  • Заглавные буквы AZ
  • Числа 09
  • Пробел (хотя конечные пробелы в базовом имени или расширении считаются заполнением, а не частью имени файла; кроме того, имена файлов с пробелами в них не могли легко использоваться в командной строке DOS до Windows 95 из-за отсутствия подходящей системы экранирования ). Другим исключением являются внутренние команды MKDIR/ MDи RMDIR/ RDв DR-DOS, которые принимают одиночные аргументы и, следовательно, позволяют вводить пробелы.
  • ! # $ % & ' ( ) - @ ^ _ ` { } ~
  • Персонажи 128–228
  • Персонажи 230–255

Это исключает следующие символы ASCII :

  • " * / : < > ? \ |
    В Windows/MS-DOS нет символа escape- оболочки
  • + , . ; = [ ]
    Разрешено только в длинных именах файлов.
  • Строчные буквы az
    Сохраняются как AZ; разрешены в длинных именах файлов
  • Управляющие символы 0–31
  • Символ 127 (DEL)

Символ 229 ( 0xE5 ) не допускался в качестве первого символа в имени файла в DOS 1 и 2 из-за его использования в качестве свободного маркера записи. Был добавлен специальный случай, чтобы обойти это ограничение в DOS 3.0 и выше.

В GEMDOS от Atari разрешены следующие дополнительные символы, но их следует избегать для совместимости с MS-DOS/PC DOS:

  • " + , ; < = > [ ] |

Точку с запятой ( ;) следует избегать в именах файлов в DR DOS 3.31 и выше, PalmDOS, Novell DOS, OpenDOS, Concurrent DOS, Multiuser DOS, System Manager и REAL/32, поскольку она может конфликтовать с синтаксисом указания паролей файлов и каталогов: " ...\DIRSPEC.EXT;DIRPWD\FILESPEC.EXT;FILEPWD". Операционная система удалит одну [47] (а также две — начиная с DR-DOS 7.02) точки с запятой и ожидающие пароли из имен файлов перед сохранением их на диске. (Командный процессор 4DOS использует точки с запятой для списков включения и требует удвоения точки с запятой для защищенных паролем файлов с любыми командами, поддерживающими подстановочные знаки. [47] )

Символ «at» ( @) используется для списков файлов многими командами DR-DOS, PalmDOS, Novell DOS, OpenDOS и Multiuser DOS, System Manager и REAL/32, а также 4DOS, и поэтому иногда его может быть сложно использовать в именах файлов. [47]

В многопользовательских DOS и REAL/32 восклицательный знак (!) не является допустимым символом имени файла, поскольку он используется для разделения нескольких команд в одной командной строке. [47]

В ОС IBM 4680 и 4690 в именах файлов не допускаются следующие символы:

  • ? * : . ; , [ ] ! + = < > " - / \ |

Кроме того, следующие специальные символы не допускаются в первом, четвертом, пятом и восьмом символах имени файла, поскольку они конфликтуют с именами файлов сборки командного процессора хоста (HCP) и таблицы входной последовательности:

  • @ # ( ) { } $ &

Имена файлов DOS находятся в текущем наборе символов OEM : это может иметь неожиданные последствия, если символы, обрабатываемые одним способом для данной кодовой страницы, интерпретируются по-разному для другой кодовой страницы (команда DOS CHCP) с точки зрения нижнего и верхнего регистра, сортировки или допустимости в качестве символа имени файла.

Запись в справочнике

До того, как Microsoft добавила поддержку длинных имен файлов и временных меток создания/доступа, байты 0x0C0x15 записи каталога использовались другими операционными системами для хранения дополнительных метаданных, в частности, операционные системы семейства Digital Research хранили там пароли файлов, права доступа, идентификаторы владельцев и данные об удалении файлов. Хотя новые расширения Microsoft по умолчанию не полностью совместимы с этими расширениями, большинство из них могут сосуществовать в сторонних реализациях FAT (по крайней мере, на томах FAT12 и FAT16).

32-байтовые записи каталогов, как в области корневого каталога, так и в подкаталогах, имеют следующий формат (см. также 8.3 имя_файла ):

Смещение байтаДлина (байты)Содержание
0x008Короткое имя файла (дополненное пробелами)

Первый байт может иметь следующие специальные значения:

ЦенитьОписание
0x00Доступна запись, и последующая запись не используется. Также служит маркером конца, когда DOS сканирует таблицу каталогов. (Начиная с MS-DOS 1.25 и PC DOS 2.0, но не в более ранних версиях MS-DOS, PC DOS или 86-DOS. Вместо этого они будут рассматривать такие записи как выделенные. Поэтому это значение не должно использоваться в качестве маркера конца, если том должен оставаться доступным также в PC DOS 1.0/1.1. [nb 11] [49] [50] [51] )
0x05Начальный символ на самом деле 0xE5 . (начиная с DOS 3.0)

В DR DOS 6.0 и выше, включая PalmDOS, Novell DOS и OpenDOS, 0x05 также используется для файлов, ожидающих удаления в DELWATCH. После того, как они удаляются из очереди отслеживания удаления, первый символ стертого файла заменяется на 0xE5 .

0x2EВвод «точки»; либо « .», либо « ..» (начиная с MS-DOS 1.40 и PC DOS 2.0)
0xE5Запись была ранее стерта и/или доступна. [nb 11] [49] [50] [51] Утилиты восстановления файлов должны заменить этот символ обычным символом в рамках процесса восстановления. См. также: 0x05 .

Значение 0xE5 было выбрано для этой цели в 86-DOS, поскольку 8-дюймовые дискеты CP/M поставлялись предварительно отформатированными с этим значением и поэтому могли использоваться для хранения файлов сразу после распаковки. [42] [nb 12]

Версии DOS до 5.0 начинают сканирование таблиц каталогов сверху вниз. Чтобы увеличить шансы на успешное восстановление файлов, DOS 5.0 и выше будут запоминать позицию последней записанной записи каталога и использовать ее в качестве отправной точки для сканирования таблиц каталогов.

0x083Короткое расширение файла (дополненное пробелами)
0x0B1Атрибуты файла
КусочекМаскаОписание
00x01Только чтение. (Начиная с DOS 2.0) Если этот бит установлен, операционная система не позволит открыть файл для изменения.

Намеренная установка этого бита для файлов, в которые не будет производиться запись (исполняемые файлы, общие библиотеки и файлы данных), может помочь избежать проблем с одновременным доступом к файлам в многозадачных, многопользовательских или сетевых средах с приложениями, которые не предназначены специально для работы в таких средах (т. е. программы без поддержки SHARE).

Стандарт файловой системы цифровых камер DCF использует атрибут «Только чтение», позволяющий помечать каталоги или отдельные файлы ( объекты DCF ) как «защищенные» от удаления пользователем. [52]

10x02Скрытый. Скрывает файлы или каталоги из обычного просмотра каталогов.

В DR DOS 3.31 и выше, в PalmDOS, Novell DOS, OpenDOS, Concurrent DOS, Multiuser DOS, REAL/32, файлы и каталоги, защищенные паролем, также имеют установленный атрибут hidden. [47] Операционные системы с поддержкой пароля не должны скрывать файлы, защищенные паролем, из представлений каталогов, даже если этот бит может быть установлен. Механизм защиты паролем не зависит от установленного атрибута hidden, включая DR-DOS 7.03, но если атрибут hidden установлен, он не должен очищаться для любых файлов, защищенных паролем.

20x04Система. Указывает, что файл принадлежит системе и не должен быть физически перемещен (например, во время дефрагментации), поскольку на файл могут быть ссылки с использованием абсолютной адресации в обход файловой системы (загрузчики, образы ядра, файлы подкачки, расширенные атрибуты и т. д.).
30x08Метка тома. (Начиная с MS-DOS 1.28 и PC DOS 2.0) Указывает необязательную метку тома каталога, обычно находящуюся только в корневом каталоге тома. В идеале метка тома должна быть первой записью в каталоге (после зарезервированных записей), чтобы избежать проблем с VFAT LFN. Если эта метка тома отсутствует, некоторые системы могут откатиться назад и отобразить метку тома раздела вместо этого, если в загрузочном секторе присутствует EBPB (отсутствует в некоторых драйверах блочных устройств без загрузки и, возможно, не может быть записан с защитой от записи загрузочного сектора). Даже если эта метка тома присутствует, инструменты разбиения на разделы, такие как FDISK, могут отобразить вместо нее метку тома раздела. Запись занимает запись каталога, но не имеет связанного с ней файла. Метки томов имеют запись filesize, равную нулю.

Ожидающие удаления файлы и каталоги в DELWATCH имеют установленный атрибут тома до тех пор, пока они не будут очищены или восстановлены. [47]

40x10Подкаталог. (Начиная с MS-DOS 1.40 и PC DOS 2.0) Указывает, что кластерная цепочка, связанная с этой записью, интерпретируется как подкаталог, а не как файл. Подкаталоги имеют запись filesize, равную нулю.
50x20Архив . (Начиная с DOS 2.0) Обычно устанавливается операционной системой сразу после создания или изменения файла, чтобы пометить файл как «грязный», и сбрасывается программой резервного копирования после создания резервной копии файла, чтобы указать его «чистое» состояние.
60x40Устройство (внутренне задано для имен символьных устройств, найденных в спецификациях файлов, но никогда не найденных на диске) не должно изменяться дисковыми инструментами.
70x80Зарезервировано, не должно изменяться дисковыми инструментами.

В DR DOS 6.0 и выше, включая PalmDOS, Novell DOS и OpenDOS, атрибут тома устанавливается для ожидающих удаления файлов и каталогов в DELWATCH.

Сочетание атрибутов 0x0F используется для обозначения длинного имени файла VFAT, начиная с MS-DOS 7.0. Более старые версии DOS могут ошибочно принять это за метку тома каталога, поскольку они берут первую запись с атрибутом тома, установленным как метка тома. Эту проблему можно избежать, если метка тома каталога принудительно применяется как часть процесса форматирования; по этой причине некоторые дисковые инструменты явно записывают фиктивные метки тома каталога " ", когда пользователь не указывает метку тома. [nb 13] Поскольку метки томов обычно не имеют установленного системного атрибута в то же время, можно различать метки томов и записи VFAT LFN. Комбинация атрибутов 0x0F иногда может также встречаться как часть допустимого файла, ожидающего удаления в DELWATCH, однако на томах FAT12 и FAT16 записи VFAT LFN всегда имеют значение кластера в 0x1A, установленное на 0x0000 , а запись длины в 0x1C никогда не бывает 0x00000000 , тогда как запись в 0x1A всегда ненулевая для файлов, ожидающих удаления в DELWATCH. Эта проверка не работает на томах FAT32.NO␠NAME␠␠␠␠

0x0C1
  • CP/M-86 и DOS Plus хранят здесь атрибуты пользователя F1'—F4'. [53] (DOS Plus 1.2 с BDOS 4.1 поддерживает пароли только на носителях CP/M, но не на носителях FAT12 или FAT16. [54] Хотя DOS Plus 2.1 поддерживал логические секторные FAT с типом раздела 0xF2 , тома FAT16B и FAT32 не поддерживались этими операционными системами. Даже если раздел был бы преобразован в FAT16B, он все равно не был бы больше 32 МБ. Следовательно, это использование не конфликтует с FAT32.IFS, FAT16+ или FAT32+, поскольку они никогда не могут встречаться на томе того же типа.):
КусочекМаскаОписание
70x80F1': Изменить правила открытия по умолчанию [47]
60x40F2': Частичное закрытие по умолчанию [47]
50x20F3': Игнорировать ошибку контрольной суммы закрытия [47]
40x10F4': Отключить контрольные суммы [47]
30x08Сдержанный
20x04Для удаления требуется пароль
10x02Для записи требуется пароль
00x01Для чтения требуется пароль
  • MSX-DOS  2: Для удаленного файла — исходный первый символ имени файла. Для той же функции в других операционных системах см. смещение 0x0D , если оно включено в загрузочных секторах MSX по смещению сектора 0x026 . MSX-DOS поддерживала только тома FAT12, но существуют сторонние расширения для томов FAT16. Поэтому такое использование не конфликтует с FAT32.IFS и FAT32+ ниже. Оно также не конфликтует с использованием атрибутов пользователя в CP/M-86 и DOS Plus, поскольку они больше не важны для удаленных файлов.
  • Windows NT и более поздние версии используют биты 3 и 4 для кодирования информации о регистре (см. VFAT); в противном случае 0. [55]
  • DR-DOS 7.0x зарезервировала биты, отличные от 3 и 4, для внутренних целей с 1997 года. Значение должно быть установлено на 0 с помощью инструментов форматирования и не должно изменяться с помощью дисковых инструментов. [47]
  • На томах FAT32 под OS/2 и eComStation сторонний драйвер FAT32.IFS использует эту запись как байт метки для указания наличия дополнительных ␠EA.␠SFфайлов " ", содержащих расширенные атрибуты с параметром /EAS. Версии с 0.70 по 0.96 использовали магические значения 0x00 (без EA), 0xEA (обычные EA) и 0xEC (критические EA), [56] тогда как версия 0.97 и выше с 2003-09 используют 0x00 , 0x40 (обычные EA) и 0x80 (критические EA) в качестве битовых флагов для совместимости с Windows NT. [57] [58]
0x0D1
  • Первый символ удаленного файла в Novell DOS, OpenDOS и DR-DOS 7.02 и выше. Значение 0xE5 (229), установленное DELPURGE, запретит восстановление с помощью UNDELETE, значение 0x00 разрешит обычное восстановление, запрашивая у пользователя отсутствующий первый символ имени файла. [47] S/DOS 1 и PTS-DOS 6.51 и выше также поддерживают эту функцию, если она включена в CONFIG.SYS. Для той же функции в MSX-DOS см. смещение 0x0C .SAVENAME=ON
  • Время создания, точное разрешение: единицы измерения 10 мс, значения от 0 до 199 (начиная с DOS 7.0 с VFAT).

Двойное использование времени создания мс и символа файла не создает конфликта, поскольку время создания больше не имеет значения для удаленных файлов.

0x0E2
  • В DR DOS 3.31 и выше, включая PalmDOS, Novell DOS и OpenDOS [53] , а также в Concurrent DOS, Multiuser DOS, System Manager и REAL/32 и, возможно, также в FlexOS, 4680 OS, 4690 OS любое ненулевое значение указывает на хэш пароля защищенного файла, каталога или метки тома. [47] Хэш вычисляется из первых восьми символов пароля. Если для выполнения файловой операции требуется пароль в соответствии с битовой картой прав доступа, хранящейся по смещению 0x14 , система пытается сопоставить хэш с хэш-кодом текущего установленного глобального пароля (по ) или, если это не удается, пытается извлечь пароль с добавленной точкой с запятой из спецификации файла, переданной операционной системе, и проверяет его с хэш-кодом, хранящимся здесь. Установленный пароль будет сохранен, даже если файл будет удален и позже восстановлен. [47]PASSWORD /G
  • Создать время (начиная с DOS 7.0 с VFAT). Час, минута и секунда кодируются в соответствии со следующей битовой картой:

БитыОписание
15-11Часы (0–23)
10-5Минуты (0–59)
4-0Секунды/2 (0–29)
Секунды записываются только с разрешением 2 секунды. Более точное разрешение для создания файла находится по смещению 0x0D .

Если здесь биты 15-11 > 23 или биты 10-5 > 59 или биты 4-0 > 29, или когда биты 12-0 по смещению 0x14 содержат битовую карту доступа и это не том FAT32 или том, использующий расширенные атрибуты OS/2, то эта запись фактически содержит хэш пароля, в противном случае можно предположить, что это время создания файла.

0x102
  • FlexOS , 4680 OS и 4690 OS хранят размер записи в слове при входе 0x10 . [53] Это в основном используется для их специальных типов файлов, подобных базам данных: случайный файл , прямой файл , ключевой файл и последовательный файл . Если размер записи установлен на 0 (по умолчанию) или 1, операционные системы предполагают гранулярность записи в 1 байт для файла, для которого она не будет выполнять проверки границ записи в операциях чтения/записи. [59]
  • С DELWATCH 2.00 и выше под Novell DOS 7, OpenDOS 7.01 и DR-DOS 7.02 и выше эта запись используется для хранения отметки времени последнего изменения для ожидающих удаления файлов и каталогов. [47] [53] Очищается, когда файл восстанавливается или очищается. Описание формата см. в смещении 0x0E .
  • Дата создания (начиная с DOS 7.0 с VFAT). Год, месяц и день кодируются в соответствии со следующей битовой картой:

БитыОписание
15-9Год (0 = 1980 , 119 = 2099 поддерживается в DOS/Windows, теоретически до 127 = 2107 )
8-5Месяц (1–12)
4-0День (1–31)

Использование даты создания для существующих файлов не конфликтует с последним временем изменения для удаленных файлов, поскольку они никогда не используются одновременно. По той же причине использование размера записи существующих файлов и последнего времени изменения удаленных файлов не конфликтует. Даты создания и размеры записи не могут использоваться одновременно, однако оба они сохраняются только при создании файла и никогда не изменяются впоследствии, тем самым ограничивая конфликт системами FlexOS, 4680 OS и 4690 OS, получающими доступ к файлам, созданным в сторонних операционных системах, а также потенциальными проблемами отображения или сортировки файлов в системах, пытающихся интерпретировать размер записи как время создания. Чтобы избежать конфликта, хранение дат создания должно быть дополнительной функцией операционных систем, поддерживающих его.

0x122
  • FlexOS, 4680 OS, 4690 OS, Multiuser DOS, System Manager, REAL/32 и DR DOS 6.0 и выше с включенной многопользовательской безопасностью используют это поле для хранения идентификаторов владельцев. [47] Смещение 0x12 содержит идентификатор пользователя, 0x13 — идентификатор группы создателя файла. [53]
В многопользовательских версиях для доступа к системе требуется вход в систему с именем учетной записи и паролем, а система назначает групповые и пользовательские идентификаторы запущенным приложениям в соответствии с ранее настроенной и сохраненной информацией об авторизации и правилами наследования. Для ОС 4680 и ОС 4690 групповой идентификатор 1 зарезервирован для системы, групповой идентификатор 2 — для поставщика, групповой идентификатор 3 — для группы пользователей по умолчанию. Фоновые приложения, запускаемые пользователями, имеют групповой идентификатор 2 и пользовательский идентификатор 1, тогда как фоновые задачи операционной системы имеют групповые идентификаторы 1 или 0 и пользовательские идентификаторы 1 или 0. IBM 4680 BASIC и приложения, запущенные как первичные или вторичные, всегда получают групповой идентификатор 2 и пользовательский идентификатор 1. Когда приложения создают файлы, система будет хранить их пользовательский идентификатор и групповой идентификатор, а также требуемые разрешения вместе с файлом. [59]
  • С DELWATCH 2.00 и выше под Novell DOS 7, OpenDOS 7.01 и DR-DOS 7.02 и выше эта запись используется для хранения отметки даты последнего изменения для ожидающих удаления файлов и каталогов. [47] [53] Очищается, когда файл восстанавливается или очищается. Описание формата см. в смещении 0x10 .
  • Дата последнего доступа (начиная с DOS 7.0, если ACCDATE включен в CONFIG.SYS для соответствующего диска); [2] [47] см. смещение 0x10 для описания формата.

Использование идентификаторов владельцев существующих файлов не конфликтует с отметкой даты последнего изменения для удаленных файлов, поскольку они никогда не используются одновременно. [47] Использование отметки даты последнего изменения для удаленных файлов не конфликтует с датой доступа, поскольку даты доступа больше не важны для удаленных файлов. Однако идентификаторы владельцев и даты доступа не могут использоваться одновременно.

0x142
  • Старшие два байта номера первого кластера в FAT32; младшие два байта хранятся по смещению 0x1A .
  • Битовая карта прав доступа для защиты чтения/записи/выполнения/удаления для всех пользователей/группы/владельца для защищенных паролем файлов, каталогов (или меток томов) в DR DOS 3.31 и выше, включая PalmDOS, Novell DOS и OpenDOS, [53] и в FlexOS, [53] 4680 OS, 4690 OS, Concurrent DOS, Multiuser DOS, System Manager и REAL/32.
Типичные значения, хранящиеся в однопользовательской системе, это 0x0000 ( для всех прав доступа "RWED"), 0x0111 ( для прав доступа "RW?-"), 0x0555 ( для прав доступа "R-?-") и 0x0DDD ( для файлов или каталогов для прав доступа "--?-"). [47] Биты 1, 5, 9, 12-15 будут сохранены при изменении прав доступа. Если биты выполнения установлены в системах, отличных от FlexOS, 4680 OS или 4690 OS, они будут обрабатываться аналогично битам чтения. (Некоторые версии PASSWORD также позволяют устанавливать пароли на метки томов ( ).)PASSWORD /NPASSWORD /DPASSWORD /WPASSWORD /RPASSWORD /PPASSWORD /V
Однопользовательские системы вычисляют самые ограничивающие права из трех наборов (DR DOS до 5.0 использовала только биты 0-3) и проверяют, требует ли какой-либо из запрошенных типов доступа к файлу разрешения и сохранен ли пароль файла. [47] Если нет, то предоставляется доступ к файлу. В противном случае сохраненный пароль проверяется на соответствие необязательному глобальному паролю, предоставленному операционной системой, и необязательному паролю файла, предоставленному как часть имени файла, разделенному точкой с запятой (не в FlexOS, 4680 OS, 4690 OS). Если ни один из них не предоставлен, запрос не будет выполнен. Если один из них совпадает, система предоставит доступ (в пределах обычных атрибутов файла, то есть файл, доступный только для чтения, все еще не может быть открыт для записи таким образом), в противном случае запрос будет отклонен. [47]
В FlexOS, 4680 OS и 4690 OS система назначает приложениям идентификаторы групп и пользователей при запуске. Когда они запрашивают доступ к файлу, их идентификаторы групп и пользователей сравниваются с идентификаторами групп и пользователей открываемого файла. Если оба идентификатора совпадают, приложение будет считаться владельцем файла. Если совпадает только идентификатор группы, операционная система предоставит приложению групповой доступ, а если идентификатор группы не совпадает, она предоставит доступ всем. Если идентификатор группы и идентификатор пользователя приложения оба равны 0, операционная система обойдет проверку безопасности. После определения класса разрешений операционная система проверит, требует ли какой-либо из типов доступа запрошенной файловой операции разрешения в соответствии с сохраненными битовыми флагами выбранного владельца класса, группы или мира в записи каталога файла. Права доступа владельца, группы и мира независимы и не должны иметь убывающие уровни доступа. Только если ни один из запрошенных типов доступа не требует разрешения, операционная система предоставит доступ, в противном случае он не будет выполнен.
Если включена многопользовательская защита паролем файлов/каталогов, система не даст сбой на этом этапе, а выполнит механизм проверки пароля для выбранного класса разрешений, аналогичный процедуре, описанной выше. При загруженной многопользовательской защите многие утилиты, начиная с DR DOS 6.0, предоставят дополнительный /U:nameпараметр. [47]
Битовая карта прав доступа к файлу: [60]
КусочекМаскаОписание
00x0001Для удаления/переименования/изменения атрибутов владельца требуется разрешение [47] [53] [60]
10x0002Для выполнения владельцем требуется разрешение (только FlexOS, 4680 OS, 4690 OS) [60]
20x0004Владелец должен иметь разрешение на запись/изменение [47] [53] [60]
30x0008Владельцу требуется разрешение на чтение/копирование [47] [53] [60]
40x0010Для удаления/переименования/изменения атрибутов группы требуется разрешение [47] [53] [60]
50x0020Для группового выполнения требуется разрешение (только FlexOS, 4680 OS, 4690 OS) [60]
60x0040Групповая запись/изменение требует разрешения [47] [53] [60]
70x0080Групповое чтение/копирование требует разрешения [47] [53] [60]
80x0100Для удаления/переименования/изменения атрибутов мира требуется разрешение [47] [53] [60]
90x0200Для выполнения World требуется разрешение (только FlexOS, ОС 4680, OS 4690) [60]
100x0400Для записи/изменения требуется разрешение [47] [53] [60]
110x0800Для чтения/копирования требуется разрешение [47] [53] [60]
12-15биты должны быть установлены в 0 во время форматирования и не должны быть изменены дисковыми инструментами позже; [47] бит 15 используется внутренне, [60] но не на диске
Для переименования файлов требуются права на запись или удаление, для IBM 4680 BASIC CHAIN ​​требуются права на выполнение.
  • Дескриптор расширенных атрибутов (используется OS/2 1.2 и выше, а также Windows NT) в FAT12 и FAT16; первый кластер файла EA или 0, если не используется. [47] [61] Для томов FAT32 был разработан другой метод хранения расширенных атрибутов, см. FAT32.IFS по смещению 0x0C .

Хранение старших двух байтов первого кластера в файле на FAT32 частично конфликтует с битовыми картами прав доступа.

0x162
  • Время последнего изменения (с PC DOS 1.1 / MS-DOS 1.20 ); см. смещение 0x0E для описания формата.
  • В Novell DOS, OpenDOS и DR-DOS 7.02 и выше эта запись содержит время удаления ожидающих удаления файлов или каталогов в DELWATCH 2.00 или выше. Последняя измененная метка времени копируется в 0x10 для возможного последующего восстановления. [47] См. смещение 0x0E для описания формата.
0x182
  • Дата последнего изменения; описание формата см. в смещении 0x10 .
  • В Novell DOS, OpenDOS и DR-DOS 7.02 и выше эта запись содержит дату удаления ожидающих удаления файлов или каталогов в DELWATCH 2.00 или выше. Последняя измененная метка даты копируется в 0x12 для возможного последующего восстановления. [47] См. смещение 0x10 для описания формата.
0x1A2Начало файла в кластерах в FAT12 и FAT16. Нижние два байта первого кластера в FAT32; верхние два байта хранятся по смещению 0x14 .

Записи с флагом метки тома, подкаталогом «..», указывающим на корень FAT12 и FAT16, и пустыми файлами размером 0 должны иметь первый кластер 0.

Записи VFAT LFN также имеют эту запись, установленную на 0; на томах FAT12 и FAT16 это может использоваться как часть механизма обнаружения для различения ожидающих удаления файлов в DELWATCH и VFAT LFN; см. выше.

0x1С4Размер файла в байтах. Записи с установленным флагом Volume Label или Subdirectory должны иметь размер 0.

Записи VFAT LFN никогда не хранят здесь значение 0x00000000 . Это может использоваться как часть механизма обнаружения для различения файлов, ожидающих удаления в DELWATCH, и VFAT LFN; см. выше.

Операционные системы IBM 4680 OS и IBM 4690 OS на базе FlexOS поддерживают уникальные атрибуты распределения, хранящиеся в некоторых битах ранее зарезервированных областей в записях каталога: [62]

  1. Локально: Не распространять файл, а хранить только на локальном контроллере. [nb 14]
  2. Зеркальное отображение файла при обновлении: передача файла на сервер только после его обновления.
  3. Зеркальное копирование файла при закрытии: передача файла на сервер только после его закрытия.
  4. Составной файл при обновлении: Распространить файл на все контроллеры после обновления файла.
  5. Составной файл при закрытии: Распространить файл на все контроллеры при закрытии файла. [63]

Некоторые несовместимые расширения, обнаруженные в некоторых операционных системах, включают:

Смещение байтаДлина (байты)СистемаОписание
0x0C2ОС RISCТип файла, 0x00000x0FFF
0x0C4Петров ДОСФСАдрес загрузки файла
0x0E2АНДОСАдрес файла в памяти
0x104Петров ДОСФСАдрес выполнения файла

Ограничения по размеру

Варианты файловых систем FAT12, FAT16, FAT16B и FAT32 имеют четкие ограничения, основанные на количестве кластеров и количестве секторов на кластер (1, 2, 4, ..., 128). Для типичного значения 512 байт на сектор:

Требования FAT12: 3 сектора в каждой копии FAT на каждые 1024 кластера
Требования FAT16: 1 сектор в каждой копии FAT на каждые 256 кластеров
Требования FAT32: 1 сектор в каждой копии FAT на каждые 128 кластеров

Диапазон FAT12: от 1 до 4084 кластеров: от 1 до 12 секторов на копию FAT
Диапазон FAT16: от 4085 до 65524 кластеров: от 16 до 256 секторов на копию FAT
Диапазон FAT32: от 65525 до 268435444 кластеров: от 512 до 2097152 секторов на копию FAT

Минимум FAT12: 1 сектор на кластер × 1 кластер = 512 байт (0,5 КиБ)
Минимум FAT16: 1 сектор на кластер × 4085 кластеров = 2091520 байт (2042,5 КБ)
Минимум FAT32: 1 сектор на кластер × 65525 кластеров = 33548800 байт (32762,5 КБ)

Максимум FAT12: 64 сектора на кластер × 4084 кластера = 133824512 байт (≈127 МБ)
[Максимум FAT12: 128 секторов на кластер × 4084 кластера = 267694024 байт (≈255 МБ)]

Максимум FAT16: 64 сектора на кластер × 65524 кластера = 2147090432 байт (≈2047 МБ)
[FAT16 максимум: 128 секторов на кластер × 65 524 кластера = 4 294 180 864 байта (≈4 095 МБ)]

FAT32 максимум: 8 секторов на кластер × 268 435 444 кластера = 1 099 511 578 624 байта (≈1 024 ГБ)
FAT32 максимум: 16 секторов на кластер × 268 173 557 кластеров = 2 196 877 778 944 байта (≈2 046 ГБ)
[FAT32 максимум: 32 сектора на кластер × 134 152 181 кластер = 2 197 949 333 504 байта (≈2 047 ГБ)]
[Максимум FAT32: 64 сектора на кластер × 67 092 469 кластеров = 2 198 486 024 192 байта (≈2 047 ГБ)]
[Максимум FAT32: 128 секторов на кластер × 33 550 325 кластеров = 2 198 754 099 200 байт (≈2 047 ГБ)]

Легенда: 268435444+3 — это 0x0FFFFFF7 , потому что FAT32 версии 0 использует только 28 бит в 32-битных номерах кластеров, номера кластеров от 0x0FFFFFF7 до 0x0FFFFFFF помечают плохие кластеры или конец файла, кластер номер 0 помечает свободный кластер, а кластер номер 1 не используется. [33] Аналогично 65524+3 — это 0xFFF7 для FAT16, а 4084+3 — это 0xFF7 для FAT12. Количество секторов на кластер — это степень числа 2, умещающаяся в один байт, наименьшее значение — 1 ( 0x01 ), наибольшее значение — 128 ( 0x80 ). Строки в квадратных скобках указывают на необычный размер кластера 128, а для FAT32 — на большие, чем необходимо, размеры кластера 32 или 64. [64]

Поскольку каждая запись FAT32 занимает 32 бита (4 байта), максимальное количество кластеров (268435444) требует 2097152 секторов FAT для размера сектора 512 байт. 2097152 — это 0x200000 , и для хранения этого значения требуется более двух байтов. Поэтому FAT32 ввела новое 32-битное значение в загрузочном секторе FAT32 сразу после 32-битного значения для общего количества секторов, введенного в варианте FAT16B.

Расширения загрузочной записи, представленные в DOS 4.0, начинаются с магических 40 ( 0x28 ) или 41 ( 0x29 ). Обычно драйверы FAT смотрят только на количество кластеров, чтобы различать FAT12, FAT16 и FAT32: читаемые человеком строки, идентифицирующие вариант FAT в загрузочной записи, игнорируются, поскольку они существуют только для носителей, отформатированных в DOS 4.0 или более поздней версии.

Определить количество записей каталога на кластер просто. Каждая запись занимает 32 байта; это дает 16 записей на сектор для размера сектора 512 байт. Команда DOS 5 RMDIR/ RDудаляет начальные записи " ." (этот каталог) и " .." (родительский каталог) в подкаталогах напрямую, поэтому размер сектора 32 на RAM-диске возможен для FAT12, но требует 2 или более секторов на кластер. Загрузочный сектор FAT12 без расширений DOS 4 требует 29 байт перед первым ненужным 32-битным числом скрытых секторов FAT16B, это оставляет три байта для (на неиспользуемом RAM-диске) загрузочного кода и магических 0x55 0xAA в конце всех загрузочных секторов. В Windows NT наименьший поддерживаемый размер сектора составляет 128.

В операционных системах Windows NTFORMAT параметры команды /A:128Kи /A:256Kсоответствуют максимальному размеру кластера 0x80(128) с размером сектора 1024 и 2048 соответственно. Для общего размера сектора 512 /A:64Kполучается 128 секторов на кластер.

В обеих редакциях стандартов ECMA-107 [24] и ISO/IEC 9293 [25] [26] указано максимальное число кластеров, MAX определяемое по формуле , и зарезервированы числа кластеров до 4086 ( 0xFF6 , FAT12) и более поздние 65526 ​​( 0xFFF6 , FAT16) для будущей стандартизации.MAX=1+trunc((TS-SSA)/SC)MAX+1

Спецификация EFI FAT32 от Microsoft [4] гласит, что любая файловая система FAT с менее чем 4085 кластерами является FAT12, в противном случае любая файловая система FAT с менее чем 65 525 кластерами является FAT16, в противном случае это FAT32. Запись для кластера 0 в начале FAT должна быть идентична байту дескриптора носителя, найденному в BPB, тогда как запись для кластера 1 отражает значение конца цепочки, используемое форматером для цепочек кластеров ( 0xFFF , 0xFFFF или 0x0FFFFFFF ). Записи для номеров кластеров 0 и 1 заканчиваются на границе байта даже для FAT12, например, 0xF9FFFF для дескриптора носителя 0xF9 .

Первый кластер данных — 2, [33] и, следовательно, последний кластер MAXполучает номер MAX+1. Это приводит к номерам кластеров данных 2...4085 ( 0xFF5 ) для FAT12, 2...65525 ( 0xFFF5 ) для FAT16 и 2...268435445 ( 0x0FFFFFF5 ) для FAT32.

Единственными доступными значениями, зарезервированными для будущей стандартизации, являются, таким образом, 0xFF6 (FAT12) и 0xFFF6 (FAT16). Как отмечено ниже, «меньше 4085» также используется для реализаций Linux, [44] или, как это сформулировано в спецификации FAT от Microsoft : [4]

...когда написано <, это не значит <=. Обратите внимание, что числа верны. Первое число для FAT12 — 4085; второе число для FAT16 — 65525. Эти числа и знаки «<» не являются неправильными.

Фрагментация

Файловая система FAT не содержит встроенных механизмов, которые предотвращают разбросанность вновь записанных файлов по разделу. [65] На томах, где файлы часто создаются и удаляются или их длина часто меняется, носитель со временем будет становиться все более фрагментированным.

Хотя конструкция файловой системы FAT не вызывает никаких организационных накладных расходов в дисковых структурах или не уменьшает объем свободного дискового пространства при увеличении количества фрагментации , как это происходит при внешней фрагментации , время, необходимое для чтения и записи фрагментированных файлов, увеличится, поскольку операционной системе придется следовать цепочкам кластеров в FAT (при этом части должны быть загружены в память в первую очередь, особенно на больших томах) и считывать соответствующие данные, физически разбросанные по всему носителю, что снижает вероятность того, что драйвер блочного устройства низкого уровня выполнит многосекторный дисковый ввод-вывод или инициирует более крупные передачи DMA, тем самым фактически увеличивая накладные расходы протокола ввода-вывода, а также время перемещения рычага и установки головки внутри дискового накопителя. Кроме того, файловые операции станут медленнее с ростом фрагментации, поскольку операционной системе потребуется все больше времени для поиска файлов или свободных кластеров.

Другие файловые системы, например HPFS или exFAT , используют битовые карты свободного пространства , которые указывают используемые и доступные кластеры, которые затем можно быстро просмотреть, чтобы найти свободные смежные области. Другое решение — это связывание всех свободных кластеров в один или несколько списков (как это делается в файловых системах Unix ). Вместо этого FAT приходится сканировать как массив, чтобы найти свободные кластеры, что может привести к снижению производительности на больших дисках.

Фактически, поиск файлов в больших подкаталогах или вычисление свободного дискового пространства на томах FAT является одной из самых ресурсоемких операций, поскольку требует чтения таблиц каталогов или даже всего FAT линейно. Поскольку общее количество кластеров и размер их записей в FAT все еще были небольшими на томах FAT12 и FAT16, это все еще можно было бы допустить на томах FAT12 и FAT16 большую часть времени, учитывая, что введение более сложных структур дисков также увеличило бы сложность и объем памяти операционных систем реального режима с их минимальными требованиями к общей памяти 128 КБ или меньше (например, с DOS), для которых FAT был изначально разработан и оптимизирован.

С введением FAT32 длительное время поиска и сканирования стало более очевидным, особенно на очень больших томах. Возможным оправданием, предложенным Рэймондом Ченом из Microsoft для ограничения максимального размера разделов FAT32, созданных в Windows, было время, необходимое для выполнения операции " DIR", которая всегда отображает свободное дисковое пространство в качестве последней строки. [66] Отображение этой строки занимало все больше времени по мере увеличения числа кластеров. Поэтому FAT32 ввел специальный сектор информации о файловой системе, где ранее вычисленный объем свободного пространства сохраняется при циклах питания, так что счетчик свободного пространства необходимо пересчитывать только тогда, когда съемный носитель, отформатированный FAT32, извлекается без предварительного его размонтирования или если система выключается без надлежащего завершения работы операционной системы, проблема, в основном заметная на ПК до ATX -стиля, на простых системах DOS и некоторых потребительских продуктах с батарейным питанием.

Из-за огромных размеров кластеров (16 КБ, 32 КБ, 64 КБ), обусловленных большими разделами FAT, внутренняя фрагментация в виде потери дискового пространства из-за нехватки файлов из-за переполнения кластера (поскольку файлы редко бывают точно кратны размеру кластера) также начинает представлять собой проблему, особенно когда имеется очень много мелких файлов.

Различные оптимизации и настройки для реализации драйверов файловой системы FAT, драйверов блочных устройств и дисковых инструментов были разработаны для преодоления большинства узких мест производительности в изначальной конструкции файловой системы без необходимости изменения компоновки структур на диске. [67] [68] Их можно разделить на онлайновые и офлайновые методы, и они работают, пытаясь в первую очередь избежать фрагментации в файловой системе, развертывая методы для лучшего совладания с существующей фрагментацией и переупорядочивая и оптимизируя структуры на диске. При наличии оптимизаций производительность томов FAT часто может достигать производительности более сложных файловых систем в практических сценариях, в то же время сохраняя преимущество доступности даже на очень маленьких или старых системах.

DOS 3.0 и выше не будут немедленно повторно использовать дисковое пространство удаленных файлов для новых выделений, а вместо этого будут искать ранее неиспользованное пространство, прежде чем начать использовать дисковое пространство ранее удаленных файлов. Это не только помогает поддерживать целостность удаленных файлов как можно дольше, но также ускоряет выделение файлов и избегает фрагментации, поскольку никогда ранее не выделявшееся дисковое пространство всегда нефрагментировано. DOS достигает этого, сохраняя указатель на последний выделенный кластер на каждом смонтированном томе в памяти и начинает поиск свободного пространства с этого места вверх, а не с начала FAT, как это все еще делалось в DOS 2.x. [13] Если достигнут конец FAT, он будет перезапускаться, чтобы продолжить поиск с начала FAT, пока либо не будет найдено свободное место, либо не будет достигнута исходная позиция снова без нахождения свободного места. [13] Эти указатели инициализируются для указания на начало FAT после загрузки, [13] но на томах FAT32 DOS 7.1 и выше попытаются извлечь последнюю позицию из сектора информации FS. Однако этот механизм не работает, если приложение часто удаляет и заново создает временные файлы, поскольку операционная система затем попытается сохранить целостность пустых данных, что в конечном итоге приведет к большей фрагментации. [13] В некоторых версиях DOS для избежания этой проблемы можно использовать специальную функцию API для создания временных файлов.

Кроме того, записи каталога удаленных файлов будут помечены как 0xE5 , начиная с DOS 3.0. [42] DOS 5.0 и выше начнут повторно использовать эти записи только тогда, когда ранее неиспользованные записи каталога будут израсходованы в таблице, и в противном случае системе пришлось бы расширять таблицу самостоятельно. [6]

Начиная с DOS 3.3 операционная система предоставляет средства для повышения производительности файловых операций FASTOPENпутем отслеживания положения недавно открытых файлов или каталогов в различных формах списков (MS-DOS/PC DOS) или хэш-таблиц (DR-DOS), что может значительно сократить время поиска и открытия файлов. До DOS 5.0 необходимо соблюдать особую осторожность при использовании таких механизмов в сочетании с программным обеспечением для дефрагментации диска, обходящим файловую систему или драйверы диска.

Windows NT заранее выделяет дисковое пространство для файлов в FAT, выбирая большие непрерывные области, но в случае сбоя добавляемые файлы будут отображаться больше, чем они были записаны, с большим количеством случайных данных в конце.

Другие высокоуровневые механизмы могут считывать и обрабатывать более крупные части или всю FAT при запуске или по требованию, когда это необходимо, и динамически создавать в памяти древовидные представления файловых структур тома, отличающиеся от структур на диске. [67] [68] Это может, на томах со многими свободными кластерами, занимать даже меньше памяти, чем образ самой FAT. В частности, на сильно фрагментированных или заполненных томах поиск становится намного быстрее, чем при линейном сканировании по фактической FAT, даже если образ FAT будет храниться в памяти. Кроме того, работая на логически высоком уровне файлов и цепочек кластеров вместо уровня сектора или дорожки, становится возможным избежать некоторой степени фрагментации файла в первую очередь или выполнить локальную дефрагментацию файлов и переупорядочение записей каталога на основе их имен или шаблонов доступа в фоновом режиме.

Некоторые из предполагаемых проблем с фрагментацией файловых систем FAT также являются следствием ограничений производительности базовых драйверов блочных устройств , что становится тем заметнее, чем меньше памяти доступно для буферизации секторов и блокировки/деблокировки дорожек:

В то время как однозадачная DOS имела возможности для многосекторного чтения и блокировки/деблокировки дорожек, операционная система и традиционная архитектура жесткого диска ПК ( только один невыполненный запрос ввода/вывода за раз и никаких передач DMA ) изначально не содержали механизмов, которые могли бы уменьшить фрагментацию путем асинхронной предварительной выборки следующих данных, пока приложение обрабатывало предыдущие фрагменты. Такие функции стали доступны позже. Более поздние версии DOS также обеспечивали встроенную поддержку буферизации секторов с упреждением и поставлялись с динамически загружаемыми программами кэширования диска, работающими на физическом или логическом уровне секторов, часто используя память EMS или XMS и иногда предоставляя адаптивные стратегии кэширования или даже работая в защищенном режиме через DPMS или Cloaking для повышения производительности за счет получения прямого доступа к кэшированным данным в линейной памяти, а не через обычные API DOS.

Кэширование с отложенной записью часто не включалось по умолчанию в программном обеспечении Microsoft (если оно имелось) из-за проблемы потери данных в случае сбоя питания или сбоя, что усугублялось отсутствием аппаратной защиты между приложениями и системой.

Длинные имена файлов VFAT

Структура каталогов FAT32 с тремя файлами, два из которых используют длинные имена файлов VFAT.

Длинные имена файлов VFAT (LFN) хранятся в файловой системе FAT с помощью трюка: добавления дополнительных записей в каталог перед обычной записью файла. Дополнительные записи помечаются атрибутами Volume Label, System, Hidden и Read Only (что приводит к 0x0F ), что является комбинацией, которая не ожидается в среде MS-DOS, и поэтому игнорируется программами MS-DOS и сторонними утилитами. В частности, каталог, содержащий только метки томов, считается пустым и может быть удален; такая ситуация возникает, если файлы, созданные с длинными именами, удаляются из обычного DOS. Этот метод очень похож на метод DELWATCH для использования атрибута тома для скрытия ожидающих удаления файлов для возможного восстановления в будущем, начиная с DR DOS 6.0 (1991) и выше. Он также похож на метод, публично обсуждавшийся для хранения длинных имен файлов в Ataris и под Linux в 1992 году. [69] [70]

Поскольку старые версии DOS могли ошибочно принимать имена LFN в корневом каталоге за метку тома, VFAT был разработан для создания пустой метки тома в корневом каталоге перед добавлением любых записей имен LFN (если метка тома еще не существовала). [примечание 13]

Каждая фальшивая запись может содержать до 13 символов UCS-2 (26 байт) с использованием полей в записи, содержащих размер файла или временные метки (но не поле начального кластера, для совместимости с дисковыми утилитами поле начального кластера установлено на значение 0. См. 8.3 имя файла для дополнительных объяснений). До 20 из этих 13-символьных записей могут быть объединены в цепочку, поддерживая максимальную длину 255 символов UCS-2. [55]

Если позиция последнего символа LFN не находится на границе записи каталога (13, 26, 39, ...), то в следующую позицию символа добавляется терминатор 0x0000 . Затем, если этот терминатор также не находится на границе, оставшиеся позиции символов заполняются 0xFFFF . Не будет существовать ни одной записи каталога, содержащей одинокий терминатор.

Записи LFN используют следующий формат:

Смещение байтаДлина (байты)Описание
0x001Порядковый номер (бит 6: последняя логическая, первая физическая запись LFN, бит 5: 0; биты 4-0: номер 0x01 .. 0x14 ( 0x1F ), удаленная запись: 0xE5 )
0x0110Символы имени (пять символов UCS-2 )
0x0B1Атрибуты (всегда 0x0F )
0x0C1Тип (всегда 0x00 для VFAT LFN, другие значения зарезервированы для будущего использования; специальное использование битов 4 и 3 в SFN см. выше)
0x0D1Контрольная сумма имени файла DOS
0x0E12Символы имени (шесть символов UCS-2 )
0x1A2Первый кластер (всегда 0x0000 )
0x1С4Символы имени (два символа UCS-2 )

Если для представления имени файла требуется несколько записей LFN, запись, представляющая конец имени файла, идет первой. Порядковый номер этой записи имеет бит 6 ( 0x40 ), установленный для представления того, что это последняя логическая запись LFN, и она имеет наивысший порядковый номер. Порядковый номер уменьшается в следующих записях. Запись, представляющая начало имени файла, имеет порядковый номер 1. Значение 0xE5 используется для указания того, что запись удалена.

На томах FAT12 и FAT16 проверка значений 0x1A на равенство нулю и значений 0x1C на ненулевое значение может использоваться для различения VFAT LFN и ожидающих удаления файлов в DELWATCH.

Например, имя файла «Файл с очень длинным именем.ext» будет отформатировано следующим образом:

Порядковый номерВходные данные
0x03"я.ext"
0x02"y long filena"
0x01"Файл с версией"
???Нормальный 8.3 вход

Контрольная сумма также позволяет проверить, соответствует ли длинное имя файла имени 8.3; такое несоответствие может возникнуть, если файл был удален и создан заново с помощью DOS в той же позиции каталога. Контрольная сумма вычисляется с использованием алгоритма ниже. (pFCBName — это указатель на имя, как оно отображается в обычной записи каталога, т. е. первые восемь символов — это имя файла, а последние три — расширение. Точка подразумевается. Любое неиспользуемое пространство в имени файла заполняется пробелами (ASCII 0x20 ). Например, "Readme.txt" будет иметь вид " ".)README␠␠TXT

беззнаковый символ lfn_checksum ( const беззнаковый символ * pFCBName ) { int i ; беззнаковый символ sum = 0 ;             для ( i = 11 ; i ; i -- ) сумма = (( сумма & 1 ) << 7 ) + ( сумма >> 1 ) + * pFCBName ++ ;                   вернуть сумму ; } 

Если имя файла содержит только строчные буквы или представляет собой комбинацию нижнего регистра базового имени с заглавным расширением или наоборот; и не имеет специальных символов и соответствует ограничениям 8.3, запись VFAT не создается в Windows NT и более поздних версиях Windows, таких как XP. Вместо этого два бита в байте 0x0C записи каталога используются для указания того, что имя файла следует считать полностью или частично строчным. В частности, бит 4 означает нижнее расширение , а бит 3 — нижнее регистровое базовое имя , что допускает такие комбинации, как " " или " ", но не " ". Немногие другие операционные системы поддерживают это. Это создает проблему обратной совместимости со старыми версиями Windows (Windows 95 / 98 / 98 SE / ME), которые видят имена файлов, состоящие полностью из заглавных букв, если использовалось это расширение, и, следовательно, могут изменить имя файла при его переносе между операционными системами, например, на флэш-накопителе USB. Текущие версии Linux 2.6.x распознают это расширение при чтении (источник: ядро ​​2.6.18 и ); параметр монтирования определяет, будет ли эта функция использоваться при записи. [71]example.TXTHELLO.txtMixed.txt/fs/fat/dir.cfs/vfat/namei.cshortname

Смотрите также

Примечания

  1. ^ abc Для максимальной совместимости с MS-DOS/PC DOS и DR-DOS операционные системы, пытающиеся определить формат дискеты, должны проверять все упомянутые последовательности кодов операций по смещению сектора 0x000 в дополнение к поиску допустимого байта дескриптора носителя по смещению сектора 0x015, прежде чем предполагать наличие BPB. Хотя дискеты PC DOS 1.0 не содержат BPB, они также начинаются с 0xEB , но не показывают 0x90 по смещению 0x002 . Дискеты PC DOS 1.10 даже начинаются с 0xEB 0x?? 0x90 , хотя они по-прежнему не содержат BPB. В обоих случаях проверка допустимого дескриптора носителя по смещению 0x015 завершится неудачей (значение 0x00 вместо допустимых дескрипторов носителя 0xF0 и выше). Если эти тесты не пройдены, DOS проверяет наличие байта дескриптора носителя в первом байте первой FAT в секторе, следующем за загрузочным сектором (логический сектор 1 на дискетах FAT12/FAT16).
  2. ^ abcde Сигнатура по смещению 0x1FE в загрузочных секторах равна 0x55 0xAA , то есть 0x55 по смещению 0x1FE и 0xAA по смещению 0x1FF . Поскольку в контексте совместимых с IBM PC машин необходимо предполагать представление little-endian , в программах для процессоров x86 это можно записать как 16-битное слово 0xAA55 (обратите внимание на поменянный порядок), тогда как в программах для других архитектур ЦП, использующих представление big-endian , это должно быть записано как 0x55AA . Поскольку это много раз путалось в книгах и даже в оригинальных справочных документах Microsoft, в этой статье используется представление на основе смещения побайтово на диске, чтобы избежать любой возможной неверной интерпретации.
  3. ^ abc Запись контрольной суммы в загрузочных секторах Atari содержит значение выравнивания, а не само магическое значение . Магическое значение 0x1234 не хранится нигде на диске. В отличие от процессоров Intel x86 , процессоры Motorola 680x0 , используемые в машинах Atari, используют представление памяти с обратным порядком байтов , и поэтому при вычислении контрольной суммы необходимо предполагать представление с обратным порядком байтов. Вследствие этого для кода проверки контрольной суммы, работающего на машинах x86, пары байтов должны быть поменяны местами перед 16-битным сложением.
  4. ^ DR-DOS может загружаться с носителей с логическими секторами FAT12/FAT16 с размером логического сектора до 1024 байт.
  5. ^ ab Следующие функции DOS возвращают эти значения регистров: INT 21h/AH=2Ah "Получить системную дату" вернула значения: CX = год ( 1980 .. 2099 ), DH = месяц (1..12), DL = день (1..31). INT 21h/AH=2Ch "Получить системное время" вернула значения: CH = час (0..23), CL = минута (0..59), DH = секунда (0..59), DL = 1/100 секунды (0..99).
  6. ^ Было замечено, что Windows XP создает такие гибридные диски при переформатировании дисков ZIP-100, отформатированных в FAT16B, в формат FAT32. Полученные тома были FAT32 по формату, но все еще использовали FAT16B EBPB. (Неясно, как Windows определяет местоположение корневого каталога на томах FAT32, если использовался только FAT16 EBPB.)
  7. ^ ab Одной из утилит, предоставляющих возможность указать желаемое значение заполнителя формата для жестких дисков, является DR-DOS' FDISK R2.31 с его необязательным параметром очистки /W:246. В отличие от других утилит FDISK , DR-DOS FDISK не только инструмент для разбиения на разделы, но и может форматировать свежесозданную разделы как FAT12 , FAT16 или FAT32 . Это снижает риск случайного форматирования неправильных томов.
  8. ^ Для поддержки сосуществования DR-DOS с PC DOS и нескольких параллельных установок DR-DOS расширение IBMBIO␠␠COMимени загрузочного файла по умолчанию " " можно изменить с помощью SYS /DR:extпараметра, где ext представляет новое расширение. Другие потенциальные имена загрузочных файлов DR-DOS, которые можно ожидать в особых сценариях, это " DRBIOS␠␠SYS", " DRDOS␠␠␠SYS", " IO␠␠␠␠␠␠SYS", " JO␠␠␠␠␠␠SYS".
  9. ^ Если флаг грязного выключения тома все еще сброшен при запуске, том не был правильно размонтирован. Это, например, может привести к тому, что Windows 98 WIN.COM запустит SCANDISK для проверки и исправления потенциальных логических ошибок файловой системы. Если флаг плохого сектора сброшен, это также заставит выполнить сканирование поверхности. Это можно отключить, установив AUTOSCAN=0 в разделе [OPTIONS] в файле MSDOS.SYS .
  10. ^ abcd См. другие ссылки для получения информации о мерах предосторожности в отношении появления значения кластера 0xFF0 на томах FAT12 под MS-DOS/PC DOS 3.3 и выше.
  11. ^ ab Некоторые версии FORMAT , начиная с MS-DOS 1.25 и PC DOS 2.0, поддерживали опцию /O(для old ) заполнения первого байта всех записей каталога значением 0xE5 вместо использования конечного маркера 0x00 . Таким образом, том оставался доступным в PC DOS 1.0 - 1.1 , в то время как форматирование занимало несколько больше времени, а более новые версии DOS не могли воспользоваться значительным ускорением, вызванным использованием конечного маркера 0x00 .
  12. ^ Вот почему 0xE5 имел особое значение в записях каталога.
  13. ^ ab Чтобы избежать потенциальной неверной интерпретации меток томов каталогов с записями VFAT LFN операционными системами, не поддерживающими VFAT, инструменты DR-DOS 7.07 FDISK и FORMAT, как известно, явно записывают фиктивные NO␠NAME␠␠␠␠метки томов каталогов " ", если пользователь пропускает ввод метки тома. Операционная система по умолчанию будет возвращать ту же строку, если метка тома каталога не может быть найдена в корне тома, но без реальной метки тома, сохраненной в качестве первой записи (после записей каталога), старые операционные системы могут ошибочно выбирать записи VFAT LFN вместо этого.
  14. ^ Этот тип атрибута распределения ОС IBM 4680 и 4690 должен иметь значение бита на диске, равное 0, поскольку файлы возвращаются к этому типу при случайной потере атрибутов.

Ссылки

  1. ^ "File Systems". Microsoft TechNet . 2001. Архивировано из оригинала 2011-08-12 . Получено 2011-07-31 .
  2. ^ ab Microsoft (2006-11-15). Файл Windows 95 CD-ROM CONFIG.TXT Архивировано 28.01.2013 в archive.today Статья 135481, редакция: 1.1, извлечено 22.12.2011: "Для каждого жесткого диска указывает, следует ли записывать дату последнего доступа к файлам. Даты последнего доступа отключаются для всех дисков, когда компьютер запускается в безопасном режиме, и по умолчанию не сохраняются для дискет. Синтаксис: ACCDATE=drive1+|- [drive2+|-]..."
  3. ^ Бхат, WA (2010). «Обзор структуры данных FAT файловой системы FAT32». S2CID  58178285. {{cite web}}: Отсутствует или пусто |url=( помощь )
  4. ^ abcdefghijklmno "Спецификация файловой системы FAT32 от Microsoft Extensible Firmware Initiative, FAT: Общий обзор формата на диске". Microsoft . 2000-12-06. Архивировано из оригинала 2021-07-23 . Получено 2011-07-03 .
  5. ^ abcd Хааф, Уилфрид; Миддел, Фрэнк (ноябрь 1987 г.). «Daten auf Scheiben – File- und Diskettenstrukturen unter CP/M, MSDOS und TOS: Dateiverwaltung unter TOS». c't - магазин компьютерной техники . c't Kartei (на немецком языке). Том. 1987, нет. 11. Верлаг Хайнц Хайзе ГмбХ и Ко. КГ . С. 241–246 [246]. ISSN  0724-8679.
  6. ^ abcdefghijklmnop Chappell, Geoff (январь 1994). Schulman, Andrew; Pedersen, Amorette (ред.). DOS Internals . Серия программирование Эндрю Шульмана (1-е издание, 1-е изд.). Addison Wesley Publishing Company . ISBN 978-0-201-60835-9.(xxvi+738+iv страниц, 3,5-дюймовая дискета [1][2]) Опечатки: [3][4][5]
  7. ^ abcdefghijklmnopqrstu vw Microsoft MS-DOS 3.1 Programmierhandbuch на английском языке [ Справочное руководство программиста Microsoft MS-DOS 3.1 на английском языке ]. Мюнхен: Markt & Technik Verlag (опубликовано в 1986 г.). 1984. ISBN 3-89090-368-1. 8411-310-02, 036-014-012. Относительно инструкции перехода в начале загрузочного сектора: «Определите, является ли первый байт загрузочного сектора E9H или EBIT (первый байт 3-байтового NEAR или 2-байтового короткого перехода) или EBH (первый байт 2-байтового перехода, за которым следует NOP). Если это так, то BPB располагается, начиная со смещения 3».(Примечание. В этой книге много ошибок.)
  8. ^ Дэниел Б. Сидори. Загрузочный сектор персонального компьютера IBM DOS версии 1.00 (1981) . 2005-08-02 ([6] Архивировано 21 мая 2014 г. на Wayback Machine ).
  9. ^ Дэниел Б. Сидори. Загрузочный сектор персонального компьютера IBM DOS версии 1.10 (1982) . 2005-07-29 ([7] Архивировано 21 мая 2014 года на Wayback Machine ).
  10. ^ ab Caldera (1997). Caldera OpenDOS Machine Readable Source Kit 7.01 . Файл DISK.ASM в машиночитаемом исходном наборе показывает, что DR-DOS также проверяет значение 0x69 .
  11. ^ Пол, Маттиас Р. (2002-02-20). "Нужна DOS 6.22 (не OEM)". Группа новостей : alt.msdos.programmer. Архивировано из оригинала 2017-09-09 . Получено 2006-10-14 .
  12. ^ Басс, Уолли (1994-02-14). "Размер кластера". Группа новостей : comp.os.msdos.programmer. Архивировано из оригинала 2017-09-09 . Получено 2006-10-14 .
  13. ^ abcdefgh Дэйв Уильямс (1992). Технический справочник программиста по MSDOS и IBM PC . DOSREF, Shareware версия 01/12/1992. ISBN 1-878830-02-3 . ([8] Архивировано 20 мая 2014 г. на Wayback Machine , просмотрено 08 января 2012 г.). Комментарий: Автор упоминает, что DOS 4.0 проверяет метку OEM, но отрицает, что DOS 3.2 тоже проверяет ее (хотя это так). 
  14. ^ Пол, Маттиас Р. (2004-08-25). "NOVOLTRK.REG". www.drdos.org . Архивировано из оригинала 2016-03-04 . Получено 2011-12-17 .[9]
  15. ^ ab "Устранение неполадок дисков и файловых систем". Microsoft TechNet . 2005-11-05. Архивировано из оригинала 2014-06-07 . Получено 2014-06-15 .
  16. ^ IBM (1983). IBM PC Technical Reference Handbook . Комментарий: Включает полный листинг исходного кода ROM BIOS оригинального IBM PC.
  17. ^ abcd Ханс-Дитер Янковски, Дитмар Рабих, Джулиан Ф. Решке (1992). Atari Profibuch СТ-СТЭ-ТТ . Сайбекс, 4-е издание, 12-я партия. ISBN 3-88745-888-5 , ISBN 978-3-88745-888-1 .  
  18. ^ Seagate Technologies, «Переход на жесткие диски с секторами 4 КБ расширенного формата (архив Wayback Machine @Archive.org)», 2010 ([10]).
  19. ^ abcd Браун, Ральф Д. (29.12.2002). "Список прерываний x86". Архивировано из оригинала 16.06.2016 . Получено 14.10.2011 .
  20. ^ abcd de Boyne Pollard, Jonathan (2010) [2006]. "Все о блоках параметров BIOS". Часто задаваемые ответы . Архивировано из оригинала 2016-08-26 . Получено 2014-06-02 .
  21. ^ abc Справочник программиста Microsoft MS-DOS: версия 5.0. Microsoft press. 1991. ISBN 1-55615-329-5.
  22. ^ abcdefghijk "Стандартные форматы дискет, поддерживаемые MS-DOS". Справка и поддержка Microsoft. 2003-05-12. Архивировано из оригинала 2015-01-09 . Получено 2012-09-11 .
  23. ^ abc Microsoft (1987-07). Справочник программиста MS-DOS 3.3.
  24. ^ abcdefghij "Объем и структура файлов дисковых картриджей для обмена информацией". Стандарт ECMA-107 (2-е изд., июнь 1995 г.) . ECMA . 1995. Архивировано из оригинала 2018-10-07 . Получено 2011-07-30 .
  25. ^ abcdefghij "Информационные технологии. Объем и структура файлов дисковых картриджей для обмена информацией". ISO/IEC 9293:1994 . Каталог ISO . 1994. Архивировано из оригинала 2012-01-17 . Получено 2012-01-06 .
  26. ^ abcdefghij "Обработка информации. Объем и структура файлов картриджей гибких дисков для обмена информацией". ISO 9293:1987 . Каталог ISO . 1987. Архивировано из оригинала 2012-01-17 . Получено 2012-01-06 .
  27. ^ abc Andries Brouwer (2002-09-20). "Файловая система FAT". Архивировано из оригинала 2011-10-06 . Получено 2011-10-16 .
  28. ^ abcdefghijklmnopqr Патерсон, Тим ; Microsoft (2013-12-19) [1983]. "Microsoft DOS V1.1 и V2.0: /msdos/v20source/SKELIO.TXT, /msdos/v20source/HRDDRV.ASM". CHM . Музей истории компьютеров , Microsoft . Архивировано из оригинала 2019-08-14 . Получено 2014-03-25 .(Примечание. Хотя издатели утверждают, что это MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Altos MS-DOS 2.11 и TeleVideo PC DOS 2.11 .)
  29. ^ abcdefghij Збиковски, Марк ; Аллен, Пол ; Баллмер, Стив ; Борман, Рубен; Борман, Роб; Батлер, Джон; Кэрролл, Чак; Чемберлен, Марк; Челл, Дэвид; Коули, Майк; Кортни, Майк; Драйфус, Майк; Дункан, Рэйчел; Экхардт, Курт; Эванс, Эрик; Фармер, Рик; Гейтс, Билл ; Гири, Майкл; Гриффин, Боб; Хогарт, Дуг; Джонсон, Джеймс У.; Кермани, Камел; Кинг, Адриан; Кох, Рид; Ландовски, Джеймс; Ларсон, Крис; Леннон, Томас; Липки, Дэн; Макдональд, Марк ; Маккинни, Брюс; Мартин, Паскаль; Мазерс, Эстель; Мэтьюз, Боб; Мелин, Дэвид; Мергентайм, Чарльз; Невин, Рэнди; Ньюэлл, Дэн; Ньюэлл, Тани; Норрис, Дэвид; О'Лири, Майк; О'Риар, Боб ; Олссон, Майк; Остерман, Ларри; Остлинг, Ридж; Пай, Сунил; Патерсон, Тим ; Перес, Гари; Питерс, Крис; Петцольд, Чарльз ; Поллок, Джон; Рейнольдс, Аарон ; Рубин, Даррил; Райан, Ральф; Шульмейстерс, Карл; Шах, Раджен; Шоу, Барри; Шорт, Энтони; Сливка, Бен; Смирл, Джон; Стиллмейкер, Бетти; Стоддард, Джон; Тиллман, Деннис; Уиттен, Грег; Йонт, Натали; Зек, Стив (1988). "Технические консультанты". Энциклопедия MS-DOS: версии с 1.0 по 3.2 . Автор: Дункан, Рэй; Боствик, Стив; Бергойн, Кейт; Байерс, Роберт А.; Хоган, Том; Кайл, Джим; Летвин, Гордон ; Петцольд, Чарльз ; Рабинович, Чип; Томлин, Джим; Уилтон, Ричард; Вулвертон, Ван; Вонг, Уильям; Вудкок, Джоанн (полностью переработанное издание). Редмонд, Вашингтон, США: Microsoft Press . ISBN 1-55615-049-0. LCCN  87-21452. OCLC  16581341.(xix+1570 страниц; 26 см) (Примечание. Это издание было опубликовано в 1988 году после обширной переработки отозванного первого издания 1986 года другой группой авторов. [11] Архивировано 14 октября 2018 года на Wayback Machine )
  30. ^ ab "Подробное объяснение загрузочного сектора FAT". База знаний Microsoft . 2003-12-06. Архивировано из оригинала 2011-11-28 . Получено 2011-10-16 .
  31. ^ abc Lai, Robert S.; The Waite Group (1987). Написание драйверов устройств MS-DOS (2-е изд.). Addison Wesley. ISBN 0-201-60837-5.
  32. ^ abcdefghijklmnopqrst Патерсон, Тим ; Microsoft (2013-12-19) [1983]. "Microsoft DOS V1.1 и V2.0: /msdos/v20source/DEVDRIV.txt". Музей истории компьютеров , Microsoft . Архивировано из оригинала 2019-08-14 . Получено 2014-03-25 .(Примечание. Хотя издатели утверждают, что это MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Altos MS-DOS 2.11 и TeleVideo PC DOS 2.11 .)
  33. ^ abcde Тим Патерсон (1983). "Взгляд изнутри на MS-DOS". Byte . Архивировано из оригинала 2011-07-20 . Получено 18-07-2011 . Нумерация начинается с 2; первые две цифры, 0 и 1, зарезервированы.
  34. ^ abcd PORT-DOS - Руководство по пользовательским подсказкам для Apricot Portable . Руководства по пользовательским подсказкам, Великобритания ([12] Архивировано 22.05.2013 на Wayback Machine ).
  35. ^ abcde Джон К. Эллиотт (1998). Форматы дисков DOSPLUS . ([13] Архивировано 07.06.2013 на Wayback Machine ).
  36. ^ abcd BBC Master 512. Страницы Yellow Pig на BBC Computer ([14] Архивировано 21 мая 2014 г. на Wayback Machine ).
  37. ^ Digital Equipment Corporation. Rainbow 100 MS-DOS 2.01 Техническая документация Том 1 (QV025-GZ), Листинг BIOS операционной системы Microsoft MS-DOS (AA-X432A-TV), Универсальный драйвер диска, страницы 1-17. 1983.
  38. ^ "Подробное объяснение загрузочного сектора FAT". DEW Associates Corporation. 2002. Архивировано из оригинала 2011-09-26 . Получено 2011-10-16 .
  39. ^ Tyagi, Tarun (2004-10-31). "Размер кластеров в файловых системах FAT и NTFS". Восстановление данных с программированием и без него. Нью-Дели, Индия: Gardners Books. стр. 4. ISBN 978-81-7656-922-4. Архивировано из оригинала 2021-12-03 . Получено 2021-12-03 .
  40. ^ Дэниел Б. Сидори. Подробные заметки о «флаге грязного выключения» в MS-Windows . 2001-12-04. ([15] Архивировано 2014-05-21 на Wayback Machine ).
  41. ^ abcde "Windows 98 Resource Kit - Глава 10 - Диски и файловые системы". Microsoft TechNet . 1998. Архивировано из оригинала 2012-05-01 . Получено 2012-07-16 .
  42. ^ abcd Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михельс, Рэймонд Дж.; Кайл, Джим (1994) [ноябрь 1993]. Недокументированная DOS: руководство программиста по зарезервированным функциям и структурам данных MS-DOS — расширено для включения MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Reading, Массачусетс: Addison Wesley . стр. 11. ISBN 0-201-63287-X.(xviii+856+vi страниц, 3,5-дюймовая дискета) Опечатки: [16][17]
  43. ^ Питер Нортон (1986). Внутри IBM PC, пересмотренное и расширенное , Брэди. ISBN 0-89303-583-1 , стр. 157. 
  44. ^ abc Andries Brouwer . "FAT под Linux". Архивировано из оригинала 2014-07-01 . Получено 2014-05-20 .
  45. ^ Андрис Брауэр (2002-09-20). "FAT". Архивировано из оригинала 2017-12-17 . Получено 2012-01-11 .
  46. ^ abc Seattle Computer Products (1981). "SCP 86-DOS 1.0 Addendum" (PDF) . Архивировано (PDF) из оригинала 2012-10-03 . Получено 2013-03-10 .
  47. ^ abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah ai aj ak Пол, Маттиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей. MPDOSTIP (на немецком языке) (3-е изд.). Архивировано из оригинала 5 ноября 2016 г. Проверено 11 января 2012 г.(Примечание. NWDOSTIP.TXT — это комплексная работа по Novell DOS 7 и OpenDOS 7.01 , включающая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной коллекции MPDOSTIP.ZIP автора, которая поддерживалась до 2001 года и распространялась на многих сайтах в то время. Приведенная ссылка указывает на более старую версию файла, преобразованную в HTML.) [18]
  48. ^ IBM. Руководство пользователя ОС 4690, версия 5.2 , документ IBM SC30-4134-01, 10.01.2008 ([19]).
  49. ^ ab Paterson, Tim ; Microsoft (2013-12-19) [1983]. "Microsoft DOS V1.1 и V2.0: /msdos/v20source/FORMAT.TXT". Computer History Museum , Microsoft . Архивировано из оригинала 2019-08-14 . Получено 2014-03-25 .(Примечание. Хотя издатели утверждают, что это MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Altos MS-DOS 2.11 и TeleVideo PC DOS 2.11 .)
  50. ^ ab Shustek, Len (2014-03-24). "Ранний исходный код Microsoft MS-DOS". Software Gems: The Computer History Museum Historical Source Code Series. Архивировано из оригинала 2019-08-10 . Получено 2014-03-29 .(Примечание. Хотя автор утверждает, что это MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Altos MS-DOS 2.11 и TeleVideo PC DOS 2.11 .)
  51. ^ ab Левин, Рой (2014-03-25). "Microsoft делает исходный код MS-DOS и Word для Windows общедоступным". Официальный блог Microsoft . Архивировано из оригинала 2014-03-28 . Получено 2014-03-29 .(Примечание. Хотя автор утверждает, что это MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Altos MS-DOS 2.11 и TeleVideo PC DOS 2.11 .)
  52. ^ JEIDA/JEITA/CIPA (2010). "Стандарт Ассоциации камер и устройств обработки изображений, CIPA DC-009-Translation-2010, Правила проектирования файловой системы камеры: DCF версии 2.0 (издание 2010 г.)" (PDF) . Архивировано из оригинала (PDF) 2013-09-30 . Получено 2011-04-13 .
  53. ^ abcdefghijklmnopq Caldera (1997). Caldera OpenDOS Machine Readable Source Kit 7.01 . Файл FDOS.EQU в машиночитаемом исходном наборе имеет эквиваленты для соответствующих записей каталога.
  54. ^ Джон К. Эллиотт (1998). Форматы дисков CP/M 4.1 . ([20] Архивировано 26 августа 2014 г. на Wayback Machine ): "CP/M 4.1 (DOS Plus [1.2]) позволяет использовать две файловые системы - CP/M и DOS. Версия [...], поставляемая с Amstrad PC1512, не может обрабатывать дискеты размером более 360 Кб (CP/M) / 1,2 Мб (DOS) или разделы жесткого диска размером более 32 Мб. [...] Файловая система DOS может быть либо FAT12, либо FAT16. Формат точно такой же, как в PCDOS 2.11, за исключением: байт 0Ch записи каталога [...] содержит четыре "атрибута пользователя" F1'-F4' [...] Пароли в стиле DRDOS не поддерживаются".
  55. ^ ab vinDaci (1998-01-06). "Спецификация длинных имен файлов". Архивировано из оригинала 2001-04-20 . Получено 13-03-2007 .
  56. ^ Хенк Келдер. FAT32.TXT для FAT32.IFS версии 0.74 . ( "@Macarlo, Inc". Архивировано из оригинала 2012-03-30 . Получено 2012-01-14 .). Комментарий: В этой старой версии файла README по-прежнему обсуждаются старые магические значения 0xEA и 0xEC .
  57. ^ Хенк Келдер (2003). FAT32.TXT для FAT32.IFS версии 0.9.13." ([21] Архивировано 25.01.2022 на Wayback Machine ): "Этот байт [...] не изменяется при работе Windows 95 и выше с помощью SCANDISK или DEFRAG. [...] Если другая программа устанавливает значение 0x00 для файла, который имеет EA, эти EA больше не будут найдены с помощью только вызовов DosFindFirst/Next. Другие вызовы OS/2 для извлечения EA (DosQueryPathInfo, DosQueryFileInfo и DosEnumAttribute) не полагаются на этот байт. Также может произойти обратное [...]. [...] В этой ситуации снизится только производительность сканирования каталогов. Обе ситуации [...] исправляются с помощью CHKDSK ".
  58. ^ Netlabs. FAT32.IFS Wiki и источники . ([22] Архивировано 11 мая 2013 г. на Wayback Machine ).
  59. ^ ab IBM. Руководство по программированию ОС 4690, версия 5.2 , документ IBM SC30-4137-01, 2007-12-06 ([23]).
  60. ^ abcdefghijklmn Справочная серия разработчиков OpenDOS — Руководство по системе и программисту — Руководство программиста. Caldera, Inc. Август 1997 г. Номер детали Caldera 200-DODG-003. Архивировано из оригинала 2017-10-07 . Получено 2014-05-20 .(Напечатано в Великобритании.)
  61. ^ Боб Игер, Tavi Systems (28.10.2000). Реализация расширенных атрибутов в файловой системе FAT . ([24] Архивировано 13.06.2006 на Wayback Machine ).
  62. ^ IBM (2003). Информация об уникальных атрибутах распределения файлов ОС 4690 , документ IBM R1001487, 2003-07-30. ( «Информация IBM об уникальных атрибутах распределения файлов ОС 4690 — США». Архивировано из оригинала 21-05-2014 . Получено 20-05-2014 .): "[...] типы файлов хранятся в разделе "Зарезервированные биты" структуры каталогов файлов PC-DOS [...] только 4690 уважает и сохраняет эти атрибуты. Различные операционные системы, отличные от 4690, выполняют различные действия, если эти биты включены [...] при копировании с дискеты, созданной в системе 4690. [...] PC-DOS и Windows 2000 Professional скопируют файл без ошибок и обнулят биты. OS/2 [...] 1.2 [...] откажется копировать файл, если [...] сначала не запустить CHKDSK /F для файла. После [...] CHKDSK он скопирует файл и обнулит биты. [...] при [...] копировании [...] обратно в систему 4690 [...] файл будет скопирован как локальный файл".
  63. ^ IBM. 4690 сохранение и восстановление атрибутов распределения файлов . Документ IBM R1000622, 2010-08-31 ( "IBM 4690 сохранение и восстановление атрибутов распределения файлов - Соединенные Штаты". Архивировано из оригинала 2014-05-21 . Получено 2014-05-20 .).
  64. ^ "Ограничения файловой системы FAT32". База знаний Microsoft . 2007-03-26. Архивировано из оригинала 2011-08-15 . Получено 2011-08-21 . Кластеры не могут быть 64 килобайта или больше
  65. ^ Дункан, Рэй (1989). «Цели проектирования и реализация новой высокопроизводительной файловой системы». Microsoft Systems Journal. Архивировано из оригинала 2011-07-16 . Получено 2014-05-20 .[Примечание. В этом текстовом файле имеется ряд ошибок OCR; например, «Рэй» — правильное имя автора, а не «Рой», как указано в тексте.]
  66. ^ Чен, Рэймонд (июль 2006 г.). «Microsoft TechNet: Краткая и неполная история FAT32». Журнал Microsoft TechNet. Архивировано из оригинала 2008-11-18 . Получено 2014-05-20 .
  67. ^ ab Les Bell; Associates Pty Ltd (1996-09-02) [1990]. "OS/2 High Performance File System". PC Support Advisor . Архивировано из оригинала 2014-03-01 . Получено 2014-06-24 .
  68. ^ ab Bridges, Dan (февраль 1996 г.). "Внутри высокопроизводительной файловой системы - Часть 2/6: Введение". Значительные биты, Brisbug PC User Group Inc. Архивировано из оригинала 2015-09-23 . Получено 2014-06-24 .
  69. ^ Natuerlich! (1992-03-24). "Получение длинных имен файлов из GEMDOS". comp.sys.atari.st.tech. Архивировано из оригинала 2014-04-24 . Получено 2014-05-05 .
  70. ^ Торвальдс, Линус (1992-12-23). ​​"Длинные имена файлов". comp.os.minix. Архивировано из оригинала 2014-04-23 . Получено 2014-05-05 .
  71. ^ "mount(8): mount file system". Страница руководства Linux . Архивировано из оригинала 2014-05-05 . Получено 2014-05-20 .
  • ECMA-107 Структура томов и файлов дисковых картриджей для обмена информацией, идентично ISO/IEC 9293.
  • Спецификация файловой системы FAT32 от Microsoft Extensible Firmware Initiative, FAT: общий обзор формата на диске
  • Понимание файловых систем FAT32 (объяснение для разработчиков встроенного ПО)
  • Понимание FAT, включая много информации о LFN
  • Подробное объяснение загрузочного сектора FAT: статья базы знаний Microsoft 140418
  • Описание файловой системы FAT32: статья базы знаний Microsoft 154997
  • FAT12/FAT16/FAT32 file system implementation for *nix: Includes libfat libraries and fusefat, a FUSE file system driver
  • MS-DOS: Directory and Subdirectory Limitations: Microsoft Knowledge Base Article 39927
  • Overview of FAT, HPFS, and NTFS File Systems: Microsoft Knowledge Base Article 100108
  • Volume and file size limits of FAT file systems: Microsoft Technet, copy made by Internet Archive Wayback Machine
  • Microsoft TechNet: A Brief and Incomplete History of FAT32 by Raymond Chen
  • FAT32 Formatter Archived 2009-07-21 at the Wayback Machine: allows formatting volumes larger than 32 GB with FAT32 under Windows 2000, Windows XP and Windows Vista
  • Fdisk does not recognize full size of hard disks larger than 64 GB: Microsoft Knowledge Base Article 263044, copy made by Internet Archive Wayback Machine. Explains inability to work with extremely large volumes under Windows 95/98.
  • Microsoft Windows XP: FAT32 File System. Copy made by Internet Archive Wayback Machine of an article with summary of limits in FAT32 which is no longer available on Microsoft website.
  • Visual Layout of a FAT16 drive
Retrieved from "https://en.wikipedia.org/w/index.php?title=Design_of_the_FAT_file_system&oldid=1244804881#DIR_OFS_18h"