Дизайн файловой системы FAT - Design of the FAT file system

ТОЛСТЫЙ
Разработчики)Microsoft, SCP, IBM, Compaq, Цифровые исследования, Novell, Кальдера
Полное имяТаблица размещения файлов:
FAT12 (12-битная версия),
FAT16 (16-битные версии),
FAT32 (32-битная версия с использованием 28 бит),
exFAT (64-битные версии)
Введено1977 (Автономный диск BASIC-80 )
FAT12: август 1980 г. (SCPQDOS )
FAT16: август 1984 г. (IBMПК DOS 3.0)
FAT16B: ноябрь 1987 г. (Compaq MS-DOS 3.31)
FAT32: август 1996 г. (Windows 95 OSR2 )
exFAT: ноябрь 2006 г. (Встроенная Windows CE 6.0 )
Идентификатор разделаMBR /EBR:
FAT120x01 э.а.
FAT160x040x060x0E э.а.
FAT320x0B0x0C э.а.
exFAT0x07 э.а.
BDP:
EBD0A0A2-B9E5-443387C0-68B6B72699C7
Структуры
Содержимое каталогаСтол
Размещение файловСвязанный список
Плохие блокиТеги кластера
Пределы
Максимум. размер томаFAT12: 32МБ (256 МБ для 64КБ кластеры)
FAT16: 2ГБ (4 ГБ для 64КБ кластеры)
FAT32: 2Туберкулез (16 Туберкулез за КБ сектора )
Максимум. размер файла4294967295 байт (4ГБ - 1) с FAT16B и FAT32[1]
Максимум. количество файловFAT12: 4068 для 8КБ кластеры
FAT16: 65 460 для 32КБ кластеры
FAT32: 268 173 300 для 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 ОС, 4690 ОС, Параллельная DOS, Многопользовательская DOS, Системный менеджер, РЕАЛЬНЫЙ / 32 (Право выполнения только для FlexOS, ОС 4680, ОС 4690; пароли отдельных файлов / каталогов не для FlexOS, ОС 4680, ОС 4690; Мир /Группа /Владелец классы разрешений только с загруженной многопользовательской безопасностью)
FAT32: Частично, только с DR-DOS, REAL / 32 и 4690 OS
Прозрачное сжатиеFAT12 / FAT16: по объему, SuperStor, Укладчик, Двойной пробел, DriveSpace
FAT32: Нет
Прозрачное шифрованиеFAT12 / FAT16: только по объему с DR-DOS
FAT32: Нет

А Файловая система FAT это особый тип компьютера файловая система архитектура и семейство стандартных файловых систем, использующих ее.

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

Первоначально разработан в 1977 году для использования на дискеты, FAT вскоре был адаптирован и стал использоваться почти повсеместно на жесткие диски на протяжении ДОС и Windows 9x эпох за два десятилетия. Сегодня файловые системы FAT все еще часто встречаются на дискетах, USB-накопители, вспышка и другие твердое состояние карты памяти и модули, и многие портативные и встроенные устройства. DCF реализует FAT как стандартную файловую систему для цифровые фотоаппараты с 1998 года.[4] FAT также используется для Системный раздел EFI (тип раздела 0xEF) на этапе загрузки EFI -соответствующие компьютеры.

Для дискет FAT стандартизирован как ECMA -107[5] и ISO /IEC  9293:1994[6] (заменяет ISO 9293: 1987[7]). Эти стандарты охватывают FAT12 и FAT16 только с короткими 8.3 имя файла поддерживать; длинные имена файлов с VFAT находятся частично запатентовано.[8] Согласно патентам Google, статус «Общее пространство имен для длинных и коротких имен файлов» (US5758352A) истек в 2019 году, что может означать, что срок действия патента истек полностью.[9]

Технический обзор

Название файловой системы происходит от того, что файловая система часто использует индексную таблицу, Таблица размещения файлов, статически размещенный во время форматирования. Таблица содержит записи для каждого кластер, непрерывная область дискового хранилища. Каждая запись содержит либо номер следующего кластера в файле, либо маркер, указывающий конец файла, неиспользуемое дисковое пространство или специальные зарезервированные области диска. В корневая директория диска содержит номер первого кластера каждого файла в этом каталоге; затем операционная система может просмотреть таблицу FAT и найти номер кластера каждой последующей части файла на диске в виде цепочка кластеров пока не будет достигнут конец файла. Во многом таким же образом, подкаталоги реализованы в виде специальных файлов, содержащих записи каталога соответствующих файлов.

Первоначально разработанная как 8-битная файловая система, максимальное количество кластеров было значительно увеличено по мере развития дисковых накопителей, и поэтому количество битов, используемых для идентификации каждого кластера, увеличилось. Последовательные основные версии формата FAT названы по количеству битов элемента таблицы: 12 (FAT12 ), 16 (FAT16 ) и 32 (FAT32 ). Кроме оригинала 8-битный FAT предшественник, каждый из этих вариантов все еще используется. Стандарт FAT также был расширен другими способами, при этом в целом сохранена обратная совместимость с существующим программным обеспечением.

Макет

Обзор порядка структур в разделе FAT или на диске
Область, крайРазмер в секторахСодержание
Зарезервированные секторы(количество зарезервированные секторы )Загрузочный сектор
Информационный сектор ФС (Только FAT32)
Больше зарезервированных секторов (необязательно)
FAT регион(количество FAT) * (секторов на FAT)Таблица размещения файлов #1
Таблица размещения файлов №2 ... (необязательно)
Регион корневой директории(количество корневых записей * 32) / (байтов на сектор)Корень Каталог (Только FAT12 и FAT16)
Область данных(количество кластеров) * (секторов в кластере)Область данных (для файлов и каталогов) ... (до конца раздела или диска)

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

Зарезервированные секторы
Первый зарезервированный сектор (логический сектор 0) - это Загрузочный сектор (также называемый Объем загрузочной записи или просто VBR). Он включает область, называемую Блок параметров BIOS (BPB), который содержит некоторую базовую информацию о файловой системе, в частности ее тип и указатели на расположение других разделов, и обычно содержит информацию об операционной системе загрузчик код.
Важная информация из загрузочного сектора доступна через структуру операционной системы, называемую Блок параметров привода (DPB) в DOS и OS / 2.
Общее количество зарезервированных секторов указано в поле внутри загрузочного сектора и обычно составляет 32 в файловых системах FAT32.[10]
Для файловых систем FAT32 зарезервированные секторы включают Сектор информации файловой системы в логическом секторе 1 и Резервный загрузочный сектор в логическом секторе 6.
В то время как многие другие поставщики продолжали использовать односекторную настройку (только логический сектор 0) для загрузчика начальной загрузки, код загрузочного сектора Microsoft с момента введения FAT32 расширился и теперь охватывает логические сектора 0 и 2, причем логический сектор 0 зависит от подпрограммы в логическом секторе 2. Область резервного загрузочного сектора также состоит из трех логических секторов 6, 7 и 8. В некоторых случаях Microsoft также использует сектор 12 области зарезервированных секторов для расширенного загрузчика.
FAT регион
Обычно он содержит две копии Таблица размещения файлов для проверки избыточности, хотя и редко используется, даже утилитами восстановления дисков.
Это карты области данных, указывающие, какие кластеры используются файлами и каталогами. В FAT12 и FAT16 они сразу следуют за зарезервированными секторами.
Обычно дополнительные копии хранятся в жесткой синхронизации при записи, а при чтении они используются только при возникновении ошибок в первой FAT.
Первые два кластера (кластер 0 и 1 ) на карте содержат специальные значения.
Регион корневой директории
Это Таблица каталогов в котором хранится информация о файлах и каталогах, расположенных в корневом каталоге. Он используется только с FAT12 и FAT16 и устанавливает для корневого каталога фиксированный максимальный размер, который заранее выделяется при создании этого тома. FAT32 хранит корневой каталог в области данных вместе с файлами и другими каталогами, что позволяет ему расти без таких ограничений. Таким образом, для FAT32 область данных начинается здесь.
Область данных
Здесь хранятся фактические данные файла и каталога, которые занимают большую часть раздела. Традиционно неиспользуемые части области данных инициализируются значением заполнителя 0xF6 согласно INT 1Eh's Таблица параметров диска (DPT) во время форматирования на IBM-совместимых машинах, но также используется на Портфолио Atari. 8-дюймовые дискеты CP / M обычно поставлялись предварительно отформатированными со значением 0xE5;[11] посредством цифровых исследований[12] это значение также использовалось на Atari ST форматированные дискеты.[nb 1] Амстрад использовал 0xF4 вместо. Некоторые современные форматеры стирают жесткие диски со значением 0x00, тогда как значение 0xFF, значение по умолчанию для незапрограммированного блока флэш-памяти, используется на флэш-дисках для уменьшения носить. Последнее значение обычно также используется на дисках ROM. (Некоторые расширенные инструменты форматирования позволяют настроить байт-заполнитель формата.[nb 2])
Размер файлов и подкаталогов можно произвольно увеличивать (до тех пор, пока есть свободные кластеры), просто добавляя дополнительные ссылки в цепочку файлов в FAT. Файлы распределяются в единицах кластеров, поэтому, если 1 КБ файл находится в 32 КБ кластер 31 КБ потрачены впустую.
FAT32 обычно начинает таблицу корневого каталога в кластере номер 2: первом кластере области данных.

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

