Skip to content

Instantly share code, notes, and snippets.

Created September 15, 2017 21:43
Show Gist options
  • Save anonymous/2535e52f5b374536431df7659ae07069 to your computer and use it in GitHub Desktop.
Save anonymous/2535e52f5b374536431df7659ae07069 to your computer and use it in GitHub Desktop.
Корневой каталог fat

Корневой каталог fat - Файловая система FAT



Тема контрафактного ПО и защиты авторских прав сегодня актуальна как никогда. Политические события как катализатор возникновения уязвимости Законодательная инициатива Государственной Думы и силовых структур, Так уж устроен человек, что взгляд его обращен чаще всего в Будущее, Архитектура файловой системы FAT. Общая характеристика файловой системы FAT. Структура раздела с файловой системой FAT. Файловая система FAT File Allocation Table была разработана Биллом Гейтсом и Марком Макдональдом в году и первоначально использовалась в операционной системе DOS. В дальнейшем DOS была приобретена Microsoft и стала основой для ОС MS-DOS 1. FAT была предназначена для работы с гибкими дисками размером менее 1 Мб и вначале не предусматривала поддержки жёстких дисков. В файловой системе FAT дисковое пространство логического раздела делится на две области — системную и область данных см. Системная область создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой. Системная область файловых систем FAT состоит из следующих компонентов:. Область данных логического диска содержит файлы и каталоги, подчиненные корневому, и разделена на участки одинакового размера — кластеры. Кластер может состоять из одного или нескольких последовательно расположенных на диске секторов. Число секторов в кластере должно быть кратно 2N и может принимать значения от 1 до Размер кластера зависит от типа используемой файловой системы и объема логического диска. Своё название FAT получила от одноимённой таблицы размещения файлов — File Allocation Table, FAT. В таблице размещения файлов хранится информация о кластерах логического диска. Каждому кластеру соответствует элемент таблицы FAT, содержащий информацию о том, свободен данный кластер или занят данными файла. Если кластер занят под файл, то в соответствующем элементе таблицы размещения файлов указывается адрес кластера, содержащего следующую часть файла. Номер начального кластера, занятого файлом, хранится в элементе каталога, содержащего запись об этом файле. Последний элемент списка кластеров содержит признак конца файла EOF — End Of File. Первые два элемента FAT являются резервными. Файловая система FAT всегда заполняет свободное место на диске последовательно от начала к концу. При создании нового файла или увеличении уже существующего она ищет самый первый свободный кластер в таблице размещения файлов. Если в процессе работы одни файлы были удалены, а другие изменились в размере, то появляющиеся в результате пустые кластеры будут рассеяны по диску. Если кластеры, содержащие данные файла, расположены не подряд, то файл оказывается фрагментированным. Существуют следующие типы FAT — FAT12, FAT16, FAT Названия типов FAT ведут свое происхождение от размера элемента: В FAT32 четыре старших двоичных разряда зарезервированы и игнорируются в процессе работы операционной системы. За таблицами размещения файлов следует корневой каталог. Для файловых систем FAT12 и FAT16 положение корневого каталога на разделе и его размер жестко зафиксированы. В FAT32 корневой каталог может быть расположен в любом месте области данных раздела и иметь произвольный размер. Одной из характеристик ранних версий FAT FAT12 и FAT16 является использование коротких имен файлов. Если введенное пользователем имя файла короче 8 символов, то оно дополняется пробелами код 0x20 ; если введенное расширение короче трёх байтов, то оно также дополняется пробелами. В файловых системах FAT32 и VFAT виртуальная FAT, расширение FAT16 включена поддержка длинных имен файлов long file name, LFN. Для хранения длинного имени используются элементы каталога, смежные с основным элементом. Имя файла записывается не ASCII-символами, а в Unicode. В одном элементе каталога можно сохранить фрагмент длиной до 13 символов Unicode. Неиспользованный участок последнего фрагмента заполняется кодами 0xFFFF. Структура элемента каталога для длинного имени файла представлена в таблице 2. Длинное имя записывается в каталог первым, причем фрагменты размещены в обратном порядке, начиная с последнего. Вслед за длинным полным именем размещается стандартный описатель файла, содержащий укороченный по специальному алгоритму вариант этого имени. Пример хранения длинного имени файла показан здесь: В первом секторе логического диска с системой FAT располагается загрузочный сектор и блок параметров BIOS. Начальный участок данного блока для всех типов FAT идентичен таблица 3. Различия в структуре загрузочных секторов для разных типов FAT начинаются со смещения 0x Для FAT12 и FAT16 структура имеет вид, показанный в таблице 4, для FAT32 — в таблице 5. Смещение Размер, байт Описание 0x24 1 Номер дисковода для прерывания 0х13 0x25 1 0x26 1 Признак расширенной загрузочной записи 0x29 0x27 4 Номер логического диска 0x2B 11 Метка диска 0x36 8 Текстовая строка с аббревиатурой типа файловой системы. Размер, байт Описание 4 Количество секторов, занимаемых одной копией FAT 2 Номер активной FAT 2 Номер версии FAT В настоящее время используется значение 0: Кроме перечисленных в таблицах 2-го и 3-го полей, нулевой сектор логического диска должен содержать в байте со смещением 0x1FE код 0x55, а в следующем байте смещение 0x1FF — код 0xAA. Указанные два байта являются признаком загрузочного диска. Таким образом, загрузочный сектор выполняет две важные функции: На логическом диске с организацией FAT32 дополнительно присутствует структура FSInfo, размещаемая в первом секторе резервной области. Эта структура содержит информацию о количестве свободных кластеров на диске и о номере первого свободного кластера в таблице FAT. Формат структуры описан в таблице 6. Структура сектора FSInfo и резервного загрузочного сектора FAT Размер, байт Описание 4 Значение 0x — сигнатура, которая служит признаком того, данный сектор содержит структуру FSInfo Зарезервировано содержит 0 4 Значение 0x сигнатура 4 Содержит текущее число свободных кластеров на диске. Если в поле записано значение 0xFFFFFFFF, то число свободных кластеров неизвестно, и его необходимо вычислять 4 Содержит номер кластера, с которого дисковый драйвер должен начинать поиск свободных кластеров. Если в поле записано значение 0xFFFFFFFF, то поиск свободных кластеров нужно начинать с кластера номер 2 12 Зарезервировано содержит 0 4 Сигнатура 0xAA — признак конца структуры FSInfo. Для доступа к содержимому файла, находящемуся на разделе с файловой системой FAT, необходимо получить номер первого кластера файла. Этот номер, как мы уже установили, входит в состав элемента каталога, содержащего запись о файле. Номеру первого кластера соответствует элемент таблицы FAT, в котором хранится адрес кластера, содержащего следующую часть файла. Элемент FAT, соответствующий последнему кластеру в цепочке, содержит сигнатуру конца файла. Для FAT12 это значение составляет 0xFFF, для FAT16 — 0xFFFF, для FAT32 — 0xFFFFFFFF. Программная реализация алгоритма чтения файла с логического раздела с файловой системой FAT Разработаем модуль, выполняющий чтение N первых кластеров файла, созданного на разделе с файловой системой FAT Параметр N число кластеров для считывания является переменной величиной и задается пользователем. Модуль функционирует под управлением ОС Linux. В заголовочном файле определены структурные типы, описывающие основные компоненты файловой системы FAT — загрузочный сектор, сектор FSInfo, структуры элементов каталога для короткого и длинного имён файлов. Продолжим рассмотрение программной реализации алгоритма и определим имя раздела, на котором создана файловая система FAT Задаем полное имя файла, содержимое которого мы хотим прочитать. Напомню, что мы работаем только с короткими именами файлов. Порядок работы с длинными именами в данной статье не рассматривается. Считываем первые 10 кластеров файла. Параметры функции — полное имя файла и число кластеров для чтения. Функция возвращает число прочитанных кластеров или -1, если при чтении произошла ошибка:. Скопируем из этой структуры размер сектора, число записей в корневом каталоге и общее число секторов на разделе:. Имея все записи корневого каталога, мы можем добраться до содержимого файла test. С этой целью организуем цикл. В теле цикла проведем разбор полного имени файла, выделяя его элементы — подкаталоги их у нас два, Folder1 и Folder2 и имя искомого файла test. Для каждого элемента полного имени файла определяем начальный кластер. Для этого ищем в элементах каталога начиная с корневого запись, соответствующую элементу полного имени, и считываем эту запись. Если это файл — считываем первые num кластеров. Для контроля считанную информацию сохраним в отдельном файле:. Считываем из FAT16 номер следующего кластера, занятого под данный файл. Если это последний кластер — прерываем цикл и возвращаемся в главную функцию:. Результат помещается в глобальную структуру fbs:. Смещение к кластеру на разделе вычисляется по формуле см. Выделяем память для хранения содержимого каталога, считываем содержимое стартового кластера и получаем из таблицы FAT16 значение очередного кластера:. Для поиска организуем цикл. Совпадение этих полей означает, что мы нашли в массиве элементов каталога запись искомого файла:. Весь вышеприведенный код находится в каталоге FAT16, файл fat Для получения исполняемого модуля создадим Makefile следующего содержания:. В целом алгоритм чтения файла с раздела FAT12 идентичен алгоритму чтения файла с раздела FAT Отличие заключается в процедуре чтения элементов из таблицы FAT Таблица FAT16 рассматривалась нами как простой массив разрядных элементов. Для чтения элементов таблицы FAT12 в [1] предложен следующий алгоритм:. Если стартовый номер кластера — четное число, сдвигаем считанное из таблицы значение на 4 бита в сторону младших разрядов, если нечетное — суммируем его с 0x0FFF:. Остановимся чуть подробнее на самом алгоритме. Предположим, что на разделе с FAT12 создан файл, который занимает 9-й и й кластеры. Каждый элемент FAT12 занимает 12 бит. Их необходимо отбросить, а для этого достаточно сдвинуть считанный элемент на 4 бита в сторону младших разрядов, что и предусмотрено алгоритмом. Смещение к му элементу будет равно 15 байт, и старшие 4 бита будут принадлежать му элементу FAT. Чтобы их отбросить, необходимо выполнить операцию AND над м элементом и маской 0x0FFF, что так же соответствует вышеприведенному алгоритму. Алгоритм чтения файла с раздела с файловой системой FAT32 практически не отличается от алгоритма для FAT16, за исключением того, что в FAT32 корневой каталог может располагаться в любом месте раздела и иметь произвольный размер. Поэтому, чтобы было интереснее, усложним задачу — предположим, что нам известен только номер раздела с файловой системой FAT Чтобы считать с этого раздела информацию, необходимо вначале определить его координаты — смещение к разделу от начала диска. А для этого надо иметь представление о логической структуре жесткого диска. Пространство на жестком диске может быть организовано в виде одного или нескольких разделов, а разделы могут содержать один или несколько логических дисков. На жестком диске по физическому адресу располагается главная загрузочная запись Master Boot Record, MBR. В структуре MBR находятся следующие элементы:. Таблица разделов описывает размещение и характеристики имеющихся на винчестере разделов. Разделы диска могут быть двух типов — primary первичный, основной и extended расширенный. Максимальное число primary-разделов равно четырем. Наличие на диске хотя бы одного primary-раздела является обязательным. Extended-раздел может быть разделен на большое количество подразделов — логических дисков. Упрощенно структура MBR представлена в таблице 7. Таблица разделов располагается в конце MBR, для описания раздела в таблице отводится 16 байт. Смещение Размер, байт 0 0x1BE 16 0x1CE 16 0x1DE 16 0x1EE 16 0x1FE 2. Первым байтом в элементе раздела идет флаг активности раздела 0 — неактивен, 0x80 — активен. Он служит для определения, является ли раздел системным загрузочным и есть ли необходимость производить загрузку операционной системы с него при старте компьютера. Активным может быть только один раздел. За флагом активности раздела следуют координаты начала раздела — три байта, означающие номер головки, номер сектора и номер цилиндра. Номера цилиндра и сектора задаются в формате прерывания Int 0x13, то есть биты содержат номер сектора, биты — старшие два бита разрядного номера цилиндра, биты — младшие восемь бит номера цилиндра. Затем следует кодовый идентификатор System ID, указывающий на принадлежность данного раздела к той или иной операционной системе. Идентификатор занимает один байт. За системным идентификатором расположены координаты конца раздела — три байта, содержащие номера головки, сектора и цилиндра соответственно. Следующие четыре байта — это число секторов перед разделом, и последние четыре байта — размер раздела в секторах. Элемент первичного раздела указывает сразу на загрузочный сектор логического диска в первичном разделе всегда имеется только один логический диск , а элемент расширенного раздела — на список логических дисков, составленный из структур, которые именуются вторичными MBR Secondary MBR, SMBR. Свой блок SMBR имеется у каждого диска расширенного раздела. SMBR имеет структуру, аналогичную MBR, но загрузочная запись у него отсутствует заполнена нулями , а из четырех полей описателей разделов используются только два. Первый элемент раздела при этом указывает на логический диск, второй элемент указывает на следующую структуру SMBR в списке. Последний SMBR списка содержит во втором элементе нулевой код раздела. Следующий массив структур устанавливает соответствие между кодом типа раздела и его символьным отображением:. Следующий массив структуры будет содержать информацию о логических дисках на устройстве жестком диске:. Открываем устройство, получаем информацию о таблице разделов на устройстве и отображаем информацию о разделах:. Ищем идентификатор расширенного раздела. Если таковой имеется, вычисляем смещение к расширенному разделу и считываем информацию о логических дисках:. Первый элемент будет указывать на логический диск, а второй — на следующую структуру SMBR:. Для получения стартового номера кластера в файловой системе FAT32 необходимо задействовать старшее слово номера первого кластера файла — поле starthi структуры dentry:. Назначение следующих трёх функций — получить содержимое системной области, то есть загрузочного сектора, структуры FSInfo и таблицы FAT Параметры функции — стартовый кластер каталога. Если каталог занимает один кластер — выходим, если нет — увеличиваем размер памяти и продолжаем чтение:. Последняя функция, которую мы рассмотрим, ищет в содержимом каталога элемент, соответствующий искомому файлу:. Для поиска организуем цикл и найденную запись поместим в глобальную структуру dentry:. Отличия в организации хранения записей о файлах в каталогах для файловых систем FAT и EXT2. Несколько слов об отличиях в организации хранения записей о файлах в каталогах для файловых систем FAT и EXT2. Структура файловой системы EXT2 была рассмотрена в [3]. C FAT мы только что ознакомились — в ней все элементы каталога имеют фиксированную величину. При создании файла драйвер файловой системы ищет первую незанятую позицию и заполняет её информацией о файле. Если длина каталога не умещается в одном кластере, то под него отводится ещё один кластер и т. Предположим, у нас есть раздел с файловой системой EXT2, размер блока равен байт. На этом разделе мы создаем каталог. Размер каталога будет равен размеру блока — байт. В каталоге операционная система сразу создаёт две записи — запись текущего и запись родительского каталогов. Запись текущего каталога займет 12 байт, в то время как длина записи родительского будет равна байта. Создадим в этом каталоге какой-нибудь файл. После этого в каталоге будут присутствовать три записи — запись текущего каталога длиной 12 байт, запись родительского каталога длиной уже 12 байт, и запись созданного файла длиной, как вы наверно догадались, байт. Если мы удалим созданный файл, длина записи родительского каталога опять возрастёт до байт. Таким образом, при создании файла драйвер файловой системы EXT2 ищет в каталоге запись максимальной длины и расщепляет её, выделяя место для новой записи. Ну, а если всё-таки места не хватает, под каталог отводится ещё один блок, и длина каталога становится равной байт. Старый вариант этой функции выглядел так:. Возвращаемое значение - номер inode файла. Для определения порядкового номера inode файла необходимо найти. Для этого организуем цикл: Если имена совпадают - выходим из цикла: Представляем работы Виктора Чумачева. Именно его забавные и воздушные, как ИТ, иллюстрации украшают многие серьезные статьи в журнале. Каждый раз, получая новый рисунок Виктора, мы в редакции улыбаемся. А улыбка, как известно, смягчает душу. Поэтому смотрите на его рисунки — и пусть у вас будет хорошее настроение! Красть или не красть? О пиратском ПО как о российском феномене. Опоздавших не бывает, или книга о стеке. Теория вычислений для программистов. От математики к обобщенному программированию. О пиратском ПО как о российском феномене Тема контрафактного ПО и защиты авторских прав сегодня актуальна как никогда. Поле, уточняющее время создания файла содержит десятки миллисекунд. Поле обрабатывается только в FAT Дата последнего обращения к файлу для записи или считывания данных. Старшее слово номера первого кластера файла. Число резервных секторов в резервной области раздела, начиная с первого сектора раздела. Общее число секторов в разделе; если данное поле содержит 0, то число секторов задается полем по смещению 0x Для жесткого диска имеет значение 0xF8; для гибкого диска 2 стороны, 18 секторов на дорожке — 0xF0. Общее число секторов в разделе. Поле используется, если в разделе свыше секторов, в противном случае поле содержит 0. Программа анализа таблицы разделов и загрузки с активного раздела. Комментарии могут оставлять только зарегистрированные пользователи.


График работы мфц махачкала
Схемы домов в minecraft
Подсистема ввода-вывода. Файловые системы
Характеристика приоры седан
Цвета фасадов для кухни мдф пленка каталог
Интернет маркетинг пособие
Истории разведенных женщин с ребенком
1с торговля инструкция
Рисовая бумага для роллов
Какие 5 рублей ценные
Режим кормления новорожденного
Влгу рейтинговые списки 2017
Файловая система FAT (File Allocation Table - таблица размещения файлов)
Где найти счастливые монетки в аватарии
Требования к судьям арбитражного суда
Правила дорожнього руху фоменко раціборинський
Карта ливана и стран рядом
Unexpected error перевод на русский
Загрузочный сектор, FSINFO, таблица FAT и записи каталогов FAT
Конституція україни права громадян
Тест айкью какой должен быть результат
Загран паспорт сделать через мфц балашиха
Сколько длится биопсия
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment