Корневой каталог диска имеет формат файловой системы fat что делать
Перейти к содержимому

Корневой каталог диска имеет формат файловой системы fat что делать

  • автор:

Подскажите, что надо сделать в этом случае. Ничего не поняла: корневой каталог диска е имеет формат файловой системы FAT

и может содержать ограниченное число элементов. Сохраните элементы во вложенной папке или отформатируйте диск, выбрав файловую систему NTFS?

Георгий Суханов

чего не ясно? сохрани важную инфу на стороннем носителе и отформатируй диск на NTFS, ROOT на FAT отформатирован, FAT говно, устарел морально

Слишком много файлов на диске создайте папки и распихайте по папкам, либо форматируйте диск в NTFS

Файловая система FAT не позволяет записывать файлы больше чем 4 Гб, поэтому и предлагается отформатировать в NTFS, этой системе до лампы размеры.

Русские Блоги

Как основной файл операционной системы Windows, файловая система FAT32 в основном состоит из пяти частей: MBR, DBR и ее зарезервированных секторов, FAT1, FAT2 и DATA. FAT1 и FAT2 имеют одинаковый размер, а FAT имеет переменную длину, и ее длина зависит от размера раздела и количества секторов в кластере. В файлах FAT32 каталоги управляются как файлы, поэтому независимая область каталогов отсутствует.

1.1 Основная загрузочная запись

Первый сектор жесткого диска называется сектором MBR (Master Boot Record), который является записью главного загрузочного сектора и занимает 512 байтов. Программа загрузки MBR занимает первые 446 байтов, а последние 64 байта — это таблица разделов жесткого диска DPT. , Два байта «55AA» в конце являются действующим концом раздела. Флаг загрузки может быть только 00H и 80H, 80H означает активный, 00H означает неактивный, а остальные значения по умолчанию недопустимы.

1.2 Загрузочная запись операционной системы

DBR (DOS Boot Record), загрузочная запись операционной системы. DBR файловой системы включает инструкцию перехода, OEM-код, BPB, программу загрузки и флаг завершения. При восстановлении данных из FAT32 начальная позиция корневого каталога обычно может быть определена по количеству зарезервированных секторов в параметре загрузочного сектора BPB, количеству FAT и количеству секторов, занимаемых каждой FAT32.

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

FAT (File Allocation Table), таблица размещения файлов. В файле FAT32 есть две одинаковые FAT, первая называется основной FAT, а другая — резервной FAT1. FAT располагается после DBR, и данные того же файла не обязательно хранятся в непрерывной области диска, а записываются в таблицу FAT в виде цепочки хранения.

1.4 Записи каталога файловой системы

Файловая система FAT32 не имеет независимой области корневого каталога. Записи каталога файлов и папок в корневом каталоге раздела хранятся в области корневого каталога, а записи каталога файлов и папок в подкаталоге раздела хранятся в области подкаталога, корневом каталоге И зона, и зона подкаталога находятся в зоне данных. Запись каталога файлов (FDT) занимает 32 байта, длина записи подкаталога равна нулю, а значение первого байта удаленной записи каталога — E5H.

1.5 Область данных

Область данных расположена после FAT2. Чтобы найти данные в области данных, сначала найдите соответствующий сектор DBR с помощью информации таблицы разделов, получите значение зарезервированного сектора DBR и номер каждого сектора FAT и получите начальный сектор области данных раздела с помощью соответствующей формулы вычисления.

2. Сектор DBR и его зарезервированный сектор

Структура загрузочного сектора FAT32 (только раздел с ключевыми словами)

0x00-0x10 : 58EB Инструкция прыжка, а именно JMP 58 , 90 Это инструкция NOP, следующие 8 байтов указывают, что флаг файловой системы и номер версии — MSDOS5.0, 0200 Относится к 512 байтам на сектор. 08 Относится к 8 секторам на кластер, 0022 Относится к количеству зарезервированных секторов 34, 02 Относится к количеству таблиц FAT как 2.

0x20-0x23 : Общее количество секторов в файловой системе равно 003FBBC5 , Каждая таблица FAT занимает 00000FE7 Секторы, номер кластера первого кластера, в котором находится корневой каталог. 0x02 。

0x3E8-0x3EF : Количество пустых кластеров в файловой системе равно 0007F377 , Следующий доступный номер кластера — 00000005 。