Площадь зарезервированных секторов

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

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

Общая структура первых 11 байтов, используемых большинством версий FAT для IBM-совместимых x86-машин, начиная с DOS 2.0:

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

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

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

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

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

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

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

Загрузочное ПЗУ Ван профессиональный компьютер будет считать диск загрузочным только в том случае, если первые четыре символа метки OEM - "Ван". Точно так же ПЗУ BIOS Philips: ДА будет загружаться с диска только в том случае, если первые четыре символа метки OEM - ":ДА".

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

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

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 байта скрытые сектора для томов, расположенных за пределами первых 232-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).[10][№ 4] Эта подпись указывает на загрузочный код, совместимый с IBM PC, и проверяется большинством загрузчиков, находящихся в системной BIOS или MBR, перед передачей выполнения в загрузочный код загрузочного сектора (но, например, не исходной IBM PC ROM-BIOS[23]). Эта подпись не указывает на конкретную файловую систему или операционную систему. Поскольку эта подпись присутствует не на всех дисках с форматированием FAT (например, не на DOS 1.x)[15][16] или тома FAT, не предназначенные для загрузки x86), операционные системы не должны полагаться на наличие этой подписи при входе в тома (старые выпуски MS-DOS / PC DOS до 3.3 проверяли эту подпись, но более новые проблемы, а также DR- DOS нет). Инструменты форматирования не должны записывать эту подпись, если записанный загрузочный сектор не содержит хотя бы x86-совместимой фиктивной заглушки загрузчика; как минимум, он должен останавливать процессор в бесконечном цикле (0xF4 0xEB 0xFD) или оформить ИНТ 19ч и RETF (0xCD 0x19 0xCB). Эти opstrings не должны использоваться при смещении сектора 0x000однако, потому что DOS проверяет другие коды операций как сигнатуры. Многие дискеты MSX-DOS 2 используют 0xEB 0xFE 0x90 при смещении сектора 0x000 чтобы поймать процессор в замкнутом цикле, сохраняя шаблон кода операции, распознаваемый MS-DOS / PC DOS.

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

Atari ST будет считать диск Atari 68000 загрузочный, если контрольная сумма больше 256 прямой порядок байтов слова загрузочного сектора равны 0x1234.[24][№ 5] Если код загрузчика совместим с IBM, важно убедиться, что контрольная сумма в загрузочном секторе не совпадает с этой контрольной суммой случайно. Если это произойдет, можно использовать изменение неиспользуемого бита (например, до или после области загрузочного кода), чтобы гарантировать, что это условие не выполняется.

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

В формате FAT Atari ST У дискет очень похожая структура загрузочного сектора:

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

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

В формате FAT12 MSX-DOS тома имеют очень похожую структуру загрузочного сектора:

Смещение байтаДлина (байты)Содержание
0x0003Инструкция по прыжку-пустышке (например, 0xEB 0xFE 0x90).
0x0038OEM-имя (заполнено пробелами 0x20).
0x00B19DOS 3.0 BPB
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. Если "VOL_ID"подпись присутствует на смещении сектора 0x020, этот флаг указывает, содержит ли том удаленные файлы, которые можно восстановить (см. смещение 0x0C в записях каталога).
0x0274Серийный номер диска MSX-DOS 2 (по умолчанию: 0x00000000). Если "VOL_ID"подпись присутствует на смещении сектора 0x020, MSX-DOS 2 сохраняет здесь серийный номер тома для обнаружения смены носителя.
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 с количеством логических секторов до 65535 составляет 32 байта или 64 байта для более чем 65535 логических секторов. Минимальное практическое значение - 128. Некоторые OEM-версии DOS до DOS 3.31 использовали размер логических секторов до 8192 байтов для логические секторные FAT. Atari ST GEMDOS поддерживает размеры логических секторов от 512 до 4096.[24] DR-DOS поддерживает загрузку с томов FAT12 / FAT16 с размером логических секторов до 32 КБ и реализаций INT 13h, поддерживающих физические секторы размером до 1024 байт / сектор.[№ 6]Минимальный размер логического сектора для стандартных томов FAT32 составляет 512 байтов, который может быть уменьшен до 128 байтов без поддержки Информационный сектор ФС.

Дисководы и контроллеры используют физические сектора размером 128, 256, 512 и 1024 байта (например, PC / AX). В Портфолио Atari поддерживает размер сектора 512 для томов размером более 64 КБ, 256 байтов для томов размером более 32 КБ и 128 байтов для томов меньшего размера. Магнитооптические приводы использовались размеры секторов 512, 1024 и 2048 байт. В 2005 году некоторые Seagate пользовательские жесткие диски использовали размер сектора 1024 байта вместо 512 байтов по умолчанию.[25] Расширенный формат жесткие диски используют 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, такие как ПТС-ДОС полностью поддерживает кластеры размером 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.[26]

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

Поскольку тома, отформатированные в DR-DOS 7.0x FAT32, используют односекторный загрузочный сектор, информационный сектор FS и резервный сектор, некоторые тома, отформатированные под 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.[27] Однако это расширение не поддерживается основными операционными системами.[27] поскольку это может противоречить другим видам использования записи кластера 1 для флагов обслуживания, текущего маркера конца цепочки или TFAT расширения.

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

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

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

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

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

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

DOS 3.0 BPB:

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

Смещение сектораСмещение BPBДлина (байты)Содержание
0x00B0x0013DOS 2.0 BPB
0x0180x0D2Физических секторов на дорожку для дисков с ИНТ 13ч Геометрия ЧС,[10] например, 15 для дискеты размером 1,20 МБ (1200 КБ).

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

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

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

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

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

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

DOS 3.2 BPB:

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

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

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

DOS 3.31 BPB:

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

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

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

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

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

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

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

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

