Файловая система fat12 использовала формат имени файла
Созданная в 1977 и изначально предназначенная для дискет, FAT вскоре адаптировали и широко использовали почти повсеместно на жестких дисках в эры DOS и Windows 9x на протяжении двадцати лет. По мере развития жёстких дисков возможности файловых систем соответствующим образом расширялись, что привело в результате к различным вариантам файловых систем: FAT12, FAT16 и FAT32. Стандарт FAT был также расширен по другим направлениям, сохраняя совместимость с ПО.
С появлением более мощных компьютеров и ОС FAT перестала быть стандартной файловой системой для Microsoft Windows.
В настоящее время файловую систему FAT можно обычно найти на дискетах, флешках, других картах и модулях с твердотельной памятью, а также в портативных и встроенных устройствах. DCF реализует FAT как стандарт для цифровых камер. FAT также используется на стадии загрузки EFI-совместимых компьютеров.
Содержание
Версии системы FAT
FAT12
Между апрелем и августом 1980, в процессе заимствования концепта FAT для операционной системы от SCP на 8086 - QDOS 0.10, Tim Paterson расширил элементы таблицы до 12 бит, понизил число FAT до двух, переопределил некоторые из зарезервированных значений для кластеров и модифицировал разметку диска, поэтому корневая директория стала находиться между FAT и областью данных в его реализации FAT12. Paterson также расширил девятисимвольное (6.3) имя файла до одиннадцати символов, чтобы поддерживать стиль имён файлов CP/M 8.3 и файл контрольных блоков. К августу 1980 QDOS была переименована в 86-DOS и, начиная с 86-DOS 0.42, размер и разметка директорий бы изменён с 16 байт до 32, чтобы добавить метку времени и повысить теоретический размер файла для 16 MB. 86-DOS 1.00 стала доступна в начале 1981. Позднее в 1981 86-DOS получила развитие в виде Microsoft's MS-DOS и IBM PC DOS. Возможность читать предыдущие 16-байтные директории была убрана в MS-DOS 1.20.
Размер диска хранился и вычислялся как 16-битный счетчик секторов, который ограничивал размер памяти до 32 MB при размере логического сектора в 512 байт. FAT12 использовался несколькими производителями с различными физическими форматами, но обычная дискета была размером 5.25 дюймов (130 мм), односторонняя, 40 дорожек, с восемью секторами на дорожке, что приводит к вместимости 160 KB как для системных областей, так и для файлов.
Согласно соглашению, все структуры были организованы таким образом, чтобы помещаться на первой дорожке, избегая таким образом продвижения вперед во время операций чтения и записи, хотя это зависит от производителя и физического формата диска. Любой повреждённый сектор в области структуры управления на нулевой дорожке мог привести диск в негодность. Утилита форматирования из DOS полностью отвергала такие диски. Повреждённые секторы были разрешены только в области файлов (начиная с DOS 2.0) и отмечались зарезервированным значением 0xFF7 в FAT. Это делало весь остальной кластер пригодным к использованию.
86-DOS 1.00 и PC DOS 1.0 записи директорий включали только одну дату, дату последней модификации. PC DOS 1.1 добавил поддержку времени последней модификации. PC DOS 1.x файловые атрибуты включали скрытый бит и системный бит, оставшиеся биты не определены. В то время DOS не поддерживал иерархическую файловую систему, что было до сих пор приемлемо, т. к. число файлов на диске редко превышало несколько дюжин.
BIOS Parameter Block (BPB) был введён в PC DOS 2.0, в этой версии также добавлены метки только для чтения, архив, том; биты атрибутов директорий для иерархии поддиректорий.
MS-DOS 3.0 предоставил поддержку плотно записываемых 1.2 MB 5.25-дюймовых дискет, у которых было 15 секторов на дорожке. FAT12 используется на дискетах, включая 1.44 MB и более поздние 2.88 MB диски.
FAT16
Начальная реализация FAT16 не предоставляла больший размер раздела, чем FAT12, начальное преимущество FAT16 было использование меньших кластеров, что делало использование диска более эффективным, особенно для большого числа файлов размером в несколько сотен байт.
Когда жесткие диски стали больше, и FAT12 и FAT16 в MS-DOS / PC DOS не обеспечивали преимущества по использованию дополнительного пространства памяти, несколько производителей создали свои варианты FAT.
Некоторые вендоры (AST и NEC) поддерживали восемь вместо стандартных четырёх главных записей в их расширенной Master Boot Record (MBR). Другие вендоры работали с размерами томов, которые задавались 16-битными записями секторов и соответствующей арифметикой, повышая размер секторов, с которыми работает ОС. Эти, так называемые, логические секторы были больше (до 8192 байт), чем размер физического сектора (в основном, 512 байт), который диктовал ROM-BIOS INT 13H или аппаратным обеспечением. DOS-BIOS или System BIOS комбинировали несколько физических секторов в логические секторы, с которыми затем работала файловая система. Недостатком этого подхода была менее эффективная буферизация секторов, а также повышенное потребление памяти структурами данных в DOS.
В ноябре 1987 вместе с Compaq Personal Computer DOS 3.31 было представлено то, что сегодня просто известно, как формат FAT16, с расширением 16-битного счётчика секторов диска до 32-битного в BPB. Хотя изменения диска были минимальны, драйвер диска в DOS пришлось переписать для работы с 32-битными номерами секторов, эта задача была трудна, т. к. этот драйвер был написан на 16-битном ассемблере. Изначально результат был назван DOS 3.31 Large File System. Microsoft's DSKPROBE упоминает название BigFAT. Технически данная версия известна как FAT16B.
FAT32
FAT32 — последняя версия файловой системы FAT и улучшение предыдущей версии, известной как FAT16. Она была создана, чтобы преодолеть ограничения на размер тома в FAT16, позволяя при этом использовать старый код программ MS-DOS и сохранив формат. FAT32 использует 32-разрядную адресацию кластеров. FAT32 появилась вместе с Windows 95 OSR2.
Максимально возможное число кластеров в FAT32 равно 268 435 445, что позволяет использовать тома (логические диски) объёмом до 8 ТБ. Размер кластера по умолчанию для файловой системы FAT32 составляет от 512 байт до 32 КБ в зависимости от размера тома и конкретной версии ОС. При использовании размера кластера, равного 32768 байт, максимальный размер тома составит чуть менее 8 ТБ. Хотя размер сектора может быть любым, традиционно он считается равным 1 сектору диска и равен 512 байт и т.к. эта величина не менялась с момента создания — она может считаться некоторым ПО как константа. Это может вызвать некоторые проблемы совместимости. Средство ScanDisk, входящее в состав Microsoft Windows 95 и Microsoft Windows 98, является 16-разрядной программой. Для таких программ максимальный размер кластера отдельного фрагмента памяти составляет 16 МБ минус 64 КБ. Следовательно, ScanDisk в Windows 95 или Windows 98 не может работать с томами FAT32, у которых размер таблицы FAT превышает 16 МБ минус 64 КБ. Запись в таблице FAT на томе с файловой системой FAT32 имеет размер 4 байта, поэтому ScanDisk не может работать с таблицей FAT на диске FAT32, описывающей более 4 177 920 кластеров (включая два резервных). С учётом самих таблиц FAT и при максимальном размере кластера 32 КБ размер тома может быть до 127,53 ГБ.
Максимально возможный размер файла для тома FAT32 —
4 ГБ — 4 294 967 295 байт (в FAT32 под размер файла отведено 4 байта. 4 байта - это 32 бита. 2 32 -1 — 4 294 967 295 байт. Поэтому размер файла не может быть больше этого значения, иначе не получится указать его длину. Хотя цепочку в FAT таблице можно продолжать и дальше, но тогда для определения размера файла придется каждый раз пробегать по всей цепочке, а это будет занимать много времени. К тому же в FAT таблице указаны только номера кластеров, поэтому тогда можно будет узнать только округлённое значение длины файла) — это весьма важный фактор для смены файловой системы. FAT32 не поддерживает установку разрешений на доступ к файлам и папкам и некоторые другие функции современных файловых систем. Все эти причины привели к тому, что сейчас наблюдается тенденция отказа от FAT32 в пользу более продвинутых файловых систем, таких как NTFS, Ext2/Ext3. Чаще всего недоверие к NTFS возникает у пользователей из-за трудностей с назначением прав доступа (так как чаще всего они единственные владельцы файлов) и её закрытости.
Производные от FAT системы
Turbo FAT
В своей NetWare File System (NWFS) Novell реализовала сильно модифицированный вариант FAT для операционной системы theNetWare. Для больших файлов она использовала метод повышения производительности, названный Turbo FAT.
FATX - семейство файловых систем для жестких дисков и карт памяти в консоли Microsoft's Xbox, представленной в 2001.
Используя те же идем, что и в FAT16 и FAT32, дисковые структуры FATX16 и FATX32 были упрощены, но стали фундаментально несовместимыми с обычными FAT16 и FAT32, что сделало невозможным для обычных драйверов FAT монтировать тома таких файловых систем.
Сектор, размером 4 KB, содержит 18 байтную структуру, похожую на BPB. Размер кластера 16 KB, присутствует только одна копия FAT в Xbox. Размер записей директории - 64 байта вместо обычных 32-х. У файлов могут быть имена до 42 символов при использовании набора символов OEM, максимальный размер -- 4 GB - 1 байт. Метки времени содержат даты создания, модификации и доступа, а также их время, но вместо эпохи 1980 используется 2000.
exFAT
exFAT, иногда называется FAT64 — проприетарная файловая система, предназначенная главным образом для флэш-накопителей. Впервые представлена фирмой Microsoft для встроенных устройств в Windows Embedded CE 6.0. Размер кластера по умолчанию для файловой системы exFAT составляет от 4 КБ до 128 КБ в зависимости от размера тома.
Основными преимуществами exFAT перед предыдущими версиями FAT являются:
- Уменьшение количества перезаписей одного и того же сектора, что важно для флеш-накопителей, у которых ячейки памяти необратимо изнашиваются после определённого количества операций записи (это сильно смягчается выравниванием износа (wear leveling), встроенным в современные USB-накопители и SD-карты). Это было основной причиной разработки exFAT.
- Теоретический лимит на размер файла 2 64 байт (16 эксабайт).
- Максимальный размер кластера увеличен до 2 25 байт (32 мегабайта).
- Улучшение распределения свободного места за счёт введения бит-карты свободного места, что может уменьшать фрагментацию диска.
- Введена поддержка списка прав доступа.
- Поддержка транзакций (опциональная возможность, должна поддерживаться устройством).
Краткий обзор разметки
Пространство тома FAT32 логически разделено на три смежные области:
- Зарезервированная область. Содержит служебные структуры, которые принадлежат загрузочной записи раздела (Partition Boot Record — PBR, для отличия от Master Boot Record — главной загрузочной записи диска; также PBR часто некорректно называется загрузочным сектором) и используются при инициализации тома;
- Область таблицы FAT, содержащая массив индексных указателей («ячеек»), соответствующих кластерам области данных. Обычно на диске представлено две копии таблицы FAT в целях надежности;
- Область данных, где записано собственно содержимое файлов — то есть текст текстовых файлов, кодированное изображение для файлов рисунков, оцифрованный звук для аудиофайлов и т. д. — а также т. н. метаданные — информация относительно имен файлов и папок, их атрибутов, времени создания и изменения, размеров и размещения на диске.
В FAT12 и FAT16 также специально выделяется область корневого каталога. Она имеет фиксированное положение (непосредственно после последнего элемента таблицы FAT) и фиксированный размер в 32-хбайтных элементах, т.е. при описании в Partition Boot Record указывается именно количество 32-хбайтных элементов, каждый из которых описывает какой-либо элемент корневого каталога (будь то файл или другой вложенный каталог).
Если кластер принадлежит файлу, то соответствующая ему ячейка в таблице FAT содержит номер следующего кластера этого же файла. Если ячейка соответствует последнему кластеру файла, то она содержит специальное значение (FFFF16 для FAT16). Таким образом выстраивается цепочка кластеров файла. Неиспользуемым кластерам в таблице соответствуют нули. «Плохим» кластерам (которые исключаются из обработки, например, по причине нечитаемости соответствующей области устройства) также соответствует специальный код.
При удалении файла первый знак имени заменяется специальным кодом E516 и цепочка кластеров файла в таблице размещения обнуляется. Поскольку информация о размере файла (которая располагается в каталоге рядом с именем файла) при этом остаётся нетронутой, в случае, если кластеры файла располагались на диске последовательно и они не были перезаписаны новой информацией, возможно восстановление удалённого файла.
Каждый элемент таблицы FAT занимает на диске определенное место, т.е. под него выделяется определенное количество бит. Используются 12-ти, 16 32-битовые элементы FAT. Соответственно файловая система носит название FAT12, FAT16 или FAT32.
Длина элемента FAT определяет разрядность хранимого в нем двоичного числа, а значит и максимальный номер кластера, информация о котором находиться в этом элементе. Поэтому длина элемента FAT ограничивает максимальное количество кластеров, которые могут быть сформированы в рабочей области тома (для FAT12: 2 12 = 4096; для FAT-16: 2 16 = 65535; для FAT-32: 2 32 = 4294967296).
12-битовый формат годиться только для гибких дисков (дискет) с небольшим количеством секторов при этом вся таблица FAT помещается в одном секторе диска.
16-ти и 32-битовые версии FAT были разработаны для жестких дисков. В настоящее время используется в основном FAT32, FAT16 может использоваться только с дисками небольшого объема, которые в настоящий момент уже не применяются. Разберем почему. Пусть нам необходимо организовать файловую систему на диске объемом 4Гбайта (очевидно, что речь идет о Flash-диске). Если мы используем FAT16, количество используемых кластеров на диске может достигать 2 16. Вычислим размер одного кластера, размер всего диска 4*2 30 делим на количество кластеров:
Размер кластера = 4*230 / 216 = 216 = 64КБайта
Это значит, что даже для хранения файла размером один байт будет использовано 64 КБайта дисковой памяти, т.е. дисковое пространство используется крайне нерационально. Неиспользованная часть кластера называется потерянным местом(slack). В небольших файлах почти весь кластер может быть потерянным местом, а в среднем потери составляют половину размера кластера.
При применении FAT32 это ограничение на количество кластеров (а значит и на его размер) снимается, эта система намного эффективнее расходует дисковое пространство, так как использует кластеры меньшего размера. Размеры кластера задаются системой при форматировании диска (См. таблицу 9).
Таблица 9 Зависимость размера кластера от емкости диска
Емкость диска, Гбайт | Размер кластера, Кбайт |
Менее 8 | |
Менее 16 | |
Менее 32 | |
32 и более |
У системы FAT16 есть одно преимущество, так как она является небольшой файловой системой, ее FAT-таблица при работе целиком помещается в память. У файловой системы FAT32 кластеры небольшие, зато она сама большая и поэтому ее таблица FAT полностью в памяти не помещается. Поэтому быстродействие файловой системы FAT16 гораздо выше, чем у FAT32.
Фрагментация диска
Как это видно на рисунке 6 цепочка кластеров, принадлежащих одному файлу, может записаться не подряд, а в виде нескольких фрагментов. Если на диске записано много данных, на нем может не быть цельной области, достаточной для размещения файла. Тем не менее, файл все-таки запишется, если на диске много мелких областей, суммарный размер которых достаточен для записи. В этом случае файл записывается в виде нескольких фрагментов
Процесс разбиения файла на небольшие фрагменты при записи на диск называется фрагментацией. Особенно способствует фрагментации ситуация, когда на диск записывается большое количество мелких файлов, а потом некоторые из них удаляются. При этом на диске остается большое количество разрозненных пустых кластеров, в которые при записи новые файлы будут записываться с разрывами. Если на диске много фрагментированных файлов, скорость чтения носителя уменьшается, поскольку поиск кластеров, в которых хранятся файлы, на жестких дисках требует времени.
Для ускорения работы производится дефрагментация т.е.перераспределение файлов на диске, при котором они располагаются в непрерывных последовательностях кластеров. После дефрагментации ускоряется чтение и запись файлов, а следовательно и работа программ. Операционные системы Windows имеют встроенные утилиты для дефрагментации.
Потерянные кластеры
Потерянные кластеры – это наиболее распространенная ошибка файловой системы, при которой кластеры в FAT помечаются как используемые, хотя на самом деле таковыми не являются. То есть в таблице FAT есть цепочка кластеров, но при этом ни в одном из каталогов на диске нет ни одного дескриптора файла, который указывал бы на начало этой цепочки.
Такая ситуация может возникнуть при «зависании» программы или при пропадании питания во время операции записи файла (Именно поэтому система предлагает проверить диск с FAT после «неправильного» выключения компьютера). Система производит запись информации в область данных (в кластеры файла) и в элементы FAT, но не успевает поместить в каталог соответствующий дескриптор файла. Это происходит из-за того, что запись каталога для файла является последней частью операции записи файла, потому, что каталог содержит размер файла, a Windows не может знать его до тех пор, пока не закончит запись файла.
Сервисная утилита, входящая в состав Windows сканирует FAT, ищет потерянные кластеры и создает в корневом каталоге дескриптор файла, указывающий начало цепочки. Кроме встроенной утилиты существует большое количество утилит внешних производителей для решения проблем с дисками.
Иерархическая (древовидная) структура каталогов
Разберемся, как устроена древовидная структура каталогов, каким именно образом в каталоге хранятся ссылки на каталоги следующего уровня (дочерние каталоги) и как любой дочерний каталог хранит ссылку на родительский. Ссылки обоих типов являются дескрипторами.
Про организацию дочерних каталогов мы уже упоминали, такой каталог имеет в родительском каталоге дескриптор (как обычных файл). От дескриптора файла дескриптор каталога отличается только установленным атрибутом D (4-й бит в байте атрибутов - DIRECTORY).
Теперь разберемся, каким образом дочерний каталог «знает» о родительском. В любом каталоге, кроме корневого, два первых дескриптора имеют специальное назначение. Первый дескриптор содержит в поле имени строку «.». Этот дескриптор указывает на содержащий его каталог, то есть каталог имеет ссылку сам на себя. Второй специальный дескриптор имеет имя «..». Этот дескриптор указывает на каталог более высокого уровня (родительский).
Таким образом, в древовидной структуре каталогов файловой системы FAT имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки целостности структуры каталогов файловой системы.
Длинные имена
Первые версии файловой системы FAT позволяли хранить только короткие имена файлов в стандарте «восемь-точка-три» (8.3). Это объясняется тем, что в дескрипторе файла для имени файла выделяется 8 байт, а для расширения 3 байта. Начиная с Windows 95 была введена поддержка длинных имен файлов. В улучшенной файловой системе файлу или каталогу можно присваивать имя длиной до 255 символов. В длинных именах файлов можно использовать пробелы, а также символы + ,; = [], которые нельзя было использовать в стандартных именах файлов. Разберемся, как устроены длинные имена в файловой системе FAT.
Проблема использования длинных имен файлов была решена следующим образом: для каждого файла и подкаталога имеются два имени: короткое, «понятное» всем прикладным программам, и длинное - для приложений Windows и тех программ, в которых предусмотрена возможность работы с длинными именами. Для хранения коротких имен в формате 8.3 используются обычные 32-байт записи. Короткие имена Windows создает из длинных имен, отсекая шесть старших символов и добавляя в конце этого базового имени "
1". Если же существует еще одно имя, состоящее из тех же шести символов, то этот номер увеличивается на единицу. Расширение файла сохраняется прежним. Если в имени встречается символ, не допустимый в предыдущих версиях операционной системы, он заменяется на знак «подчеркивание» (_). Кириллица переводится в верхний регистр (только заглавные буквы).
Покажем как длинные имена преобразуются в короткие.
Длинные имена Короткие имена
Именно эти короткие имена и будут храниться в дескрипторах файлов, размещаемых в каталогах. Таким образом, все версии операционных систем могут получить доступ к файлу под длинным именем с помощью его короткого имени.
Остается еще одна проблема: как хранить 255 символов имени файла в 32 байтах дескриптора файла, ведь каждый символ имени файла — это один байт? Модифицировать структуру записи каталога нельзя, поскольку тогда предыдущие версии операционных систем не смогут использовать ее. Разработчики файловой системы решили эту проблему следующим образом: были добавлены дополнительные записи каталога для хранения длинных имен файлов. Чтобы предыдущие версии операционных систем не «замечали» этих дополнительных записей каталога, система устанавливает для них атрибуты, которые нельзя использовать для обычного файла (значение байта атрибутов 0Fh: только для чтения, скрытый, системный и метка тома). Поскольку значения атрибутов противоречивы (не бывает защищенных от записи, скрытых и системных меток тома), дескрипторы с такими атрибутами система игнорирует, и, следовательно, длинные имена файлов остаются «нетронутыми».
Для конкретного файла или каталога непосредственно перед его единственным дескриптором с его именем в формате 8.3 находится группа из одной или нескольких записей (дескрипторов с «неправильными» атрибутами), представляющих длинное имя (до 255 символов). Каждая такая запись содержит часть длинного имени файла не более 13 символов, и операционная система составляет полное длинное имя из всех записей.
NTFS
Структура NTFS
Файловая система NTFS (New Technology File System – файловая система новой технологии) является сложной файловой системой, разработанной независимо от системы FAT.
При установке NTFS, диск разделяется на две неравные части: первая в начале диска отводиться под специальную таблицу MFT (Master File Table - главная файловая таблица), называется MFT - зоной и занимает порядка 12% от общего размера диска, вторую часть занимают собственно ваши данные. Это основа NTFS. Каждая запись в MFT соответствует какому-либо файлу и занимает около 1 Kb. По своей сути это каталог всех файлов находящихся на диске.
Первые 16 файлов носят служебный характер и недоступны операционной системе - они называются метафайлами. Эти первые 16 элементов MFT - единственная часть диска, имеющая фиксированное положение. Вторая копия этих первых записей хранится ровно посередине диска для надежности.
Обратимся теперь к записи файла MFT. В этом месте хранится вся информация о файле, за исключением собственно данных. Имя файла, размер, положение на диске отдельных фрагментов, и т.д. Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно подряд. Если данных в файле не много, то они наоборот целиком хранятся в записи файла MFT. Это значит что небольшие файлы и каталоги (обычно до 1500 байт) могут полностью содержаться внутри записи MFT. Подобный подход обеспечивает очень быстрый доступ к маленьким файлам.
Имя файла может иметь длину до 255 символов, при этом допустимы любые символы, включая полный набор национальных алфавитов, так как данные представлены в Unicode (65535 разных символов).
Как и файловой системе FAT файлы в NTFS записываются в виде последовательности кластеров. Кластеры в файловой системе NTFS могут принимать размеры от 512 байт до 64 Кб. Стандартным значением длины кластера является размер 4 Кб.
А теперь уберите детей и беременных женщин от экранов, потому что мы будет иметь дело с байтами в чистом виде.
Для начала определимся с дискетой. А именно с самой обыкновенной дискетой 3.5” с 1.44Мб на борту, которая всем нам так хорошо знакома. Так вот, всё место на дискете разбито на секторы, размер каждого сектора составляет 512 байт. Сектора объединяются в кластеры, но на дискете не так уж и много секторов (2848), поэтому каждый кластер содержит только один сектор.
Итак, файловая система. Самый первый сектор на дискете (нулевой) отводится под Boot Sector – загрузочный сектор. В нем хранится всякая полезная и важная информация. Сразу за ним следует FAT таблица. FAT расшифровывается как File AllocationTable – Таблица Размещения Файлов. Как правило, эта таблица дублируется с целью увеличения надежности. Первая и вторая таблицы занимают 1-9 и 10-18 сектора соответственно. После таблиц несколько секторов (на дискете это 14шт) отводятся под корневой каталог. И после всего этого уже идут секторы с содержимым файлов.
А теперь обо всем по порядку.
Boot Sector – Загрузочный сектор
Этот сектор занимает нулевой сектор на дискете. Он содержит очень важную информацию об устройстве файловой системы. Далее следуют номера байтов в секторе и то, что в них хранится:
Если байт загрузочной области установлен в 0x29, то следующие за ним 3 поля присутствуют.
Id тома используется как его серийный номер. Обычно его получают из времени создания тома.
Метка тома — это его название. По умолчанию выставляется в «NO NAME    ».
Тип файловой системы — для FAT12, это строка «FAT12   ». На самом деле большинство драйверов определяют тип системы не из этой строки, а на основе количества секторов в носителе (FAT12 выбирается, если на носителе не более 2^12 = 4096 секторов)
FAT таблица
FAT таблица очень похожа на массив, элементы которого состоят из 2х байтов. Каждый элемент соответствует сектору с данными, но тут мы используем не реальные, а логические сектора. Их отличие в том, что их нумерация начинается не с начала дискеты, а с начала области данных. То есть в нашем примере первые 33 сектора дискеты (0-32) заняты Boot сектором, FAT таблицами и корневым каталогом, то есть сами данные начинаются на 33 секторе. В FAT таблицах нулевой и первый элемент зарезервированы, поэтому мы начинаем со второго. Таким образом второй элемент FAT таблицы соответствует 33 сектору на дискете или 0 логическому сектору, а, например, пятый элемент — 36му и 3му логическому. Значения элемента могут быть 3х типов:
- Значение, указывающее на то, что сектор является последним в файле
- Значение, указывающее на то, что сектор в настоящее время не используется
- Порядковый номер следующего сектора файла
Вот более подробный список значений и того, что они означают:
Небольшой пример. Представьте, что у нас на диске записано 2 файла. Это text.txt, который занимает 4 сектора и picture.jpg, который занимает 2 сектора. Пусть text.txt занимает 0, 2, 4 и 5 логические сектора в области данных (отсчет ведется с нуля), а picture.jpg — 1 и 3. Тогда FAT таблица будет выглядеть примерно так:
R 0x0000
R 0x0000 — первые 2 элемента зарезервированы, помните?
0 0x0002 — начало файла text.txt, тут хранится указатель на следующий сектор файла text.txt
1 0x0003 — начало picture.jpg и указатель на продолжение
2 0x0004 — продолжение text.txt
3 0x0FFF — последний сектор picture.jpg
4 0x0005 — предпоследний сектор text.txt
5 0x0FFF — последний сектор text.txt
Цифра перед значением показывает, с каким логическим сектором связан этот элемент. Буква «R» стоит перед зарезервированными, то есть неиспользуемыми элементами.
Директории
Директории (в том числе и корневая) хранятся на диске как файлы и занимают один или несколько секторов. Каждый сектор директории (512 байт) содержит указатели на 16 файлов, то есть по 32 байта на каждый указатель. Такой указатель описывает вложенную директорию или файл на диске и ссылается на него. Таким образом набор этих указателей полностью описывает внутреннее содержимое папки. Разберем эти указатели поподробнее. Номера байтов и их содержимое:
Если первый байт имени имеет значение 0x29, то этот указатель пуст (то есть файл был удален), но после него еще имеются указатели. Если же первый байт имени — 0x00, то указатель пуст и дальше все указатели тоже пусты.
Байт атрибутов описывает свойства файлов. Вот его допустимые значения:
- 0x01 — только чтение
- 0x02 — скрытый
- 0x04 — системный
- 0x08 — Volume Label (я так и не разобрался, что это такое)
- 0x10 — указывает на то, что файл является папкой
- 0x20 — архивный (Archive, тоже не разобрался)
- 0x40 — не используется
- 0x80 — не используется
Значения можно комбинировать. Например, если мы хотим чтобы наш файл был скрытой системной папкой, то мы устанавливаем этот байт в значение 0x16, потому-что 0x16 = 0x02 + 0x04 + 0x10.
Имя файла и расширение
В FAT12 выделяется 8 символов под имя файла и 3 символа под расширение. Если у файла имя занимает меньше 8ми символов, то оставшиеся заполняются пробелами (ASCII 32 или 0x20). То же самое и с расширением. Также все имена и расширения хранятся в ВЕРХНЕМ РЕГИСТРЕ. У директорий, кстати, тоже могут быть расширения. В одной папке не может находится сразу несколько файлов или директорий с одинаковыми именами и расширениями. Вот несколько примеров, слева то, что хранится на диске, а справа имена, которые мы дали файлам. Символом подчеркивания ("_") я заменил пробел для наглядности:
- «FOO_____BAR» — «foo.bar»
- «FOO_____BAR» — «Foo.Bar»
- «FOO_____BAR» — «FOO.BAR»
- «FOO________» — «foo»
- «FOO________» — «foo.»
- «PICKLE__A__» — «PICKLE.A»
- «PRETTYBGBIG» — «prettybg.big»
Имя файла ".big" является некорректным, потому-что имена не могут начинаться с точки.
Ну вот, теперь вы должны представлять себе устройство системы FAT12, надеюсь я все понятно разжевал. Тем не менее, если у вас возникнут какие-либо вопросы, то задавайте их в комментариях.
Для обеспечения доступа приложений к файлам операционная система с файловой системой FAT использует следующие структуры:
- загрузочные секторы главного и дополнительных разделов ;
- загрузочные секторы логических дисков (разделов);
- корневой каталог;
- область данных;
- цилиндр для выполнения диагностических операций чтения-записи.
На дискетах, в отличие от жесткого диска, нет загрузочных секторов главного и дополнительных разделов и диагностического цилиндра. Эти структуры создаются программой Fdisk, которая не применяется для дискет, так как они на разделы не разбиваются. Чтобы установить на один жесткий диск несколько операционных систем, его надо разбить на разделы . В загрузочном секторе главного раздела создается таблица списка разделов.
Загрузочный сектор главного раздела (называемый главной загрузочной записью – Master Boot Record – MBR ) является первым сектором на жестком диске (цилиндр 0, головка 0, сектор 1) и состоит из двух элементов [10]:
- таблица главного раздела, содержащая список разделов (максимум четыре) и расположение загрузочных секторов соответствующих логических дисков (первая и последняя головки, первый и последний цилиндры с соответствующими значениями секторов, а также количество секторов);
- главный загрузочный код – небольшая программа, которая выполняется системой BIOS. Основная функция этого кода – передача управления в раздел, который обозначен как активный (загрузочный).
Загрузочный сектор раздела содержит:
- блок параметров диска, в котором содержится информация о разделе (размер, количество секторов, размер кластера , метка тома и др.);
- загрузочный код – программу, с которой начинается процесс загрузки операционной системы (для Ms-Dos и Windows 9x – файл Io.sys).
Загрузочные секторы логических дисков создаются программой Format . Они похожи на загрузочные диски разделов. Однако при загрузке выполняется код только того сектора, который находится в активном разделе.
Логический диск , отформатированный программой Fdisk, состоит из следующих областей (рис. 7.20):
- загрузочный сектор;
- основная FAT-таблица, содержащая информацию о размещении файлов и каталогов на диске;
- копия FAT-таблицы;
- корневой каталог – фиксированная область (16 Кбайт для жесткого диска), позволяющая хранить 512 записей о файлах и каталогах (каждая запись состоит из 32 байтов);
- область данных для размещения всех файлов и каталогов, кроме корневого каталога.
Первые две записи FAT зарезервированы и содержат информацию о самой FAT , все остальные указывают на соответствующие кластеры диска. Индексный указатель принимает значение , характеризующее состояние связанного с ним кластера (для FAT 16):
- кластер свободен (0000h);
- кластер используется (любое значение, кроме специальных);
- последний кластер файла (FFF8h – FFFFh);
- кластер поврежден (FFF7h);
- резервный кластер (FFF6h).
Размер FAT -таблицы определяется количеством кластера. Разрядность индексного указателя FAT -таблицы должна быть такой, чтобы можно было задать максимальный номер кластера диска определенного объема. В соответствии с разрядностью дискового указателя существуют несколько разновидностей FAT : FAT12, FAT16 , FAT32 (соответственно 2 12 , 2 16 и 2 32 кластеров). Тип используемой FAT определяется программой Fdisk, хотя и записываются они в процессе форматирования высокого уровня программы Format . На всех дискетах применяется FAT 12, на жестких дисках до 512 Мбайт – FAT16 , на жестких дисках, имеющих большую емкость при использовании Windows 95 OSR2 и Windows98 – FAT 32 (вообще размер кластера может быть от 1 до 128 секторов или от 512 байт до 64 Кбайт). Максимальный размер раздела FAT16 ограничен объемом 4 Гбайт (2 16 = 65536 кластеров по 64 Кбайт). Максимальный размер раздела FAT 32 практически не ограничен (232 кластеров по 32 Кбайт).
За копией FAT -таблицы следует корневой каталог – база данных , содержащая информацию о записанных на диске данных. Каждая запись в ней имеет длину 32 байта и содержит всю информацию о файле, которой располагает операционная система . Формат записи приведен ниже.
Информация о расположении файла, то есть о расположении оставшихся кластеров, содержится в FAT -таблице. В процессе работы системы кластеры файла могут оказаться не в смежных областях, а будут чередоваться с кластерами других файлов. Однако эту цепочку кластеров легко выделить, зная начальный кластер файлов. На рис. 7.21 показан пример размещения двух файлов.
В корневом каталоге имеются записи не только о файлах, но и подкаталогах. Эти записи имеют точно такую же структуру, что и записи корневого каталога. Признак подкаталогов указывается в атрибутах файла, т.е. можно считать, что подкаталог – это специальный файл . Структура атрибутивного байта показана ниже.
Файловые системы FAT 12 и FAT16 оперируют с именами файлов, составленных по схеме 8.3 (имя, расширение). В Windows 95 с появлением 32-разрядной виртуальной FAT - VFAT ( Virtual file allocation table ) поддерживаются имена длиной 255 символов (заметим, что изменился лишь программный код, поддерживающий FAT16 , он стал 32-м). Для обеспечения обратной совместимости ОС создает его псевдоним , удовлетворяющий стандарту 8.3. Делается это следующим образом.
- Первые 3 символа после последней точки в длинном имени файла становятся расширением псевдонима.
- Первые шесть символов длинного имени файла, за исключением пробелов, которые игнорируются, преобразуются в символы верхнего регистра и становятся шестью символами стандартного имени файла. Недопустимые символы (+ , ; = [28] ), которые могут использоваться в Windows 95, преобразуются в символы подчеркивания.
- Добавляются символы
Если первые шесть символов нескольких файлов одни и те же, то добавляются символы
VFAT хранит псевдонимы длинных имен в поле стандартных имен файлов записи каталога файла. Таким образом, все версии DOS и Windows могут получить доступ к файлу под длинным именем с помощью его псевдонима. Остается проблема: как хранить 255 символов имени файлов 32 байт записи каталога? Разработчики файловой системы решили эту проблему следующим образом: были добавлены дополнительные записи каталога для хранения длинных имен файлов. Чтобы предыдущие версии не повредили эти дополнительные записи каталога, VFAT устанавливает для них атрибуты, которые нельзя использовать для обычного файла: только для чтения, скрытый, системный и метка тома. Такие атрибуты DOS игнорирует, а следовательно, длинные имена файлов остаются нетронутыми. Подобным же образом решается проблема длинных имен в Windows NT/2000/2003/XP, применяющих для хранения имен двухбайтовый формат на каждый символ – Unicode.
Как уже отмечалось, выбор типа FAT -системы во многом определяется емкостью жесткого диска. При использовании FAT16 нельзя создать раздел емкостью более 2-х Гбайт. Для устранения этого ограничения фирма Microsoft разработала FAT 32. Она работает как FAT 16, но имеет отличие в организации хранения данных. Кроме того, FAT 32 можно установить с помощью программы Fdisk. Впервые FAT 32 была реализована в Windows 95 OEM Service Release 2 (OSR2). Она встроена и в Windows 98/Ме/NT/2000.
Основное преимущество FAT 32 – возможность использования 32-разрядных записей вместо 16-разрядных, что приводит к увеличению кластеров (вместо 216=65536) до 268 435 456 в разделе. Это значение в Windows 95 OSR2 эквивалентно 2 28 , а не 2 32 , поскольку 4 бита из 32 зарезервированы для других целей.
При работе в FAT 32 размер раздела может достигать 2 Tбайт при кластере размером 8, 16 или 32 Кбайт. Новая файловая система может иметь 232 кластеров размером 512 байт , а размер единичного файла может составить 4 Гбайт. Реально FAT 32 поддерживает максимальный размер тома до 32 Гбайт. Это связано с тем, что в Windows 2000 это ограничение обусловлено программой Format . Вообще максимально возможный том – 2 Tбайт при кластере 32 Кбайт.
Существует важное отличие FAT 32 от ее предшественниц – положение корневого каталога: он может располагаться в любом месте раздела и иметь любой раздел. Это обеспечивает динамическое изменение размера раздела. Независимые разработчики использовали это свойство. Так, фирма Power- Quest создала программу Partion Magic, позволяющую переопределять разделы после их создания.
Файловая система FAT 32 также использует преимущество двух копий FAT . Как и в FAT 16, в FAT 32 первая копия является основной и периодически копирует данные в дополнительную копию FAT . При проблемах с главной копией FAT системы переключаются в дополнительную копию, которая становится главной.
Примечание: программа Fdisk автоматически определяет размер кластера на основе выбранной файловой системы и размерам раздела. Однако существует недокументированный параметр команды Format , позволяющий явно указать размер кластера : Format /z:n, где n – размер кластера в байтах, кратный 512.
Читайте также:
- Как сделать сообщение при входе в дискорд сервер
- Как сделать нижнюю границу в ворде не на всю строку
- Как создать новый плашечный канал в фотошопе
- С каким скзи пользователь может сформировать и отправить заявление на получение эп сервис 1с этп
- Запустить программу word с одновременным открытием какого либо doc файла