Три, таблица FAT

Первые два элемента FAT таблицы FAT зарезервированы для файловой системы, FAT № 0 — это тип носителя, а FAT № 1 — это флаг ошибки файловой системы. Данные пользователя записываются из FAT No. 2.

Если файл занимает много кластеров, первая запись FAT записывает номер следующей записи FAT (номер кластера). Если файл заканчивается, он представлен как «0F FF FF FF».

Метод определения абсолютного положения FAT и области данных:

1. Определите начальный сектор раздела из таблицы разделов MBR и смещение до этого сектора.

2. Знать количество зарезервированных секторов DBR, номер таблицы FAT и размер таблицы FAT из BPB DBR.

3. FAT1 = начальный сектор раздела + зарезервированный сектор DBR, FAT2 = начальный сектор раздела + зарезервированный сектор DBR + FAT1, корневой каталог = начальный сектор раздела + зарезервированный сектор DBR + (таблица FAT * 2) + (Размер кластера * 2)

В-четвертых, корневой каталог
Смещение байта (шестнадцатеричное) Количество байтов смысл
0x00-0x07 8 Имя файла, менее 8 байт, завершение 0x20
0x08-0x0A 3 имя расширения
0x0B 1 Атрибут файла, 0x20 означает архив
0x0D 1 10 миллисекунд времени создания
0x0E-0x0F 2 Время создания файла
0x10-0x11 2 Дата создания файла
0x12-0x13 2 Дата последнего доступа к файлу
0x14-0x15 2 Старшие 16 бит номера начального кластера файла
0x16-0x17 2 Время последнего изменения файла
0x18-0x19 2 Время последнего изменения файла
0x1A-0x1B 2 Время последнего изменения файла
0x1C-0x1F 4 Длина файла
Пять, восстановление файлов FAT32
Подготовка к эксперименту

VMware Fusion + виртуальная машина Winxp + Winhex

Создайте файловую систему FAT32: создайте новый жесткий диск в VMware и инициализируйте его как файловую систему FAT32 на виртуальной машине xp, назовите его D и создайте на нем тестовый файл.

Используйте winhex для открытия диска D: 512 байт на сектор, 8 секторов на кластер, 34 зарезервированных сектора, на диске есть две FAT, каждая FAT занимает 4071 сектор, а каждый кластер занимает 4096 байт .

Проверьте шаблон корневого каталога: размер файла TEST — 0000598D, что составляет 22925 байт, занимает 6 кластеров. Номер первого кластера файла TEST — 00000005 (14h-15h, 1Ah-1Bh).

Просмотр списка кластеров файла

Восстановление файлов щелчком правой кнопкой мыши по удаленным файлам

Первый байт файла в корневом каталоге становится E5 , Размер файла остается неизменным, и номер первого кластера файла остается неизменным.

Войдите в связанный список кластера, содержимое такое же, как и раньше, вам нужно только изменить его первый байт на 54 Восстановление файла можно завершить. То есть щелкните правой кнопкой мыши E5-> Edit-> Fill selection block-> введите шестнадцатеричное число.

Shift + удалить удаленный файл восстановление файла

Первый байт файла в корневом каталоге становится E5 , Размер файла остается прежним, номер первого кластера файла остается неизменным, а содержимое связанного списка кластеров, соответствующего файлу, очищается.

Согласно первому номеру кластера, равному 5, измените содержимое связанного списка кластера как

То есть восстановление прошло успешно.

Предпосылка этого метода заключается в том, что старшие 16 бит номера первого кластера по умолчанию равны 0, а метод тестирования для определения того, равен ли номер первого кластера 0:

Интеллектуальная рекомендация

Реализация JavaScript Hashtable

причина Недавно я смотрю на «Структуру данных и алгоритм — JavaScript», затем перейдите в NPMJS.ORG для поиска, я хочу найти подходящую ссылку на библиотеку и записывать его, я могу исполь.

MySQL общие операции

jdbc Транзакция: транзакция, truncate SQL заявление Transaction 100 000 хранимая процедура mysql msyql> -определить новый терминатор,Пробелов нет mysql>delimiter // mysql> -создание хранимой .

Используйте Ansible для установки и развертывания TiDB