(Немного GPT загрузчики (например, BootDuet) использовать смещения загрузочного сектора 0x1FA0x1FD для хранения старших 4 байтов значения 64-битных скрытых секторов для томов, расположенных за пределами первых 232−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 (232−1) предел (например, некоторые DR-DOS тома с 32-битными записями кластера) могут использовать 64-битную запись со смещением 0x052 вместо.

Простая формула переводит данный номер кластера тома CN на логический номер сектора LSN:[5][6][7]

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

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

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

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

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

Смещение сектораEBPB смещениеДлина (байты)Содержание
0x00B0x0025DOS 3.31 BPB
0x0240x191Номер физического диска (0x00 для (первого) съемного носителя, 0x80 для (первого) фиксированного диска согласно ИНТ 13ч ). Допустимые значения для возможных физических дисков в зависимости от BIOS: 0x00-0x7E и 0x80-0xFE. Значения 0x7F и 0xFF зарезервированы для внутренних целей, таких как удаленная загрузка или загрузка из ПЗУ, и никогда не должны выполняться на диске. Некоторые загрузчики, такие как загрузчик 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 загрузочный код, используемый как блокнот для ИНТ 13ч текущий старший байт для предполагаемого 16-битного слова при смещении 0x024. Некоторые загрузочные секторы DR-DOS FAT12 / FAT16 также используют эту запись в качестве блокнота, но для других целей.
  • VGACOPY хранит CRC через системный ROM-BIOS в этом месте.
  • Некоторые менеджеры загрузки используют эту запись для передачи желаемой буквы диска, под которой должен создаваться том, в операционные системы, такие как OS / 2, путем установки бита 7 и указания номера диска в битах 6-0 (C: = значение 0, D: = значение 1, ...). Поскольку это обычно влияет только на образ загрузочного сектора в памяти, это не вызывает проблем совместимости с другими применениями;
  • В Windows NT используется для CHKDSK flags (биты 7-2 всегда сброшены, бит 1: обнаружены ошибки ввода-вывода диска, возможные поврежденные секторы, запустить сканирование поверхности при следующей загрузке, бит 0: том «грязный» и не был должным образом размонтирован перед выключением, запустите CHKDSK при следующей загрузке. ботинок).[34] Должен быть установлен на 0 инструментами форматирования.[5][6][7] См. Также: Bitflags в вторая запись кластера в FAT.
0x0260x1B1Расширенная загрузочная подпись. (Должно быть 0x29[5][6][7][28] чтобы указать, что существует 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 распознают обе подписи соответственно.)
0x0270x1C4ID тома (серийный номер)

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

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

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

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

0x0360x2B8Тип файловой системы, заполненный пробелами (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, а также EBPB DOS 4.0 для небольших томов FAT32. Поскольку было обнаружено, что такие тома создаются операционными системами Windows при некоторых необычных условиях,[№ 8] операционные системы должны быть готовы справиться с этими гибридными формами.

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

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

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

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

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

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

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

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

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

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

Ценности 0x0000[10] (и / или 0xFFFF[26]) зарезервированы и указывают на то, что резервный сектор недоступен.

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

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

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

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

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

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

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

Большинство реализаций файловой системы FAT32 не поддерживают альтернативную сигнатуру 0x28[22] для обозначения сокращенной формы 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 (232-1) секторов (например, некоторые DR-DOS тома с 32-битными записями кластера) могут использовать эту запись как 64-битные общие логические секторы запись вместо этого. В этом случае метка OEM со смещением сектора 0x003 может быть получен как новый стиль тип файловой системы вместо.

Исключения

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

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

FAT ID (сравнить с идентификатор СМИ с зачетом BPB 0x0A)[29][30]0xFF0xFE0xFD0xFC0xFB0xFA0xF90xF80xF00xED0xE5
Размер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"
Плотность?DD 48tpiSDDDDD 48tpiSDSDDD 48tpiDD 48tpi??HD 96 точек на дюймDD 135tpiHD 135 точек на дюймQD 96tpi?DDHD 135 точек на дюймEDQD 96tpiSD
Модуляция?MFMFMMFMMFMFMFMMFMMFMMFMMFMMFMMFMMFMMFMMFMMFMMFMMFMMFMFM
Форматированная емкость (КБ)?320250 («старый»)[32][36]1200160250 («новый»)[32][36]5003601806403201200720144072036036014402880720243 / 250
Цилиндры (CHS)774077774077774040808080808080808080808077
Физические секторы / дорожка
(Смещение BPB 0x0D)
?8268826269988159189 (8[35])9918369 (8[35])26
Количество голов
(Смещение BPB 0x0F)
?21[32][36]2[14][29][36] (1)11[14][32][36]2[29]21212222112221
Байт полезной нагрузки / физический сектор?5121281024512128128512512512512512512512512512512512512512128
Байт / логический сектор
(Смещение BPB 0x00)
?5121281024512128128512512512512512512512512512512512512512128
Логические секторы / кластер
(Смещение BPB 0x02)
?2411442121[29] (2?[14])121?2?12?4
Зарезервированные логические секторы
(Смещение BPB 0x03)
?11[32][36]114[32][36]4111111 (2)111111?1
Количество жировых отложений
(Смещение 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[32][36]1232[29][36] (616[14])3202002[14][32][36]4004[29]7203601280640240014402880?720?28805760?2002
Логические секторы / FAT
(Смещение BPB 0x0B)
?16[32][36]216[32][36]6?[29]2222[29] (1?[14])739 (7)?2?99?1
Скрытые сектора
(Смещение BPB 0x11)
?03[29] (0[14])0000000000000000?0
Общее количество кластеров?3154971227313?997?[29]354351??23717132847????28472863??
Логический порядок секторов?????????????????????
Отображение секторов?
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
?
сектор + дорожка +
сектор + дорожка +
сектор + голова + дорожка +
сектор + голова + дорожка +
?
сектор + дорожка +
Первый физический сектор (CHS)?11111111??111?1?11?1
DRIVER.SYS / F: n?0340?300??127???79?3
Наличие BPB???????????дадада???дада??
Поддерживать?
DOS 1.1[36]
DOS 1.0[32][36]
DOS 2.0
DOS 1.0[36]
?[32][36]
DOS 2.0
DOS 2.0
DOS 2.0
??
DOS 3.0
DOS 3.2
Только DOS 3.2;
(DR-DOS)
Sanyo 55x
Только DS-DOS 2.11
MS-DOS 3.1[14]
MSX-DOS
DOS 3.3
DOS 5.0
Только Tandy 2000
Только DR-DOS

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

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

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

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

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

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

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

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 начинается с байта Media / FAT ID 0xFA. Неформатированные диски используют 0xE5 вместо. Файловая система начинается на дорожке 2, сторона 0, сектор 1. В корневом каталоге есть 2 копии FAT и 96 записей. Кроме того, существует отображение физических и логических дорожек для осуществления перемежения секторов 2: 1. Диски были отформатированы с физическими секторами в порядке пронумерованных от 1 до 10 на каждой дорожке после зарезервированных дорожек, но логические сектора от 1 до 10 были сохранены в физических секторах 1, 6, 2, 7, 3, 8, 4, 9. , 5, 10.[41]

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример начала таблицы FAT12 с несколькими цепочками кластеров
Компенсировать+0+1+2+3+4+5+6+7+8+9+ А+ B+ C+ D+ E+ F
+0000F0FFFF034000056000078000FFАF0014
+0010C0000DE0000F000111F 0FF00F0FF1560
+0020011970FFF7АF01FF0F000070FF000000

  • 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+ А+ B+ C+ D+ E+ F
+0000F0FFFFFF030004000500060007000800
+0010FFFF0A0014000C000D000E000F001000
+00201100FFFF0000FFFF150016001900F7FF
+0030F7FF00FFFF00000000F7FF00000000

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

Пример начала таблицы FAT32 с несколькими цепочками кластеров
Компенсировать+0+1+2+3+4+5+6+7+8+9+ А+ B+ C+ D+ E+ F
+0000F0FFFF0FFFFFFF0FFFFFFF0F04000000
+001005000000060000000700000008000000
+0020FFFFFF0F0A000000140000000C000000
+00300D0000000E0000000F00000010000000
+004011000000FFFFFF0F00000000FFFFFF0F
+0050150000001600000019000000F7FFFF0F
+0060F7FFFF0F000000FFFFFF0F00000000
+007000000000F7FFFF0F0000000000000000

  • Первая цепочка (1 кластер) для корневого каталога, на которую указывает запись в FAT32 BPB (здесь: # 2)
  • Вторая цепочка (6 кластеров) для нефрагментированного файла (здесь: # 3, # 4, # 5, # 6, # 7, # 8)

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

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

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

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

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

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

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

Начиная с DOS 7.1, два старших бита этой записи кластера могут содержать два дополнительных битовых флага, представляющих текущий статус тома в FAT16 и FAT32, но не в томах FAT12. Эти битовые флаги поддерживаются не всеми операционными системами, но операционные системы, поддерживающие эту функцию, будут устанавливать эти биты при завершении работы и сбрасывать наиболее значимый бит при запуске:
Если бит 15 (в FAT16) или бит 27 (в FAT32)[44] не установлен при установке тома, том не был должным образом размонтирован перед выключением или извлечением и, следовательно, находится в неизвестном и, возможно, «грязном» состоянии.[31] На томах FAT32 Информационный сектор ФС могут содержать устаревшие данные и поэтому не должны использоваться. Операционная система обычно запускается СКАНДИСК или же CHKDSK при следующем запуске[№ 10][44] (но не при установке съемного носителя), чтобы гарантировать и, возможно, восстановить целостность тома.
Если бит 14 (в FAT16) или бит 26 (в FAT32)[44] очищается, операционная система обнаружила ошибки дискового ввода-вывода при запуске,[44] возможное указание на плохие сектора. Операционные системы, осведомленные об этом расширении, будут интерпретировать это как рекомендацию выполнить сканирование поверхности (СКАНДИСК ) при следующей загрузке.[31][44] (Аналогичный набор битовых флагов существует в EBPB FAT12 / FAT16 по смещению 0x1A или FAT32 EBPB по смещению 0x36. В то время как запись кластера 1 может быть доступна драйверам файловой системы после монтирования тома, запись EBPB доступна, даже если том не смонтирован, и, таким образом, ее проще использовать драйверам блочных устройств или инструментам разбиения на разделы.)

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

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

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

Кластерные ценности

Значения записи FAT:

FAT12FAT16FAT32Описание
0x0000x00000x? 0000000Бесплатный кластер; также используется DOS для ссылки на родительский каталог, запускающий кластер в записях ".." подкаталогов корневого каталога на томах FAT12 / FAT16.[11][13]

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

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

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

0x002 - 0xFEF0x0002 - 0xFFEF (0x0002 - 0x7FFF)0x? 0000002 - 0x? FFFFFEFИспользуется как кластеры данных; значение указывает на следующий кластер. MS-DOS / PC DOS принимают значения до 0xFEF / 0xFFEF / 0x0FFFFFEF (иногда больше; см. ниже), тогда как для Atari GEMDOS только значения до 0x7FFF разрешены на томах FAT16.
0xFF0[№ 11] - 0xFF5 (0xFF1 - 0xFF5)0xFFF0 - 0xFFF50x? FFFFFF0 - 0x? FFFFFF5Зарезервировано в некоторых случаях,[45] или также используется[5][6][7][10][46] как кластеры данных в некоторых нестандартных системах. Следует избегать размеров томов, которые используют эти значения в качестве кластеров данных, но если эти значения встречаются в существующих томах, файловая система должна рассматривать их как обычные кластеры данных в цепочках кластеров (в идеале с применением дополнительных проверок работоспособности), аналогично тому, что MS- DOS, PC DOS и DR-DOS делают,[13] и в противном случае следует избегать выделения их для файлов.

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

0xFF60xFFF60x? FFFFFF6Зарезервированный; не использовать.[5][6][7][10][28][46] (NB. Соответствует значению заполнителя формата по умолчанию 0xF6 на IBM-совместимых машинах.) Не следует создавать тома, которые использовали бы это значение в качестве кластера данных, но если это значение встречается в существующих томах, файловая система должна рассматривать его как обычный кластер данных в цепочках кластеров (в идеале с применением дополнительных проверок работоспособности) , и в противном случае следует избегать выделения его для файлов.[14]
0xFF70xFFF70x? FFFFFF7Плохой сектор в кластере или зарезервированный кластер (начиная с DOS 2.0).

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

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

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

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

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

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

Варианты FAT12, FAT16, FAT16B и FAT32 файловых систем FAT имеют четкие ограничения, основанные на количестве кластеров и количестве секторов в кластере (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 до 65 524 кластеров: от 16 до 256 секторов на копию FAT
Диапазон FAT32: от 65 525 до 268 435 444 кластера: от 512 до 2097 152 секторов на копию FAT

Минимум FAT12: 1 сектор на кластер × 1 кластер = 512 байт (0,5 КБ)
Минимум FAT16: 1 сектор на кластер × 4085 кластеров = 2091520 байт (2042,5 КБ)
Минимум FAT32: 1 сектор на кластер × 65 525 кластеров = 33 548 800 байт (32 762,5 КБ)

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

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

Максимум FAT32: 8 секторов на кластер × 268 435 444 кластера = 1099 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 не используется.[37] Аналогично 65524 + 3 - это 0xFFF7 для FAT16, а 4084 + 3 - 0xFF7 для FAT12. Количество секторов в кластере - это степень двойки, подходящая для одного байта, наименьшее значение - 1 (0x01), наибольшее значение 128 (0x80). Строки в квадратных скобках указывают на необычный размер кластера 128, а для FAT32 размер кластера больше необходимого 32 или 64.[48]

Поскольку каждая запись 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 байтов перед первым ненужным FAT16B 32 -битное количество скрытых секторов, это оставляет три байта для (на RAM-диске неиспользуемого) загрузочного кода и магического 0x55 0xAA в конце всех загрузочных секторов. На Windows NT наименьший поддерживаемый размер сектора - 128.

На Windows NT операционные системы ФОРМАТ параметры команды / A: 128 КБ и / A: 256 КБ соответствуют максимальному размеру кластера 0x80 (128) с размером сектора 1024 и 2048 соответственно. Для общего размера сектора 512 / A: 64 КБ дает 128 секторов на кластер.

Обе версии каждого ECMA-107[5] и ISO / IEC 9293[6][7] указать Максимальное количество кластеров МАКСИМУМ определяется по формуле МАКС = 1 + усечение ((TS-SSA)/SC), и резервные номера кластеров МАКС + 1 до 4086 (0xFF6, FAT12) и более поздние 65526 ​​(0xFFF6, FAT16) для будущей стандартизации.

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

Первый кластер данных - 2,[37] и, следовательно, последний кластер МАКСИМУМ получает номер МАКС + 1. Это приводит к номерам кластеров данных 2 ... 4085 (0xFF5) для FAT12, 2 ... 65525 (0xFFF5) для FAT16 и 2 ... 268435445 (0x0FFFFFF5) для FAT32.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • " * / : < > ? \ |
    Windows / MS-DOS не имеет оболочки escape-символ
  • + , . ; = [ ]
    Допускается только в длинных именах файлов
  • Строчные буквы аz
    Хранится как АZ; разрешено в длинных именах файлов
  • Управляющие символы 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". Операционная система отключит один[54] (а также две - начиная с DR-DOS 7.02) точки с запятой и ожидающие пароли от имен файлов перед сохранением их на диске. (Командный процессор 4ДОС использует точки с запятой для списков включения и требует, чтобы точка с запятой удваивалась для файлов, защищенных паролем, с любыми командами, поддерживающими подстановочные знаки.[54])

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

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

В операционных системах 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.[№ 12][56][57][58])
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Запись была ранее удалена и / или доступна.[№ 12][56][57][58] Файл восстановить утилиты должны заменить этот символ обычным символом как часть процесса восстановления. Смотрите также: 0x05.

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

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

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

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

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

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

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

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

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

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

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

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

0x0C1
  • CP / M-86 и DOS Plus хранить здесь пользовательские атрибуты F1' — F4 '.[59] (DOS Plus 1.2 с BDOS 4.1 поддерживает пароли только на носителях CP / M, но не на носителях FAT12 или FAT16.[60] Хотя DOS Plus 2.1 поддерживается логические секторные FAT с типом перегородки 0xF2, Тома FAT16B и FAT32 не поддерживались этими операционными системами. Даже если бы раздел был преобразован в FAT16B, он все равно не был бы больше 32 МБ. Следовательно, такое использование не противоречит FAT32.IFS, FAT16 + или FAT32 +, поскольку они никогда не могут иметь место на томе того же типа.):
КусочекМаскаОписание
70x80F1 ': изменить правила открытия по умолчанию[54]
60x40F2 ': частичное закрытие по умолчанию[54]
50x20F3 ': игнорировать ошибку контрольной суммы закрытия[54]
40x10F4 ': отключить контрольные суммы[54]
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.[61]
  • DR-DOS 7.0x зарезервировал биты, отличные от 3 и 4, для внутренних целей с 1997 года. Значение должно быть установлено на 0 с помощью инструментов форматирования и не должно изменяться с помощью дисковых инструментов.[54]
  • На томах FAT32 под OS / 2 и eComStation сторонний драйвер FAT32.IFS использует эту запись в качестве байта отметки, чтобы указать наличие дополнительных "␠EA.␠SF"файлы, содержащие расширенные атрибуты с параметром / EAS. Версии от 0.70 до 0.96 использовали магические значения 0x00 (без советников), 0xEA (обычные советники) и 0xEC (критические советники),[62] тогда как версия 0.97 и выше с 2003-09 используют 0x00, 0x40 (обычные советники) и 0x80 (критические советники) как битовые флаги для совместимости с Windows NT.[63][64]
0x0D1
  • Первый символ удаленного файла в Novell DOS, OpenDOS и DR-DOS 7.02 и выше. Ценность 0xE5 (229), как установлено DELPURGE, запретит восстановление с помощью UNDELETE, значение 0x00 позволит обычное восстановление с запросом у пользователя пропущенного первого символа имени файла.[54] S / DOS 1 и PTS-DOS 6.51 и выше также поддерживают эту функцию, если она включена с SAVENAME = ВКЛ в CONFIG.SYS. Для той же функции в MSX-DOS см. Смещение 0x0C.
  • Время создания, точное разрешение: единицы 10 мс, значения от 0 до 199 (начиная с DOS 7.0 с VFAT).

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

0x0E2
  • Под DR DOS 3.31 и выше, включая PalmDOS, Novell DOS и OpenDOS[59] а также в Concurrent DOS, Multiuser DOS, System Manager и REAL / 32 и, возможно, также в FlexOS, 4680 OS, 4690 OS любое ненулевое значение указывает хэш пароля защищенного файла, каталога или метки тома.[54] Хеш рассчитывается из первых восьми символов пароля. Если для выполняемой файловой операции требуется пароль в соответствии с битовой картой прав доступа, хранящейся по смещению 0x14, система пытается сопоставить хэш с хеш-кодом текущего установленного глобального пароля ( ПАРОЛЬ / G) или, если это не удается, пытается извлечь пароль с точкой с запятой из спецификации файла, переданной в операционную систему, и сверяет его с хэш-кодом, хранящимся здесь. Установленный пароль будет сохранен, даже если файл будет удален, а затем восстановлен.[54]
  • Время создания (начиная с 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 ОС и 4690 ОС сохранить размер записи в слове при вводе 0x10.[59] Это в основном используется для их специальных типы файлов, подобные базе данных случайный файл, прямой файл, ключевой файл, и последовательный файл. Если размер записи установлен на 0 (по умолчанию) или 1, операционные системы предполагают, что гранулярность записи для файла составляет 1 байт, для которого не будут выполняться проверки границ записи в операциях чтения / записи.[65]
  • В DELWATCH 2.00 и выше в Novell DOS 7, OpenDOS 7.01 и DR-DOS 7.02 и выше эта запись используется для хранения последней измененной отметки времени для ожидающих удаления файлов и каталогов.[54][59] Снимается при восстановлении или удалении файла. См. Смещение 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 и выше с включенной многопользовательской безопасностью используйте это поле для хранения идентификаторов владельцев.[54] Компенсировать 0x12 содержит идентификатор пользователя, 0x13 идентификатор группы создателя файла.[59]
В многопользовательских версиях доступ к системе требует входа в систему с именем учетной записи и паролем, и система назначает идентификаторы групп и пользователей запущенным приложениям в соответствии с ранее настроенной и сохраненной информацией авторизации и правилами наследования. Для ОС 4680 и 4690 идентификатор группы 1 зарезервирован для системы, идентификатор группы 2 - для поставщика, идентификатор группы 3 - для группы пользователей по умолчанию. Фоновые приложения, запускаемые пользователями, имеют идентификатор группы 2 и идентификатор пользователя 1, тогда как фоновые задачи операционной системы имеют идентификаторы группы 1 или 0 и идентификаторы пользователей 1 или 0. IBM 4680 ОСНОВНОЙ а приложения, запущенные как первичные или вторичные, всегда получают ID группы 2 и ID пользователя 1. Когда приложения создают файлы, система сохраняет их ID пользователя и ID группы, а также необходимые разрешения с файлом.[65]
  • В DELWATCH 2.00 и выше в Novell DOS 7, OpenDOS 7.01 и DR-DOS 7.02 и выше эта запись используется для сохранения отметки даты последнего изменения для ожидающих удаления файлов и каталогов.[54][59] Снимается при восстановлении или удалении файла. См. Смещение 0x10 для формата описание.
  • Дата последнего доступа (начиная с DOS 7.0, если ACCDATE включен в CONFIG.SYS для соответствующего диска);[2][54] см. смещение 0x10 для формата описание.

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

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

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

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

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

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

0x1C4Размер файла в байтах. Записи с установленным флагом Метка тома или Поддиректория должны иметь размер 0.

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

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

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

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

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

Длинные имена файлов 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 году.[70][71]

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

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

После последнего UCS-2 персонаж, а 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)
0x1C4Именные персонажи (два UCS-2 символы)

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

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

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

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

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

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

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

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

Примечания

  1. ^ а б Это причина, почему 0xE5 имел особое значение в записях каталога.
  2. ^ а б c Одной из утилит, предоставляющих возможность указать желаемое значение заполнения формата для жестких дисков, является DR-DOS FDISK R2.31 с дополнительным параметром очистки. / Вт: 246. В отличие от других FDISK Утилиты DR-DOS FDISK - это не только инструмент для создания разделов, но также может форматировать только что созданные разделы как FAT12, FAT16 или же FAT32. Это снижает риск случайного форматирования неправильных томов.
  3. ^ а б c Для максимальной совместимости с 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).
  4. ^ а б c d е Подпись при зачете 0x1FE в загрузочных секторах есть 0x55 0xAA, то есть 0x55 по смещению 0x1FE и 0xAA по смещению 0x1FF. С прямой порядок байтов представление должно рассматриваться в контексте IBM PC совместимые машины, это можно записать как 16-битное слово 0xAA55 в программах для x86 процессоров (обратите внимание на порядок замены), тогда как это должно быть записано как 0x55AA в программах для других архитектур ЦП с использованием прямой порядок байтов представление. Поскольку это много раз было перепутано в книгах и даже в исходных справочных документах Microsoft, в этой статье используется побайтовое представление на диске на основе смещения, чтобы избежать любой возможной неверной интерпретации.
  5. ^ а б c В контрольная сумма вход в Atari загрузочные секторы содержат значение выравнивания, а не магическая ценность сам. Магическая ценность 0x1234 нигде на диске не хранится. В отличие от Intel x86 процессоры, Motorola 680x0 процессоры, используемые в машинах Atari, используют прямой порядок байтов представление памяти и, следовательно, представление с прямым порядком байтов следует учитывать при вычислении контрольной суммы. Как следствие этого, для кода проверки контрольной суммы, запущенного на машинах x86, пары байтов должны быть заменены местами перед 16-битным сложением.
  6. ^ DR-DOS может загружаться с логических секторных носителей FAT12 / FAT16 с размером логического сектора до 1024 байтов.
  7. ^ а б Следующие функции 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).
  8. ^ Было замечено, что Windows XP создает такие гибридные диски при переформатировании дисков ZIP-100, отформатированных с FAT16B, в формат FAT32. Полученные тома были FAT32 по формату, но по-прежнему использовали FAT16B EBPB. (Непонятно, как Windows определяет расположение корневого каталога на томах FAT32, если использовалась только FAT16 EBPB.)
  9. ^ Для поддержки сосуществования DR-DOS с PC DOS и нескольких параллельных установок DR-DOS расширение по умолчанию "IBMBIO␠␠COM"имя загрузочного файла можно изменить с помощью SYS / DR: доб. option, где ext представляет новое расширение. Другие потенциальные имена файлов загрузки DR-DOS, которые можно ожидать в особых сценариях: "DRBIOS␠␠SYS", "DRDOS␠␠␠SYS", "IO␠␠␠␠␠␠SYS", "JO␠␠␠␠␠␠SYS".
  10. ^ Если флаг грязного завершения работы тома по-прежнему сброшен при запуске, том не был правильно размонтирован. Это, например, приведет к запуску Windows 98 WIN.COM. СКАНДИСК для проверки и исправления потенциальных ошибок логической файловой системы. Если флаг сбойного сектора сброшен, то также будет выполнено сканирование поверхности. Это можно отключить, установив AUTOSCAN = 0 в разделе [OPTIONS] в MSDOS.SYS файл.
  11. ^ а б c d См. Другие ссылки, чтобы узнать о специальных мерах предосторожности в отношении появления кластерного значения 0xFF0 на томах FAT12 под MS-DOS / PC DOS 3.3 и выше.
  12. ^ а б Некоторые версии ФОРМАТ поскольку MS-DOS 1.25 и ПК DOS 2.0 поддержал вариант / O (за Старый) чтобы заполнить первый байт из всех записи каталога с 0xE5 вместо использования маркера конца 0x00. Тем самым. том оставался доступным под ПК DOS 1.0 -1.1, в то время как форматирование заняло несколько больше времени, и новые версии DOS не могли воспользоваться преимуществом значительного ускорения, вызванного использованием маркера конца 0x00.
  13. ^ а б Во избежание потенциальной неверной интерпретации меток томов каталогов с записями VFAT LFN операционными системами, не поддерживающими VFAT, известно, что инструменты FDISK и FORMAT DR-DOS 7.07 явно пишут фиктивные "NO␠NAME␠␠␠␠"метки тома каталога, если пользователь пропускает ввод метки тома.Операционная система по умолчанию будет возвращать ту же строку, если метка тома каталога не может быть найдена в корне тома, но без реальной метки тома, сохраненной как первая запись (после записей каталога), более старые операционные системы могут ошибочно выбрать вместо этого используйте записи VFAT LFN.
  14. ^ Этот ОС IBM 4680 и 4690 ОС Тип атрибута распределения должен иметь битовое значение 0 на диске, поскольку файлы возвращаются к этому типу, когда атрибуты случайно теряются.

Рекомендации

  1. ^ «Файловые системы». Microsoft TechNet. 2001. Получено 2011-07-31.
  2. ^ а б Microsoft (15 ноября 2006 г.). Файл CONFIG.TXT на компакт-диске Windows 95 Статья 135481, Версия: 1.1, получена 2011-12-22: «Для каждого жесткого диска указывает, следует ли записывать дату последнего доступа к файлам. Даты последнего доступа отключаются для всех дисков при запуске компьютера в безопасном режиме, и по умолчанию не поддерживаются для гибких дисков. Синтаксис: ACCDATE = диск1 + | - [диск2 + | -] ..."
  3. ^ «Файловая система FAT (Windows Embedded CE 6.0)». Microsoft. 2010-01-06. Получено 2013-07-07.
  4. ^ а б JEIDA / JEITA / CIPA (2010). «Стандарт ассоциации продуктов для камеры и обработки изображений, CIPA DC-009-Translation-2010, Правило проектирования для файловой системы камеры: DCF версии 2.0 (издание 2010 г.)» (PDF). Архивировано из оригинал (PDF) в 2013-09-30. Получено 2011-04-13.
  5. ^ а б c d е ж грамм час я j k «Объем и файловая структура дисковых картриджей для обмена информацией». Стандарт ECMA-107 (2-е изд., Июнь 1995 г.). ECMA. 1995. Получено 2011-07-30.
  6. ^ а б c d е ж грамм час я j k «Информационные технологии - Объем и файловая структура дисковых картриджей для обмена информацией». ИСО / МЭК 9293: 1994. ISO каталог. 1994 г.. Получено 2012-01-06.
  7. ^ а б c d е ж грамм час я j k «Обработка информации - Объем и файловая структура гибких дисковых картриджей для обмена информацией». ISO 9293: 1987. ISO каталог. 1987 г.. Получено 2012-01-06.
  8. ^ Аарон Р. Рейнольдс, Деннис Р. Адлер, Ральф А. Липе, Рэй Д. Педризетти, Джеффри Т. Парсонс, Расипурам В. Арун (1998-05-26). «Общее пространство имен для длинных и коротких имен файлов». Патент США 5758352. Получено 2012-01-19.CS1 maint: несколько имен: список авторов (связь)
  9. ^ https://patents.google.com/patent/US5758352
  10. ^ а б c d е ж грамм час я j k л м п о «Спецификация файловой системы FAT32 инициативы Microsoft Extensible Firmware Initiative, FAT: общий обзор формата на диске». Microsoft. 2000-12-06. Получено 2011-07-03.
  11. ^ а б c d е Шульман, Эндрю; Браун, Ральф Д.; Макси, Дэвид; Michels, Raymond J .; Кайл, Джим (1994) [ноябрь 1993]. Недокументированная DOS: руководство программиста по зарезервированным функциям и структурам данных MS-DOS - расширено за счет включения MS-DOS 6, Novell DOS и Windows 3.1 (2-е изд.). Ридинг, Массачусетс: Эддисон Уэсли. п.11. ISBN  0-201-63287-X. ISBN  978-0-201-63287-3. (xviii + 856 + vi стр., 3,5-дюймовая дискета) Исправления: [1][2]
  12. ^ а б c d е Хааф, Вильфрид; Миддел, Франк (ноябрь 1987). «Daten auf Scheiben - File- und Diskettenstrukturen unter CP / M, MSDOS and TOS: Dateiverwaltung unter TOS». c't - магазин компьютерной техники. c't Kartei (на немецком языке). Vol. 1987 г. 11. Verlag Heinz Heise GmbH & Co. KG. С. 241–246 [246]. ISSN  0724-8679.
  13. ^ а б c d е ж грамм час я j k л м п о п Чаппелл, Джефф (январь 1994). Шульман, Эндрю; Педерсен, Аморетта (ред.). Внутреннее устройство DOS. Серия программирования Эндрю Шульман (1-е издание, 1-е изд.). Издательство Эддисон Уэсли. ISBN  978-0-201-60835-9. ISBN  0-201-60835-9. (xxvi + 738 + iv страницы, 3,5-дюймовые гибкие диски [3][4] ) Исправления: [5][6][7]
  14. ^ а б c d е ж грамм час я j k л м п о п q р s т ты v ш Руководство программы Microsoft MS-DOS 3.1 на английском языке [Справочное руководство программиста Microsoft MS-DOS 3.1 на английском языке]. München: 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. " (NB. В этой книге много ошибок.)
  15. ^ а б Дэниел Б. Седори. Загрузочный сектор IBM Personal Computer DOS Version 1.00 (1981). 2005-08-02 ([8] ).
  16. ^ а б Дэниел Б. Седори. Загрузочный сектор IBM Personal Computer DOS Version 1.10 (1982). 2005-07-29 ([9] ).
  17. ^ а б Кальдера (1997). Машиносчитываемый исходный код Caldera OpenDOS 7.01. Файл DISK.ASM в машиночитаемом исходном пакете показывает, что DR-DOS проверяет значение 0x69 также.
  18. ^ Пол, Матиас Р. (20 февраля 2002 г.). "Нужна DOS 6.22 (не OEM)". Группа новостейalt.msdos.programmer. В архиве из оригинала на 09.09.2017. Получено 2006-10-14.
  19. ^ Бас, Уолли (1994-02-14). "Размер кластера". Группа новостейcomp.os.msdos.programmer. В архиве из оригинала на 09.09.2017. Получено 2006-10-14.
  20. ^ а б c d е ж грамм час Дэйв Уильямс (1992). Технический справочник программиста для MSDOS и IBM PC. ДОСРЕФ, условно-бесплатная версия 01/12/1992. ISBN  1-878830-02-3. ([10], по состоянию на 08.01.2012). Комментарий: автор упоминает, что DOS 4.0 проверяет этикетку OEM, но отрицает, что DOS 3.2 также проверяет ее (хотя и проверяет).
  21. ^ Пол, Матиас Р. (2004-08-25). «НОВОЛТРК.РЕГ». www.drdos.org. Архивировано из оригинал на 2016-03-04. Получено 2011-12-17. [11]
  22. ^ а б «Устранение неполадок дисков и файловых систем». Microsoft TechNet. 2005-11-05. Получено 2014-06-15.
  23. ^ IBM (1983). Техническое справочное руководство IBM PC. Комментарий: Включает полный список исходного кода ROM BIOS исходного IBM PC.
  24. ^ а б c d Ханс-Дитер Янковски, Дитмар Рабич, Джулиан Ф. Решке (1992). Atari Profibuch ST-STE-TT. Sybex, 4-е издание, 12-я партия. ISBN  3-88745-888-5, ISBN  978-3-88745-888-1.
  25. ^ Seagate Technologies, «Переход к жестким дискам с сектором 4K в расширенном формате (архив: Wayback Machine @ Archive.org)», 2010 г. ([12] ).
  26. ^ а б c d Браун, Ральф Д. (2002-12-29). "Список прерываний x86". Получено 2011-10-14.
  27. ^ а б c d де Бойн Поллард, Джонатан (2010) [2006]. «Все о блоках параметров BIOS». Часто задаваемые ответы. Получено 2014-06-02.
  28. ^ а б c Справочник программиста Microsoft MS-DOS: версия 5.0. Пресса Microsoft. 1991 г. ISBN  1-55615-329-5.
  29. ^ а б c d е ж грамм час я j k «Стандартные форматы гибких дисков, поддерживаемые MS-DOS». Справка и поддержка Microsoft. 2003-05-12. Получено 2012-09-11.
  30. ^ а б c Microsoft (1987-07). Справочник программиста MS-DOS 3.3.
  31. ^ а б c Андрис Брауэр (2002-09-20). «Файловая система FAT». Получено 2011-10-16.
  32. ^ а б c d е ж грамм час я j k л м п о п q р Патерсон, Тим; Microsoft (19 декабря 2013 г.) [1983]. «Microsoft DOS V1.1 и V2.0: /msdos/v20source/SKELIO.TXT, /msdos/v20source/HRDDRV.ASM». Музей истории компьютеров, Microsoft. Получено 2014-03-25. (NB. Хотя издатели утверждают, что это будут MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Альтос MS-DOS 2.11 и TeleVideo для ПК DOS 2.11.)
  33. ^ а б c d е ж грамм час я j Збиковски, Марк; Аллен, Пол; Баллмер, Стив; Борман, Рувим; Борман, Роб; Батлер, Джон; Кэрролл, Чак; Чемберлен, Марк; Челл, Дэвид; Коли, Майк; Кортни, Майк; Драйфус, Майк; Дункан, Рэйчел; Экхардт, Курт; Эванс, Эрик; Фермер, Рик; Гейтс, Билл; Гири, Майкл; Гриффин, Боб; Хогарт, Дуг; Джонсон, Джеймс У .; Кермаани, Камель; Король, Адриан; Кох, Рид; Ландовски, Джеймс; Ларсон, Крис; Леннон, Томас; Липки, Дэн; Макдональд, Марк; МакКинни, Брюс; Мартин, Паскаль; Мазерс, Эстель; Мэтьюз, Боб; Мелин, Дэвид; Mergentime, Чарльз; Невин, Рэнди; Ньюэлл, Дэн; Ньюэлл, Тани; Норрис, Дэвид; О'Лири, Майк; О'Рир, Боб; Олссон, Майк; Остерман, Ларри; Остлинг, Ридж; Пай, Сунил; Патерсон, Тим; Перес, Гэри; Питерс, Крис; Петцольд, Чарльз; Поллок, Джон; Рейнольдс, Аарон; Рубин, Дэррил; Райан, Ральф; Шульмейстер, Карл; Шах, Раджен; Шоу, Барри; Коротко, Энтони; Сливка, Бен; Смирл, Джон; Стиллмейкер, Бетти; Стоддард, Джон; Тиллман, Деннис; Уиттен, Грег; Юнт, Натали; Зек, Стив (1988). «Технические советники». Энциклопедия MS-DOS: версии с 1.0 по 3.2. Дункан, Рэй; Боствик, Стив; Бургойн, Кейт; Байерс, Роберт А.; Хоган, Том; Кайл, Джим; Летвин, Гордон; Петцольд, Чарльз; Рабинович, Чип; Томлин, Джим; Уилтон, Ричард; Волвертон, Ван; Вонг, Уильям; Вудкок, Джоанна (Полностью переработанная ред.). Редмонд, Вашингтон, США: Microsoft Press. ISBN  1-55615-049-0. LCCN  87-21452. OCLC  16581341. (xix + 1570 страниц; 26 см) (NB. Это издание было опубликовано в 1988 году после обширной переработки отозванного первого издания 1986 года другим коллективом авторов. [13] )
  34. ^ а б «Подробное объяснение загрузочного сектора FAT». База знаний Microsoft. 2003-12-06. Получено 2011-10-16.
  35. ^ а б c Лай, Роберт С .; Группа Уэйта (1987). Написание драйверов устройств MS-DOS (2-е изд.). Эддисон Уэсли. ISBN  0-201-60837-5.
  36. ^ а б c d е ж грамм час я j k л м п о п q р s т Патерсон, Тим; Microsoft (19 декабря 2013 г.) [1983]. "Microsoft DOS V1.1 и V2.0: /msdos/v20source/DEVDRIV.txt". Музей истории компьютеров, Microsoft. Получено 2014-03-25. (NB. Хотя издатели утверждают, что это будут MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Альтос MS-DOS 2.11 и TeleVideo для ПК DOS 2.11.)
  37. ^ а б c d е Тим Патерсон (1983). "Взгляд изнутри на MS-DOS". Байт. Архивировано из оригинал на 2011-07-20. Получено 2011-07-18. Нумерация начинается с 2; первые два числа, 0 и 1, зарезервированы.
  38. ^ а б c d PORT-DOS - Руководство пользователя для Apricot Portable. Руководства пользователя, Великобритания ([14] ).
  39. ^ а б c d е Джон С. Эллиотт (1998). Форматы дисков DOSPLUS. ([15] ).
  40. ^ а б c d BBC Master 512. Компьютерные страницы BBC Yellow Pig ([16] ).
  41. ^ Корпорация цифрового оборудования. Rainbow 100 MS-DOS 2.01 Техническая документация Том 1 (QV025-GZ), Список BIOS операционной системы Microsoft MS-DOS (AA-X432A-TV), Универсальный дисковый драйвер, стр. 1-17. 1983 г.
  42. ^ «Подробное объяснение загрузочного сектора FAT». DEW Associates Corporation. 2002 г.. Получено 2011-10-16.
  43. ^ Дэниел Б. Седори. Подробные сведения о «флаге грязного выключения» в MS-Windows. 2001-12-04. ([17] ).
  44. ^ а б c d е «Пакет ресурсов Windows 98 - Глава 10 - Диски и файловые системы». Microsoft TechNet. 1998. Получено 2012-07-16.
  45. ^ Питер Нортон (1986). Внутри IBM PC, исправленная и расширенная, Брэди. ISBN  0-89303-583-1, п. 157.
  46. ^ а б c Андрис Брауэр. «FAT под Linux».
  47. ^ Андрис Брауэр (2002-09-20). "ТОЛСТЫЙ". Получено 2012-01-11.
  48. ^ «Ограничения файловой системы FAT32». База знаний Microsoft. 2007-03-26. Получено 2011-08-21. Кластеры не могут быть размером 64 килобайта или больше.
  49. ^ Дункан, Рэй (1989). «Цели разработки и внедрение новой высокопроизводительной файловой системы». Журнал Microsoft Systems. [NB. Этот конкретный текстовый файл содержит ряд ошибок распознавания текста; например, «Луч» - правильное имя автора; не «Рой», как показано в тексте.]
  50. ^ Чен, Раймонд (Июль 2006 г.). «Microsoft TechNet: краткая и неполная история FAT32». Журнал Microsoft TechNet.
  51. ^ а б Les Bell; Associates Pty Ltd (1996-09-02) [1990]. «Высокопроизводительная файловая система OS / 2». Советник по поддержке ПК. Архивировано из оригинал на 2014-03-01. Получено 2014-06-24.
  52. ^ а б Мосты, Дэн (февраль 1996 г.). «Внутри высокопроизводительной файловой системы - Часть 2/6: Введение». Significant Bits, Brisbug PC User Group Inc. Получено 2014-06-24.
  53. ^ а б c Сиэтлские компьютерные продукты (1981). "Приложение к SCP 86-DOS 1.0" (PDF). Получено 2013-03-10.
  54. ^ а б c d е ж грамм час я j k л м п о п q р s т ты v ш Икс у z аа ab ac объявление ае аф аг ах ай эй ак Пол, Матиас Р. (1997-07-30) [1994-05-01]. NWDOS-TIPs - Советы и приемы для Novell DOS 7, с подробностями, исправлениями и обходными путями Blick auf undokumentierte. MPDOSTIP. Выпуск 157 (на немецком языке) (3-е изд.). В архиве из оригинала от 05.11.2016. Получено 2012-01-11. (NB. NWDOSTIP.TXT - это комплексная работа над Novell DOS 7 и OpenDOS 7.01, включая описание многих недокументированных функций и внутренних компонентов. Он является частью еще более обширной коллекции автора MPDOSTIP.ZIP, поддерживаемой до 2001 года и распространенной в то время на многих сайтах. Предоставленная ссылка указывает на старую версию файла, преобразованную в HTML.) [18]
  55. ^ IBM. Руководство пользователя ОС 4690 Версия 5.2, Документ IBM SC30-4134-01, 2008-01-10 ([19] ).
  56. ^ а б Патерсон, Тим; Microsoft (19 декабря 2013 г.) [1983]. «Microsoft DOS V1.1 и V2.0: /msdos/v20source/FORMAT.TXT». Музей истории компьютеров, Microsoft. Получено 2014-03-25. (NB. Хотя издатели утверждают, что это будут MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Альтос MS-DOS 2.11 и TeleVideo для ПК DOS 2.11.)
  57. ^ а б Шустек, Лен (24.03.2014). «Ранний исходный код Microsoft MS-DOS». Самоцветы программного обеспечения: серия исторических исходных кодов Музея истории компьютеров. Получено 2014-03-29. (NB. Хотя автор утверждает, что это будут MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Альтос MS-DOS 2.11 и TeleVideo для ПК DOS 2.11.)
  58. ^ а б Левин, Рой (2014-03-25). «Microsoft делает исходный код MS-DOS и Word для Windows общедоступным». Официальный блог Microsoft. Архивировано из оригинал на 2014-03-28. Получено 2014-03-29. (NB. Хотя автор утверждает, что это будут MS-DOS 1.1 и 2.0, на самом деле это SCP MS-DOS 1.25 и смесь Альтос MS-DOS 2.11 и TeleVideo для ПК DOS 2.11.)
  59. ^ а б c d е ж грамм час я j k л м п о п q Кальдера (1997). Машиносчитываемый исходный код Caldera OpenDOS 7.01. Файл FDOS.EQU в машиночитаемом исходном комплекте имеет эквиваленты для соответствующих записей каталога.
  60. ^ Джон С. Эллиотт (1998). Форматы дисков CP / M 4.1. ([20] ): «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 не поддерживаются ».
  61. ^ а б vinDaci (6 января 1998 г.). "Спецификация длинного имени файла". Архивировано из оригинал на 2001-04-20. Получено 2007-03-13.
  62. ^ Хенк Келдер. FAT32.TXT для FAT32.IFS версии 0.74. («Архивная копия». Архивировано из оригинал на 2012-03-30. Получено 2012-01-14.CS1 maint: заархивированная копия как заголовок (связь)). Комментарий: в этой старой версии файла README все еще обсуждается старый 0xEA и 0xEC магические ценности.
  63. ^ Хенк Келдер (2003). FAT32.TXT для FAT32.IFS версии 0.9.13. "([21] ): "Этот байт [...] не изменяется во время работы Windows 95 и соседствовать СКАНДИСК или же РАЗМОРАЖИВАНИЕ. [...] Если другая программа устанавливает значение на 0x00 для файла с Советники эти советники больше не будут обнаруживаться с помощью только вызовов DosFindFirst / Next. Другой OS / 2 вызовы для получения EAs (DosQueryPathInfo, DosQueryFileInfo и DosEnumAttribute) не полагаются на этот байт. Также могло произойти [...] обратное. [...] В этом случае снизится только производительность сканирования каталогов. Обе ситуации [...] исправлены CHKDSK ".
  64. ^ Netlabs. FAT32.IFS Wiki и исходники. ([22] ).
  65. ^ а б IBM. Руководство по программированию ОС 4690, версия 5.2, Документ IBM SC30-4137-01, 2007-12-06 ([23] ).
  66. ^ а б c d е ж грамм час я j k л м п Серия справочников разработчика OpenDOS - Руководство по системе и программисту - Руководство программиста. Caldera, Inc. Август 1997. Деталь кальдеры № 200-DODG-003. Архивировано из оригинал на 2017-10-07. Получено 2014-05-20. (Отпечатано в Великобритании.)
  67. ^ Боб Игер, Tavi Systems (2000-10-28). Реализация расширенных атрибутов файловой системы FAT. ([24] ).
  68. ^ IBM (2003). Информация об уникальных атрибутах распространения файлов ОС 4690, Документ IBM R1001487, 30 июля 2003 г. («Архивная копия». Архивировано из оригинал на 2014-05-21. Получено 2014-05-20.CS1 maint: заархивированная копия как заголовок (связь)): "[...] типы файлов хранятся в части" Зарезервированные биты "структуры каталогов файлов PC-DOS, [...] только 4690 уважает и сохраняет эти атрибуты. Различные операционные системы, отличные от 4690, выполняют разные действия, если эти биты включаются [...] при копировании с дискеты, созданной в системе 4690. [...] PC-DOS и Windows 2000 Professional будут копировать файл без ошибок и обнулять биты. OS / 2 [.. .] 1.2 [...] откажется копировать файл, если [...] сначала не запустите CHKDSK / F для файла. После [...] CHKDSK он скопирует файл и обнулит биты. [.. .] при [...] копировании [...] обратно в систему 4690, [...] файл будет скопирован как локальный файл. "
  69. ^ IBM. 4690 сохранение и восстановление атрибутов распространения файлов. Документ IBM R1000622, 31.08.2010 («Архивная копия». Архивировано из оригинал на 2014-05-21. Получено 2014-05-20.CS1 maint: заархивированная копия как заголовок (связь)).
  70. ^ Natuerlich! (1992-03-24). "Получение более длинных имен файлов из GEMDOS". comp.sys.atari.st.tech. Получено 2014-05-05.
  71. ^ Торвальдс, Линус (1992-12-23). "Длинные имена файлов". comp.os.minix. Получено 2014-05-05.
  72. ^ "mount (8): монтировать файловую систему". Справочная страница Linux.

внешняя ссылка