жизненный опыт TiDB — это распределенная база данных. Настраивать и устанавливать службы на нескольких узлах по отдельности довольно сложно. Чтобы упростить работу и облегчить управление, рекомендуетс.

Последняя версия в 2019 году: использование nvm под Windows для переключения между несколькими версиями Node.js.

С использованием различных интерфейсных сред вы можете переключаться между разными версиями в любое время для разработки. Например, развитие 2018 года основано наNode.js 7x версия разработана. Тебе эт.

Шаблон проектирования — Создать тип — Заводской шаблон

Заводская модель фабрикиPattern Решать проблему: Решен вопрос, какой интерфейс использовать принципСоздайте интерфейс объекта, класс фабрики которого реализуется его подклассом, чтобы процесс создания.

Корневой каталог диска имеет формат файловой системы fat что делать

Единственным обязательно присутствующим каталогом является корневой каталог. В FAT12/FAT16 корневой каталог имеет фиксированный размер в секторах, который вычисляется из значения BPB_RootEntCnt, и следует на диске непосредственно после таблицы FAT.

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

— он не метится штампами даты-времени;

— не имеет собственного имени (кроме «»);

— не содержит файлов «.» и «..» (см. далее);

— является единственной директорией, в которой может штатно располагаться файл метки тома (см. далее).

Структура файловой записи

Файловая запись FAT32 состоит из следующих структур:

— DIR_Name. 11-байтное поле по относительному адресу 0, содержит короткое имя файла (в рамках стандарта 8.3). По поводу имен файлов см. далее.

— DIR_Attr. Байт по адресу 0x0B, отвечающий за атрибуты файла.

— DIR_NTRes. Байт по адресу 0x0C, используется в Windows NT.

— DIR_CrtTimeTenth. Байт по адресу 0x0D. Счетчик десятков миллисекунд времени создания файла, допустимы значения 0-199. Поле часто неоправданно игнорируется.

— DIR_CrtTime. 2 байта по адресу 0x0E. Время создания файла с точностью до 2 секунд.

— DIR_CrtDate. 2 байта по адресу 0x10. Дата создания файла.

— DIR_LstAccDate. 2 байта по адресу 0x12. Дата последнего доступа к файлу (т.е. последнего чтения или записи — в последнем случае приравнивается DIR_WrtDate). Аналогичное поле для времени не предусмотрено.

— DIR_FstClusHI. 2 байта по адресу 0x14. Номер первого кластера файла (старшее слово, на томе FAT12/FAT16 равен нулю).

— DIR_WrtTime. 2 байта по адресу 0x16. Время последней записи (модификации) файла, например его создания.

— DIR_WrtDate. 2 байта по адресу 0x18. Дата последней записи (модификации) файла, в том числе создания.

— DIR_FstClusLO. 2 байта по адресу 0x1A. Номер первого кластера файла (младшее слово).

— DIR_FileSize. DWORD, содержащий значение размера файла в байтах. Фундаментальное ограничение FAT32 — максимально допустимое значение размера файла составляет 0xFFFFFFFF, т.е. 4 294 967 295 байт (4 Гб минус 1 байт). Уже к 2005 г. это вызывало массу неудобств.

Если первый байт записи FAT (т.е. DIR_Name[0]) суть 0xE5 или 0x05, это значит, что запись свободна (соответствующий файл был удален). Если DIR_Name[0] = 0х00, это значит, что свободна не только эта запись, но и все записи директории после нее; Windows не анализирует остаток каталога после обнуленной записи.

Имя файла в FAT

Поле DIR_Name логически разбивается на первые 8 символов, образующие имя файла, и последние 3, образующие расширение. Точка-разделитель добавляется на уровне файловой системы и не включается в поле имени. Если имя и расширение файла не заполняют отведенное для них место, остальные байты поля DIR_Name забиваются пробелами (0x20). Имя и расширение файла могут содержать любую комбинацию букв, цифр или символов с ASCII-кодами свыше 127; специальные символы распределяются на три группы:

Служебные символы имеют специальное значение в Windows и не могут входить в состав имени файла, в то время как символы из числа запрещенных все же можно включить в имя файла ценой возникновения LFN-записи (см. ниже). Например, каталог с именем, начинающимся точкой, можно создать в режиме командной строки (mkdir .directory) или в оболочках FAR, Total Commander, WinRAR. Имя файла не может начинаться или заканчиваться пробелом; ни в каком байте поля имени недопустимы служебные символы ASCII, предшествующие пробелу, т.е. 0х00-0х1F (за исключением вышеоговоренного случая 0х05). Имена сохраняются по кодовой странице OEM/DOS в конфигурации, имевшей место на момент создания файла. Полный путь к файлу не может превышать 80 символов (3 — буква диска; 64 — путь; 12 — имя файла, включая точку-разделитель; 1 — разделитель NUL).

Все буквенные символы 8.3 имени всегда переводятся и сохраняются в поле DIR_Name в верхнем регистре. Для сохранения исходного регистра имени Windows NT используется байт DIR_NTRes: его биты 3 и 4 при значении 1 свидетельствуют, что соответственно имя и/или расширение файла следует отображать в нижнем регистре. Если имя или расширение содержат символы обоих регистров, для такого файла создается LFN-запись (см. ниже). Windows 9x для сохранения нетривиального регистра имени всегда создает LFN-запись и игнорирует поле DIR_NTRes. Как следствие, имя одного и того же файла, лишенного ассоциированной LFN-записи, может отображаться Windows 9x целиком в верхнем регистре, а Windows NT — (частично) в нижнем.

Файловые атрибуты

В байте атрибутов верхние два бита являются резервными и всегда должны быть обнулены. Остальные биты распределяются таким образом, что значение 0x01 соответствует атрибуту «только для чтения», 0x02 — «скрытый», 0x04 — «системный», 0x20 — «архивный». Набор нескольких атрибутов составляется суммированием основных значений. Кроме этих стандартных атрибутов, используются ещё следующие: 0x10 — свидетельствует, что файл является каталогом (контейнером для других файлов); 0x08 — ATTR_VOLUME_ID, специальный атрибут уникального файла нулевого размера в корневом каталоге, имя которого считается меткой тома. Ограничение длины метки тома FAT в 11 символов связано с размером поля DIR_Name. Если файл имеет набор атрибутов READ_ONLY | HIDDEN | SYSTEM | VOLUME_ID (значение 0х0F), это свидетельствует, что запись не соответствет отдельному файлу, а содержит часть длинного имени другого файла, не вписывающегося в рамки 8.3 (см. далее).

Статья ASM. FAT32 – описание файловой системы

В основе проектирования операционных систем лежит работа с информацией. Здесь перед инженерами встают три задачи: во-первых определиться с типом накопителей (HDD, SSD, Flash), чтобы предоставить системе соответствующий драйвер. Второй момент – это способ хранения данных в виде файловых систем Ext, HPFS, FAT, NTFS и прочие. Но что ещё немаловажно, это предусмотреть возможность восстановления инфы в случае критических сбоев. Последний вопрос стоит ребром, что побудило Microsoft создать до блеска отшлифованную NTFS (New-Technology-File-System). Её мы не будем пока трогать, и отправив на скамейку запасных, рассмотрим только FAT.

1.1. Иерархия: диск[сектор] + том[кластер]

Для начала разберём геометрию накопителей.

• На нижнем уровне, производитель делит всю поверхность на 512-байтные сектора (отсчёт с единицы). Но утилиты и ОС могут предоставлять нам секторы > 512-байт, однако они по-любому будут кратны 512, например 1024-байт. Сектор – мин.порция обмена с диском, мы не сможем прочитать с него кол-во байт не кратное 512. Это нужно учитывать при вызове функций Read/WriteFile() .

Самый первый сектор всегда отводится под MBR (MasterBootRecord), где указывается объём накопителя, и смещение к его логическому тому. Вместо устаревшей трехмерной CHS с лимитом в 8 ГБ, в современном мире используется уже линейный подход LBA48 (48-bit Logical Block Address), в которой секторы нумеруются с нуля, а не как прежде с единицы. LBA позволяет адресовать диск размером 128 ПетаБайт, при размере блока 512.

• ОС не может хранить файлы на дисках без логических разделов (том, volume, макс=26 с литерами от А: до Z. Значит нужно создать этот том, и установить на него какую-нибудь файловую систему (далее FS), чтобы ОС знала о порядке расположения файлов – эта операция известна как форматирование. Бинарные файлы можно сбрасывать и на "сырой" RAW-том, только за доступ к ним будем отвечать уже сами. Такой изврат применяется редко, например при работе с дисками без поддержки их со-стороны ОС (см.прерывание BIOS int-13h).

• Допустим, имеем первый раздел C:\. Его смещение от начала диска указывается в секторе(1) MBR. У всех накопителей, первый раздел начинается как-минимум с сектора(63). Если учесть, что непосредственно данные и код MBR занимают всего 1-сектор, следовательно перед началом тома в загашнике остаётся аж 62 свободных, а это: 62*512=31 КБ пространства, где можно скрыть от FS конфиденциальную инфу. Важно понять, что FS устанавливается не на диск, а на его логический том, поэтому драйвер считает началом тома LBA(0), хотя в глазах биоса это сектор(63).

Такой расклад создаёт путаницу, но достаточно запомнить, что функцией CreateFile() можно открыть как физ.диск (тогда LBA(0) указывает на его начало), а можно запросить и логический том диска, например по букве C:\. В этом случае LBA(0) считается уже указателем на начало раздела. То-есть всё зависит от того, какой объект мы открываем.

• Каждая запись в таблице FAT указывает на определённый блок-информации в области данных. Если указателями адресовать мелкие секторы диска, то во-первых нужно будет увеличить разрядность этих указателей до 64-бит (т.к. диски могут быть исполинских размеров), а во-вторых потребуется огромное кол-во самих линков, что повлияет на размер таблицы. Файлы до 512-байт встречаются редко, а значит нет смысла искать их в каждом секторе. По этой причине, несколько секторов всегда собираются в "кластер" , что позволяет увеличить полезное пространство, за счёт уменьшения таблицы FAT.

C дефолтными настройками, все FS создают кластеры размером 4096-байт, а это 8-секторов. В служебной таблице FAT лежат теперь указатели не на секторы, а на кластеры, и соответственно размер её сокращается в 8-раз! Но помимо плюсов есть и минусы.. Если в txt-файле у нас 11-байтная строка "Hello World", на диске этот файл будет занимать 4 КБ, т.к. мин.блоком хранения данных уже получается кластер. Зайдите в свойства любого файла и посмотрите, какой он имеет реальный размер, и сколько ему выделено на диске:

Hello.png

Как видим – картина удручающая, и при кластерном распределении у нас улетает в трубу огромная часть пространства. Но говорят, "случaйнaя удaчa принocит бoльшe рaдocти, чeм зaкoнoмeрный уcпex", и видимо инженеры с этим согласны. Здесь они вынуждены сесть на шпагат и только надеяться, что большинство файлов юзера будут размером больше 4КБ. Исключительно в этом случае экономия на размере таблицы оправдает себя.

Чтобы предотвратить суицид крайне впечатлительных юзверей, инженеры построили себе хату-с-краю, и предложили нам самостоятельно выбирать кол-во секторов в кластере – данный параметр имеется у большинства приличных утилит форматирования и называется "SectorPerCluster" . Если у вас много мелких файлов и вы считаете 4КБ для хранения каждого из них слишком расточительным, то всегда можете изменить размер кластера в диапазоне от 512-байт, до 64КБ. Вот скрин одной из таких утилит "Fat32format":

Fat32Format.png

1.2. Организация FAT – вид сверху

На рис.ниже представлены основные отличия FAT12/16, от более совершенной FAT32.
Здесь видно, что раньше, в системной области четыре служебные структуры располагались плотно друг-к-другу: это блок параметров BPB с адресом LBA(0) (не путать с MBR), далее основная таблица FAT, следом её резервная копия FAT2, и в хвосте корневой каталог. Размер таблицы зависит от общего кол-ва секторов в накопителе. Очевидно, что чем больше размер диска, тем больше в нём кластеров, и соответственно больше указателей на кластеры в таблице FAT.

Теперь посмотрим на организацию FAT32 справа..
Корневой каталог уже съехал с насиженных мест и может находится где угодно. Драйвер FS считает его обычным файлом с доступом на запись, что даёт возможность каталогу RootDir расширяться динамически. Кроме того, блок BPB разбух с одного до трёх секторов, хотя в FSInfo нет ничего интересного, а последний отправлен в резерв для наших потомков. Причём имеется и зеркало ВРВ, всегда по адресу LBA(6). В доке на FAT32 эту область назвали "Резервные сектора" , сразу после которых расположилась уже таблица FAT со-своей копией. Благодаря такой организации, драйвер FS может восстанавливать теперь не только таблицу FAT, но и загрузочный сектор ОС в блоке параметров BPB.

FAT_16_32.png

2. Загрузочная запись и блок BPB – Bios Parametr Block

В самом начале тома с адресом LBA(0), во всех версиях FAT лежит блок параметров биос ВРВ. Он занимает ровно один 512-байтный сектор и содержит в себе базовые параметры файловой системы, а так-же код загрузчика ОС с сигнатурой 0x55AA. Запустим HEX-редактор и через меню "Инструменты" откроем в нём свою флэш – вот как это выглядит у меня:

FAT_BPB.png

Загрузчик нас не интересует, ..более того, если Flash не загрузочная, Boot-block вообще забит нулями, и это часто практикуется (например на microSD телефонов). Зато ВРВ критически важен для драйвера, посколько именно в нём зарыта инфа о расположении оставшихся трёх/системных структур – это парочка FAT, и корневой каталог RootDir. Для программного доступа к этому блоку я создал инклуд, и поместил в него структуру ВРВ с описанием каждого поля. Здесь-же перечислю только те поля, которые откроют нам доступ к FAT и корневому каталогу:

FAT_BPB_Decode.png

В спеке на FAT32 от Microsoft говорится, что положение корневого каталога "RootDir" строго не регламентируется, и он может лежать в произвольном кластере области данных. Однако на практике, Root в моих тестах всегда расположен сразу после двух таблиц FAT, т.е. адрес его фиксирован. Не знаю, может и есть в природе отбившиеся от стада утилиты форматирования, но лично мне таковые ещё не встречались.

В любом случае, найти каталог можно по приведённой выше формуле, и если это штатный форматер Win (как и большинство других), то вторая часть формулы (RootCluster-2) * SectorPerCluster будет всегда возвращать нуль. Тогда получается, что каталог лежит сразу после резервных секторов + размеры двух таблиц FAT (см.первый скрин FAT16). А вообще, жить без идеологии и надеяться на случай не есть гуд, а потому лучше использовать полную формулу, тем-более что мягкие уже грозно предупредили нас об этом.

3. Таблица FAT – File Allocation Table

Теперь выйдем из матрицы, и поговорим о более насущном..
Организация любой файловой системы – невероятно сложный механизм. Однако в случае с FAT, это утверждение сильно притянуто за-уши. Именно благодаря свой простоте она дожила до наших дней и не собирается уходить со-сцены, а наоборот мутировала в 64-битную ExFAT.

Значит чтобы получить указатель на таблицу, нужно прочитать поле "RsvdSectorCount" структуры ВРВ. В данном случае там прописан сектор(1000), и если умножить его на 512, получим смещение в байтах от начала тома = 0x0007D000. Далее, читаем из той-же ВРВ поле "FATSz32" с размером, и передаём оба полученных значения функции ReadFile() . Так, в приёмном буфере функции получим дамп таблицы FAT, для её детального разбора.

Таблица – это массив указателей на кластеры, без каких-либо служебных полей. Отсчёт кластеров в массиве начинается с нуля, а разрядность указателей 32-бит (отсюда и название FAT). Старшие 4-бита отправлены в резерв, остаётся 28. Тогда получается, что FAT32 может адресовать всего: 2^28=268.435.456 кластеров, и если размер каждого из них 4096-байт, то макс.объём диска = 1ТБ. Однако это теоретический предел, ведь всегда можно увеличить размер кластера в 2,4,8 и даже в 16-раз, при этом оставив 28-битные линки. Так-что на практике становится доступным диск 16ТБ, а если требуется больше, нужно переходить на ExFAT, в которой разрядность указателей расширена до 64-бит.

На рисунке ниже представлен фрагмент таблицы FAT (для удобства, в меню "Вид" сгруппируйте отображение по 4-байта).

• Два/первых элемента массива всегда равны 0x0FFFFFF8 + 0xFFFFFFFF , и не используются в качестве указателей на кластеры – это просто сигнатура таблицы, а байт(F8) определяет "MediaType" (варианты: F0=Floppy, F8=Hard, FA=Ram). Когда блок ВРВ и его резервная копия безвозвратно утеряны (бэд-сектор или вирь), по данной сигнатуре можно будет найти таблицу, чтобы попытаться спасти информацию.

FAT_Entry.png

• 32-битные элементы начиная со-смещения(8), отображают уже состояние соответствующих кластеров в области-данных диска. Он может быть свободным(0), выделенным(2), зарезервированным(F6) или повреждённым(F7). Элемент с макс.значением 0x0FFFFFFF является маркером последнего кластера файла EOC (EndOfCluster). Если файл большой и занимает несколько кластеров, указатели связываются в цепочку до тех пор, пока не встретится этот маркер (выделены красным).

• Древовидная структура расположения файлов на диске, начинается с корневого каталога – мы не видим его среди привычных нам папок, но он присутствует всегда. Ему назначается имя в виде "метки тома", которую запрашивает у нас система, при форматировании раздела. Именно поэтому второй элемент таблицы по смещению(8) имеет маркер окончания 0x0FFFFFFF , т.к. под корневой каталог отводится всего один кластер(2) (см.структуру ВРВ—>RootCluster).

Чтобы продемонстрировать организацию таблицы FAT, я форматнул свою флэш и сбросил на неё всего два файла. Первый размером 7.4КБ, поэтому занимает на диске два 4К-байтных кластера (выделен зелёным), а второй размером 20.2КБ и как видим, загребает 5 (выделенных синим) кластеров. Далее следуют null-элементы, которые информируют о свободном пространстве.

Обратите внимание, что после кластера(2), следующий элемент таблицы указывает сразу на кластер 0х00000004 . Это-же касается и записи после маркера EOC по смещению(14h) – перепрыгнув через один, она линкует сразу на кластер(6). Здесь возникает вопрос: куда подевались кластеры 3 и 5, ведь значения 0х0FFFFFFF это не указатели, а просто маркеры окончания цепочки?

Дело в том, что в таблице FAT хранятся указатели на следующие кластеры файла, а первый – прописывается в корневом каталоге RootDir, где лежит полный паспорт файла. То-есть когда файл меньше 4096-байт, выделенный под него первый кластер указывается в корневом каталоге, а в таблице получим лишь связанный с ним EOC. Но если файл выходит за границы одного кластера, то следующие указываются уже в таблице FAT, пока не встретится маркер окончания.

4. Корневой каталог " RootDirectory "

Файловая система требует базы, где хранилась-бы информация о всех, существующих на диске, файлах. Для FAT32(16) такой базой является "корневой каталог". Чтобы описать свойства одного файла, инженерам потребовался блок размером в 32-байта, где можно найти: имя файла/каталога в формате 8.3, его размер, дату создания, атрибуты, а так-же номер первого кластера , с которого начинается данный файл. Если-же хвост файла торчит снаружи выделенного кластера, номер следующего указывается уже в таблице FAT. Иначе, в таблице будет прописан только маркер окончания EOC. Таким образом, таблица и корневой-каталог логически связаны между собой, и потеря любого из них приведёт к краху всей FS.

В доках, 32-байтную запись каталога назвали SFN , что подразумевает "Short File Name". Короткая (short) она потому, что хранит имя в досовском формате(8.3). Но в современном мире мы уже отвыкли от всевозможных рамок, и предпочитаем для файлов более длинные имена, которые Win всё-же ограничивает до 256-символов. Поэтому в FAT предусмотрена родственная к SFN структура LFN (Long) – она имеет такой-же размер 32-байт, но является не самостоятельной, а дополнением к SFN. Если в имени файла меньше 8-ми символов, структура LFN может вообще отсутствовать, но SFN в наличии всегда.

Нужно признать, что организация длинных имён в FAT выполнена через известное место. Так, каждая структура LFN несёт в себе макс. 13-символов имени файла, а если их больше, то добавляется ещё одна структура и получаем 26-символов. Если-же и этого мало, то подключается сл.структура и т.д. Причём имя задаётся в Unicode (где на каждый символ расходуются по 2-байта) и внутри одной структуры разбросано по трём/разным полям. Более того, порядок следования цепочки структур обратный – т.е. сначала идёт последняя LFN(x), после неё LFN(x-1) и далее в том-же духе. Общее кол-во структур указывается в первом байте "Ordinal" . Здесь становится очевидным, что разработчик явно был под веществами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *