- Дипломы
- Курсовые
- Рефераты
- Отчеты по практике
- Диссертации
Битовая карта индексных дескрипторов
Внимание: Акция! Курсовая работа, Реферат или Отчет по практике за 10 рублей!
Только в текущем месяце у Вас есть шанс получить курсовую работу, реферат или отчет по практике за 10 рублей по вашим требованиям и методичке!
Все, что необходимо - это закрепить заявку (внести аванс) за консультацию по написанию предстоящей дипломной работе, ВКР или магистерской диссертации.
Нет ничего страшного, если дипломная работа, магистерская диссертация или диплом ВКР будет защищаться не в этом году.
Вы можете оформить заявку в рамках акции уже сегодня и как только получите задание на дипломную работу, сообщить нам об этом. Оплаченная сумма будет заморожена на необходимый вам период.
В бланке заказа в поле "Дополнительная информация" следует указать "Курсовая, реферат или отчет за 10 рублей"
Не упустите шанс сэкономить несколько тысяч рублей!
Подробности у специалистов нашей компании.
Только в текущем месяце у Вас есть шанс получить курсовую работу, реферат или отчет по практике за 10 рублей по вашим требованиям и методичке!
Все, что необходимо - это закрепить заявку (внести аванс) за консультацию по написанию предстоящей дипломной работе, ВКР или магистерской диссертации.
Нет ничего страшного, если дипломная работа, магистерская диссертация или диплом ВКР будет защищаться не в этом году.
Вы можете оформить заявку в рамках акции уже сегодня и как только получите задание на дипломную работу, сообщить нам об этом. Оплаченная сумма будет заморожена на необходимый вам период.
В бланке заказа в поле "Дополнительная информация" следует указать "Курсовая, реферат или отчет за 10 рублей"
Не упустите шанс сэкономить несколько тысяч рублей!
Подробности у специалистов нашей компании.
Код работы: | W004464 |
Тема: | Битовая карта индексных дескрипторов |
Содержание
Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования «Уральский федеральный университет имени первого Президента России Б.Н. Ельцина» Институт радиоэлектроники и информационных технологий - РТФ Школа бакалавриата ДОПУСТИТЬ К ЗАЩИТЕ Руководитель образовательной программы. « » 2017 г. МОДЕРНИЗАЦИЯ ФАЙЛОВЫХ УТИЛИТ LINUX ДЛЯ СОВРЕМЕННЫХ ЗАДАЧ КОМПЬЮТЕРНОЙ БЕЗОПАСНОСТИ Выпускная квалификационная работа Пояснительная записка 10.03.01 000000 502 ПЗ Подпись Дата Ф.И.О. Руководитель д-р техн. наук, проф. В.В. Бакланов Нормоконтролер канд. техн. наук, доц. Т.М. Лысенко Студент И.А. Мазурин гр. РИ- 430011 Екатеринбург 2017 ЗАДАНИЕ НА ВКР ПЕРЕЧЕНЬ ДОКУМЕНТОВ ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЫ Документ Обозначение документа Фор мат Примечание Текстовые документы: Пояснительная записка 10.03.01 000000 502 ПЗ А4 ХХ листов Программная документация (текст программы) 10.03.01 000000 502 ПД Объем ХХ Кбайт Наглядные пособия: Презентация доклада на защите ВКР 10.03.01 000000 502 НП Объем ХХ Мбайт РЕФЕРАТ Выпускная квалификационная работа. XX с., 1 ч., XX рис., XX табл., XX источников, XX прил. ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ, ФАЙЛОВАЯ СИСТЕМА, УДАЛЕНИЕ ФАЙЛА, ВОССТАНОВЛЕНИЕ ФАЙЛА, ЛОГИЧЕСКИЙ БЛОК, ИНДЕКСНЫЙ ДЕСКРИПТОР, УТИЛИТА Объект исследования или разработки: файловая система ext4. Цель работы: изучение принципов удаления и восстановления данных в файловой системе ext4, разработка и модернизация утилит для ext4fs. Метод или методология проведения работы: изучение литературы по файловой системе ext4, экспериментальное исследование механизмов удаления файлов, программирование утилит. Результаты работы: получена информация о ext4fs, восстановлена работоспособность утилиты extview, созданы новые утилиты. Основные конструктивные, технологические и эксплуатационные характеристики: созданы утилиты на языке С++. Рекомендации по внедрению: разработанные утилиты подходят для учебных целей. Область применения: исследование файловой системы ext4. Экономическая эффективность или значимость работы: созданные утилиты помогают изучать ext4fs. Прогнозные предположения о развитии объекта исследования: возможна дальнейшая модернизация утилит. СОДЕРЖАНИЕ ВВЕДЕНИЕ 7 1 ОБЩАЯ ИНФОРМАЦИЯ О EXT4FS 8 2 СТРУКТУРА EXT4FS 10 2.1 Блоки данных 10 2.2 Суперблок 10 2.3 Описатели групп блоков 10 2.4 Гибкие группы блоков 12 2.5 Битовая карта блоков 13 2.6 Битовая карта индексных дескрипторов 13 2.7 Таблица индексных дескрипторов 13 2.8 Расширенные атрибуты 15 2.9 Структура директорий 16 2.10 Структура дерева экстентов 17 2.11 Журнал 18 3 СОЗДАНИЕ, КОПИРОВАНИЕ, ПЕРЕМЕЩЕНИЕ, УДАЛЕНИЕ И ВОССТАНОВЛЕНИЕ ФАЙЛОВ 21 3.1 Создание файлов 21 3.2 Копирование и перемещение файлов 22 3.3 Удаление и восстановление файлов в ext2fs и ext3fs 23 3.4 Удаление файлов в ext4fs 24 3.5 Восстановление данных в ext4fs 25 4 УТИЛИТЫ ДЛЯ EXT4FS 26 4.1 Debugfs 26 4.2 Extview 26 4.3 Наименование подраздела 26 5 НАИМЕНОВАНИЕ РАЗДЕЛА 4 27 5.1 Наименование подраздела 27 5.2 Наименование подраздела 27 ЗАКЛЮЧЕНИЕ 28 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 29 ПРИЛОЖЕНИЕ А. СТРУКТУРА СУПЕРБЛОКА 30 ПРИЛОЖЕНИЕ Б. НАЗВАНИЕ ПРИЛОЖЕНИЯ 34 ВВЕДЕНИЕ На современном этапе развития мы наблюдаем стремительно растущую роль информационной сферы в жизни общества. Становясь системообразующим фактором, информационная среда всё активнее оказывает воздействие на безопасность как политическую и оборонную, так и личную, экономическую и пр. На сегодняшний день современный мир настолько компьютеризирован, что без программ нашу жизнь уже трудно представить. Конечно же, компьютер просто ничего не может сам по себе без правильно подобранной для пользователя операционной системы. Каждая из них, будь то Windows, Linux, MacOC, обладает определенными характерными особенностями и занимает свое место. Если раньше Windows занимала лидирующие позиции, то потом ее «авторитет» сильно пошатнул Linux. Его популярность растет из года в год. Linux - семейство Unix-подобных операционных систем на базе ядра Linux, включающих тот или иной набор утилит и программ проекта GNU. Главными преимуществами Linux является являются открытый код, безопасность, быстродействие и многозадачность [1, 2]. Операционная система Linux поддерживает множество файловых систем, но самой популярной из них является fourth extended file system, или сокращенно ext4. Файловая система ext4 используется по-умолчанию во множестве дистрибутивов Linux, таких как Ubuntu, Debian, Fedora, OpenSUSE, Mandriva Linux, Red Hat Enterprise Linux, PCLinuxOS, AgiliaLinux [3]. Файловая система ext4 достаточно сильно отличается от своих предшественников, ext2fs и ext3fs, хоть и имеет обратную совместимость с ними. В связи с этим множество популярных утилит, такие как debugfs, работают некорректно. Поэтому возможности изучения ext4fs весьма ограничены. Обеспечение безопасности информации является одной из приоритетных задач файловой системы. Хоть ext4 и славится своей надёжностью, но и она не застрахована от угрозы потери данных. Это может случится из-за множества причин: вирусы, действия злоумышленников, зависание ОС, ошибки при использовании утилит, повреждение жесткого диска, сбой питания, неправильное извлечение устройства, износ оборудования, человеческий фактор. Восстановление данных – решение проблемы потери информации. В большинстве случаев потерянные данные не исчезают в один момент; некоторые из них могут быть восстановлены [4]. ОБЩАЯ ИНФОРМАЦИЯ О EXT4FS Fourth extended file system (четвёртая расширенная файловая система (ФС)), сокращенно ext4, или ext4fs — журналируемая ФС, используемая в ОС с ядром Linux. Основана на ФС ext3, ранее использовавшейся по умолчанию во многих дистрибутивах GNU/Linux. Первая экспериментальная реализация ext4 была написана Эндрю Мортоном и выпущена 10 октября 2006. Первая стабильная версия вышла 21 октября 2008. Достоинства ext4fs [3- 6]: Ext4fs обратно совместим с Ext3fs и Ext2fs. Любая имеющаяся файловая система типа Ext3 может быть конвертирована в Ext4 путём простой процедуры, состоящей из запуска пары команд в режиме «только чтение». Это означает, что возможно повысить производительность и вместимость и улучшить возможности вашей имеющейся файловой системы без переформатирования. Ext4fs будет использовать новые структуры только для новых данных, а старые при этом останутся неизменными. При необходимости их можно будет читать и изменять. Это безусловно означает, что, единожды сменив файловую систему на Ext4, вернуть Ext3 будет уже невозможно. Также имеется возможность смонтировать файловую систему Ext3 как Ext4 без использования нового формата данных, что позволит впоследствии смонтировать её опять как Ext3. Но это означает невозможность использования многочисленных преимуществ Ext4fs. Ext4fs поддерживает гигантские объемы дисков и размеры файлов, работает с ними достаточно быстро. Это возможно благодаря 48-битной адресации блоков, повышающей лимит размера ФС до 260 байт, а возможное количество вложенных каталогов – до бесконечности. При размере блока 4 KB это позволяет адресовать до одного эксбибайта (248·(4 KB) = 248·(22)·(210) B = 260 B = 1 EB). 48-битная адресация блоков в ext4 была выбрана вместо полной 64-битной адресации по причине того, что предел для файловой системы в 1 Эб еще много лет будет достаточным. Ext4fs умеет откладывать выделение места на диске на последний момент, что положительно сказывается на производительности. Распределение блоков откладывается до момента, когда файл будет записан из кэша на диск. Благодаря этому механизм получает возможность оптимизировать процесс распределения. Наибольший выигрыш получается при использовании экстентов и многоблочного распределения, поскольку часто встречается ситуация, когда окончательный файл пишется на диск в виде экстентов. Это даёт существенный прирост производительности, и иногда сильно снижает фрагментированность данных. Так же в ext4fs реализована возможность резервирование индексных дескрипторов при создании каталога. При создании каталога резервируется несколько индексных дескрипторов. Впоследствии при создании файлов в этом каталоге сначала используются зарезервированные индексные дескрипторы, и если таких не осталось, выполняется обычная процедура выделения индексного дескриптора. Ext4fs использует экстенты. Традиционные файловые системы, произошедшие от Unix, такие как Ext3, используют схему непрямого отображения блоков для отслеживания каждого блока, отвечающего за хранение данных файла. Такой подход неэффективен для больших файлов, особенно при операциях удаления и усечения таких файлов, поскольку карта соответствия содержит по одной записи на каждый отдельный блок. В больших файлах блоков много, их карты соответствия большие, и обрабатываются они медленно. В современных файловых системах применяется иной подход, основанный на так называемых экстентах. Экстент — это в набор последовательных физических блоков. Огромные файлы можно разделить на несколько экстентов. Благодаря применению экстентов улучшается производительность, а также уменьшается фрагментированность, поскольку экстенты способствуют непрерывному размещению данных. Ext4 является журналируемой файловой системой. Журнал является наиболее часто используемой частью диска, вследствие чего блоки, из которых он состоит, становятся особенно чувствительными к отказам оборудования. Более того, попытка восстановления при повреждённом журнале может привести к ещё более массовым повреждениям в данных. Ext4 подсчитывает контрольные суммы журнальных данных, что позволяет определить факт их повреждения. Ext4 имеет низкий уровень фрагментации файловой системы, и, как следствие, прирост производительности. В ext4fs предусмотрена возможность дефрагментации без предварительного размонтирования раздела. Ext4fs использует 256-битные индексные дескрипторы. Это позволяет хранить больше метаданных, реализовать наносекундную точность временных меток и поддержку расширенных атрибутов. Недостатки ext4fs [3- 6]: Неэкономичность использования дискового пространства. Место на диске, выделенное для индексных дескрипторов, не может быть использовано для хранения файлов. Из-за этого часть дискового пространства остается незаполненным, это особенно актуально при хранении малого количества больших файлов. Ограничение на количество индексных дескрипторов, что в случае его превышения (из-за хранения гигантского количества мелких файлов), может привести к невозможности записи данных на диск, даже если есть свободное место. СТРУКТУРА EXT4FS Блоки данных Основные принципы организации хранения данных в ext4 соответствуют организации файловых систем ext2 и ext3. Весь жесткий диск разбивается на блоки данных, которые являются минимально адресуемыми единицами информации. Размер блока указывается при создании файловой системы, он может равняться 1024, 2048 или 4096 байтам. Блоки группируются на группы блоков. Первый блок на диске имеет номер 0 и принадлежит группе с номером 1. Полная группа содержит 32768 блоков. Последняя группа блоков может быть неполной [7, 9]. Суперблок Первые 1024 байта логического раздела Linux отведены на размещение загрузчика. Начальной точкой файловой системы является суперблок. Он находится по смещению 1024 байта от начала диска (в самом начале диска размещается загрузчик) и занимает 1 Кб. Суперблок определяет многие важные параметры файловой системы (Приложение А). Формат суперблока определен в заголовочном файле ext4.h исходного кода ядра ОС Linux как структура ext4_super_block. Для обеспечения совместимости с предыдущими версиями файловой системы и нормальной работы утилиты проверки файловой системы первые поля суперблока не претерпели никаких изменений. Основы для будущих возможностей ext4 были заранее заложены еще в исходном коде файловой системы ext3. Так, в суперблоке ext3 есть зарезервированные поля для 64-битных номеров блоков, размера гибкой группы блоков, размера фиксированных полей индексного дескриптора и т. д. Совершенно новыми для ext4 оказались только 2 поля: размер описателя группы блоков и общее число килобайтов, записанных на диск за всё время. Структура суперблока подробно описана в приложении А [9]. При запуске ОС суперблок считывается в память и все изменения файловой системы вначале находят отображение в копии суперблока, находящейся в ОП, и записываются на диск только периодически. Это позволяет повысить производительность системы, так как многие пользователи и процессы постоянно обновляют файлы [8, 9]. Описатели групп блоков В следующем блоке располагаются дескрипторы групп блоков. Они указывают на блоки, в которых находятся битовые карты блоков и индексных дескрипторов, начало таблицы индексных дескрипторов и другую информацию о группе. Формат описателя группы блоков определен в заголовочном файле ext4.h как структура ext4_group_desc. В ext4 описатель групп блоков имеет размер 64 байта, вместо 32 байтов в ext3. Однако если не включена INCOMPAT-опция EXT_64BIT (64-битная поддержка), система монтируется с 32-байтными описателями [9]. В ext4 в описатель групп блоков вводятся новые поля: флаги, контрольная сумма описателя, число неиспользованных индексных дескрипторов, а также старшие значащие биты в случае использования 64-байтного описателя. Число неиспользованных индексных дескрипторов в общем случае отличается от числа свободных дескрипторов: если в группе был удален индексный дескриптор, число свободных дескрипторов станет на 1 больше, а число неиспользованных не изменится. Флаги описателя группы блоков позволяют ускорить проверку файловой системы: если битовая карта блоков или индексных дескрипторов помечена как неиспользованная, то она пропускается. Проверка делается только в том случае, если не совпадает контрольная сумма. Структура описателя группы блоков подробно показана в таблице 2.1 [9]. Таблица 2.1 – Структура описателя группы блоков Размер поля, байт Смещение, dec (hex) Назначение 4 0 Адрес битовой карты блоков (младшие значащие биты) 4 4 (4h) Адрес битовой карты индексных дескрипторов 4 8 (8h) Адрес блока с началом таблицы индексных дескрипторов 2 12 (Ch) Число свободных блоков 2 14 (Eh) Число свободных индексных дескрипторов 2 16 (10h) Число директорий 2 18 (12h) Флаги EXT4_BG: 0х0001 - Таблица и битовая карта индексных дескрипторов не используется 0х0002 - Битовая карта блоков не используется 0х0004 - Таблица индексных дескрипторов заполнена нулями 4х2 20 (14h) Зарезервировано под контрольные суммы битовых карт блоков и индексных дескрипторов 2 28 (1Ah) Число неиспользованных индексных дескрипторов 2 30 (1Ch) Контрольная сумма нескольких полей 4 32 (1Eh) Старшие значащие биты адреса битовой карты блоков 4 36 (22h) Старшие значащие биты адреса битовой карты индексных дескрипторов 4 40 (26h) Старшие значащие биты адреса первого блока таблицы индексных дескрипторов 2 44 (2Ah) Старшие значащие биты числа свободных блоков 2 46 (2Ch) Старшие значащие биты числа свободных индексных дескрипторов 2 48 (2Eh) Старшие значащие биты числа директорий 2 50 (30h) Старшие значащие биты числа неиспользованных индексных дескрипторов 14 52 (32h) Заполнение Файловые системы ext4 разделены на метагруппы блоков. Метагруппа – это кластер из групп блоков, описатель которого может храниться в одном блоке. При размере блока в 4 Кб одна метагруппа может содержать 64 группы блоков, или 8 Гб. Описатели групп блоков теперь хранятся не в первой группе блоков, а «рассыпаны» по всей файловой системе, что записано в первый блок метагруппы. Резервные копии хранятся во втором и последнем блоках метагруппы [9]. Ext4 не резервирует блоки для журнала после описателей групп блоков, как это делалось в ext3. Вместо этого журнал имеет определенный индексный дескриптор и хранится в выделенных для него блоках, которые в принципе могут находиться в любой области диска. Перед началом битовых карт групп блоков пространство зарезервировано под описатели групп. В ext4 существует понятие «системная зона» – это блоки, выделенные под хранение метаданных, которые нельзя использовать индексным дескрипторам. К метаданным относятся суперблок, в том числе и его копии, описатели групп блоков и журнал [9]. Гибкие группы блоков Традиционная организация файловой системы предполагает, что группы блоков идут на диске одна за другой и каждая начинается с битовых карт и таблиц индексных дескрипторов В ext4 вводится опция так называемых гибких групп блоков. Гибкая группа блоков состоит из нескольких групп блоков. В пределах гибкой группы битовые карты и таблицы индексных дескрипторов хранятся вместе, и лишь затем идут блоки данных (см. Рисунок 2.1). Это позволяет уменьшить время на чтение информации о свободных блоках и дескрипторах, а также ускорить проверку диска [8, 9]. Рисунок 2.1 - Гибкие группы блоков в файловой системе ext4fs Битовая карта блоков Битовая карта блоков (block bitmap) – это структура, в которой каждому логическому блоку соответствует один бит (см. Рисунок 2.2). Порядковый номер бита соответствует порядковому номеру блока. Если бит равен 1, то блок занят каким-либо файлом, если равен 0 – свободен. Эта карта служит для поиска свободных блоков в тех случаях, когда надо выделить место под файл. Байты FF в двоичном виде – это 1111 1111b (все блоки заняты). Просматривая битовую карту блоков, можно увидеть несколько чередующихся занятых и свободных полей блоков. Поскольку блоки идут в линейном порядке, это говорит о том, что система распределяет хранимую информацию по всему дисковому пространству. Наличие в сплошном массиве байтов, отличных от FF, указывает на то, что в файловой системе присутствуют свободные блоки, ранее принадлежавшие каким-то файлам. При детальном изучении битовой карты можно сказать, сколько блоков занимал удаленный файл, и назвать порядковые номера этих блоков [9]. 0x00012760 FF FF FF FF FF FF FF FF : FF FC FF FF FF FF FF FF 0x00012770 FF FF FF FF FF FF FF FF : FF FF FF FF FF FF FF FF 0x00012780 FF FF FF FF FF FF FF FF : FF FF FF FF FF FF FF FF 0x00012790 FF FF FF FF FF FF FF FF : FF FF FF FF FF FF FF FF 0x000127A0 FF FF FF FF FF FF FF FF : FF FF FF FF FF FF FF FF 0x000127B0 FF FF FF FF FF FF FF FF : FF FF FF FF FF FF FF FF 0x000127C0 FF FF FF FF FF FF FF FF : FF FF FF 0F 00 00 00 00 0x000127D0 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 0x000127E0 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 0x000127F0 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 0x00012800 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 0x00012810 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 0x00012820 00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 Рисунок 2.2 – Фрагмент битовой карты блоков Битовая карта индексных дескрипторов В каждой гибкой группе блоков после битовой карты блоков идёт битовая карта индексных дескрипторов (inode bitmap). Битовая карта индексных дескрипторов имеет аналогичную структуру, но иную гранулярность: один бит соответствует 256-байтному фрагменту в таблице индесных дескрипторов (в ext2fs и ext3fs размер индексного дескриптора был 128 бит). Таблица индексных дескрипторов Следующая область в структуре гибкой группы блоков служит для хранения таблицы индексных дескрипторов файлов. Каждому файлу на диске соответствует один индексный дескриптор файла, который идентифицируется своим порядковым номером – индексом файла. Индексные дескрипторы файлов данной группы блоков хранятся в логических блоках, расположенных следом за битовой картой индексных дескрипторов. При стандартном размере индексного дескриптора в 256 байтов один 4-килобайтный логический блок вмещает 16 дескрипторов. Структура индексного дескриптора подробно показана в таблице 2.2. Таблица 2.2 – Структура индексного дескриптора Размер, байт Смещение (dec) Смещение (hex) Назначение 2 0 0 Тип файла и права доступа к нему 2 2 2h Младшие 16 бит идентификатора пользователя 4 4 4h Размер файла в байтах 4 8 8h Время последнего доступа 4 12 Ch Время изменения индексного дескриптора 4 16 10h Время последнего изменения данных файла 4 20 14h Время удаления файла 2 24 18h Младшие 16 бит идентификатора группы 2 26 1Ah Число жестких ссылок на файл 4 28 1Ch Число блоков или секторов, занимаемых файлом 4 32 20h Флаги файла 4 36 24h Зарезервировано для ОС 15х4 или 5х12 40 28h В зависимости от способа адресации 15 указателей на блоки данных или 1 заголовок экстента (12 байтов) и непосредственно 4 экстента 4 100 64h Версия файла (для NFS) 4 104 68h ACL файла 4 108 6Ch Старшие 32 бита размера файла в байтах 4 112 70h Устаревшее поле: адрес фрагмента 12 116 74h Структура, зависящая от типа ОС, определяющая номера фрагментов 2 128 80h Размер фиксированных полей inode 2 130 82h Зарезервировано 4 132 84h Дополнительные 32 бита ctime 4 136 88h Дополнительные 32 бита mtime 4 140 8Ch Дополнительные 32 бита atime 4 144 90h Время создания файла 4 148 94h Дополнительные 32 бита к ВО создания файла 4 152 98h Старшие 32 бита версии файла Расширенные атрибуты В ext3 расширенные атрибуты хранились в отдельном блоке на диске. В индексном дескрипторе в стандартных полях содержится поле ACL, в котором хранится номер блока с расширенными атрибутами. Атрибуты могут быть прочитаны независимо от основных данных файла. Несколько индексных дескрипторов с одинаковыми расширенными атрибутами могут ссылаться на один и тот же блок. Сходство блоков определяется по истории недавних вызовов файлов. В Ext4 произошло увеличение индексного дескриптора до 256 байт, это позволило хранить расширенные атрибуты как в отдельном блоке, так и прямо в индексном дескрипторе, если они туда поместятся [9]. ACL или Access Control List состоит из набора записей. Каждый из трех типов пользователей представлен записью в ACL. Минимальный ACL содержит 3 записи: владелец, группа владельца и остальные. Этот набор указан в первых 2 байтах индексного дескриптора и выводится командой ls -l. Расширенный ACL содержит больше записей: в них можно указывать конкретного пользователя и конкретную группу, а также маску. Записи в ACL могут быть нескольких типов, которые представлены в таблице 2.3. Каждый ACL состоит из заголовка, описателей элементов (или просто элементов) и их значений [9]. Таблица 2.3 – Типы записей в ACL Тип Текстовая форма Owner user::rwx Named user user:name:rwx Owning group group::rwx Named group group:name:rwx Mask mask::rwx Others other::rwx В отдельном блоке диска дескрипторы элементов сортируются, в индексном дескрипторе элементы не сортированы. Значения атрибутов (величины) беспорядочно выровнены по концу блока [9]. Заголовки в блоке и в индексном дескрипторе отличаются друг от друга. Формат заголовка в блоке представлен в таблице 2.4. Таблица 2.4 – Структура заголовка ACL в блоке Размер, байт Поле 4 Магическое число 0хЕА020000 4 Число ссылок 4 Число использованных блоков на диске 4 Хэш-функция от всех атрибутов 4х4 Зарезервировано В качестве заголовка ACL в индексном дескрипторе используется магическое число 0xEA020000. Описатели элементов расширенного атрибута имеют формат, представленный в таблице 2.5. Таблица 2.5 – Структура элемента расширенного атрибута Размер, байт Поле 1 Длина имени 1 Индекс имени атрибута 2 Смещение величины атрибута от начала блока 4 Номер блока, в котором хранится значение 4 Размер величины атрибута 4 Хэш-функция от имени и значения атрибута - Имя атрибута Структура директорий По сравнению с ext3fs в ext4fs структура записи в директории претерпела небольшие изменения (Таблица 2.6). Для превышения лимита в 32 000 подкаталогов введено индексирование директорий. Если установлен соответствующий флаг файловой системы, записи в директориях хэшируются. Неиндексированная директория занимает минимум 1 блок. Минимальный размер индексированной директории должен составлять 3 блока. 0-й блок при этом становится корнем дерева, остальные становятся «листьями» [7, 9]. Таблица 2.6 – Структура элемента расширенного атрибута Размер, байт Поле 4 Индексный дескриптор 2 Длина записи 1 Длина имени файла 1 Тип файла (0 – неизвестный, 1 – обычный, 2 – каталог, 3 – файл символьного устройства, 4 – файл блочного устройства, 5 – именованный канал, 6 – сокет, 7 – символическая ссылка.) 255 Имя файла «Блоки-листья» представляют собой традиционный список имен файлов и индексных дескрипторов. Поэтому, если корень дерева окажется поврежденным, можно будет отыскать файлы, используя традиционную схему. Корень дерева содержит хэш-функции «блоков-листьев», каждый такой хэш представляет последовательность записей директории. Хэш в ext4 может быть как 32-битным, так и 64-битным. Для обеспечения совместимости с файловыми системами, не использующими индексирование, первые 8 байтов корня дерева содержат указание на следующий блок директории, т. е. ядро, не поддерживающее индексирование, будет игнорировать набор хэш-функций как удаленные из директории файлы. Хэш-версии (алгоритмы хэширования) определяются в суперблоке файловой системы [9]. Структура дерева экстентов Экстент представляет собой непрерывную последовательность блоков, идентифицируемую номером первого блока последовательности и длиной последовательности. Один экстент может адресовать до 128 Мб. Структура экстента представлена в таблице 2.7. Для отображения файлов большего размера используется структура дерева. Экстенты хранятся в узлах дерева (Таблица 2.8). Конечные узлы, содержащие указатели на сами экстенты, называются «листьями», остальные узлы, содержащие указатели на другие узлы дерева, называются «индексами» (Таблица 2.9) [9]. Таблица 2.7 – Структура экстента Размер поля, байт Поле 4 Первый логический блок экстента 2 Длина экстента 2 Старшие 16 битов номера физического блока 4 Младшие 32 бита номера физического блока Таблица 2.8 – Структура заголовка узла Размер поля, байт Поле 2 Магическое число 0хF30A 2 Число входов 2 Максимальное число входов 2 Глубина дерева 4 Поколение дерева (пока не используется) Максимально возможное число блоков, которые может адресовать один экстент, составляет 215 =32768, поскольку старший значащий бит в поле «длина экстента» используется для указания на неинициализированный (зарезервированный) экстент. Если это поле принимает максимальное значение, т. е. 0x8000, то, несмотря на единичное значение старшего значащего бита, это инициализированный экстент, имеющий длину 32768. Таким образом, максимальная длина инициализированного экстента – 32768, а неинициализированного – 32767. Карта экстентов – не слишком эффективный способ хранения разрозненных или сильно фрагментированных файлов [9]. Таблица 2.9 – Структура индекса экстента Размер поля, байт Поле 4 Номер логического блока, с которого начинается индекс 4 Указатель на физический блок следующего уровня 2 Старшие 16 битов физического блока 2 Зарезервировано Журнал В ext4fs используется «физическое журналирование», т.е. в качестве основной единицы ведения журнала используется физический блок. Это означает, что даже при изменении одного бита в журнале сохраняется весь блок файловой системы [8, 9]. Драйвер файловой системы отслеживает обработку целых блоков данных и группирует их в отдельный объект, называемый транзакцией. Транзакция будет завершена только после записи на диск всех данных. Транзакции являются групповыми операциями, выполняемыми или невыполняемыми как одна единая операция, т.е. атомарно. Ext4fs в случае сбоя делает автоматический «откат» при следующей загрузке без потери блоков. Создание, удаление или переименование файла – это атомарные операции, которые не могут допустить промежуточных состояний. Перемещение файла или запись на диск – более сложные операции [9]. Журнал состоит из транзакций, имеющих непрерывно возрастающие номера. Как только достигнут конец журнала, запись начинается сначала. Таким образом, журнал – это файл с круговой записью. Если система была размонтирована без ошибок, то запись всегда начинается с самого начала. Когда в файловой системе происходят какие-либо изменения, в журнал записываются целые блоки с метаданными, которые подлежат изменению, затем эти блоки переписываются на жесткий диск и после этого в журнал записывается подтверждение [9]. Каждая транзакция состоит из одного и более дескрипторов, а также блоков данных. Последний дескриптор в транзакции – это блок подтверждения, который сигнализирует о том, что транзакция прошла успешно и данные из предыдущих дескрипторов были записаны. Дескриптор состоит из последовательности тэгов и идет перед блоками с метаданными. Номер журнального блока, который должен быть записан в указанный блок файловой системы, определяется порядковым номером тэга в дескрипторе [9]. Структура тэга определена в заголовочном файле jbd2.h как journal_block_tag_s и приведена в таблице 2.10 [9]. Таблица 2.10 – Структура тэга Размер, байт Смещение Назначение 4 0 (0h) Номер блока на диске 4 4 (4h) Флаги 4 8 (8h) При включении поддержки 48-битной адресации, в тэг записываются старшие значащие биты номера блока Определить место начала журнала можно с помощью суперблока. Первый блок журнала содержит «журнальный суперблок». Его структура определена в заголовочном файле jbd2.h как journal_superblock_t и приведена в таблице 2.11 [8, 9] Таблица 2.11 – Структура журнального суперблока Размер, байт Смещение Назначение 12 0 (0h) Заголовок (одинаков для всех дескрипторов) 4 12 (Ch) Размер блоков журнального устройства. Блоки журнала отличаются от блоков файловой системы 4 16 (10h) Количество блоков в журнальном устройстве 4 20 (14h) Первый блок журнала, содержащий информацию 4 24 (18h) Первый ID подтверждения, ожидаемый журналом 4 28 (1Ch) Номер блока начала журнала 4 32 (20h) Код ошибки (устанавливается функцией jbd2_journal_abort() ) Следующие поля действительны только для журнального суперблока версии 2 4 36 (24h) Флаги compat 4 40 (28h) Флаги incompat 4 44 (2Ch) Флаги rocompat 16 48 (30h) Журнальный UUID 4 64 (40h) Число файловых систем, совместно использующих журнал 4 68 (44h) Номер блока динамической копии суперблока журнала 4 72 (48h) Максимальное число журнальных блоков на транзакцию 4 76 (4Ch) Максимальное число блоков с данными на транзакцию 176 80 (50h) Заполнение 16х48 256 (100h) ID всех файловых систем, совместно использующих журнал Заголовок журнала имеет тот же вид, что и заголовки остальных дескрипторов. Заголовок определен в файле jbd2.h как структура journal_header_s. Структура заголовка дескриптора приведен в таблице 2.12 [9]. Таблица 2.12 – Структура заголовка журнального дескриптора Размер, байт Смещение Назначение 4 0 (0h) Магическое число 0xc03b3998 (первые 4 байта /dev/random) 4 4 (4h) Тип дескриптора: 1 — дескриптор-тэг или просто дескриптор; 2 — подтверждение; 3 — суперблок версия 1; 4 — суперблок версия 2; 5 — блок отмены 4 8 (8h) Номер последовательности В ext4fs существует несколько режимов журналирования. Режим работы журнала определяется на этапе монтирования [9]. 1. Journal. В журнал записываются как метаданные, так и содержимое файла до того, как их запись будет подтверждена в основной файловой системе. В этом случае риск потери данных даже при пропадании питания минимальный. Однако в большинстве случаев такой режим сильно снижает производительность системы, так как данные необходимо записывать дважды: в основную файловую систему и в журнал [9]. 2. Ordered. В этом режиме журналируются только метаданные, но не содержимое файлов. Однако файловая система гарантирует, что содержимое файла будет записано на диск до того, как метаданные, относящиеся к этой транзакции, будут помечены как подтвержденные. Этот режим используется по умолчанию в большинстве дистрибутивов Linux. Если происходит пропадание питания или критическая ошибка ядра во время записи файла, журнал при следующем включении находит новый файл, создание которого не было подтверждено, и запускает процесс очистки, т.е. может записать в журнал подтверждение. Однако бывают ситуации, когда файл перезаписан поверх другой информацией. В этом случае может быть восстановлено промежуточное состояние файла. Худший из случаев – если в восстановленном файле будут перемешаны старые и новые данные [9]. 3. Writeback. Журналируются только метаданные. Содержимое файла может быть записано на диск как до, так и после того, как обновляется журнал. В результате файлы, записанные непосредственно перед крахом системы, могут оказаться поврежденными. Файл, присоединенный к другому, может иметь в журнале большую длину, чем есть на самом деле, таким образом, конец файла забивается мусором. Также после восстановления журнала могут случайно появиться старые версии файлов. Однако во многих случаях разрыв в синхронизации между журналом и данными невелик [9]. Журнал необходим файловой системе для сохранения целостности метаданных, в том числе даже после сбоя системы, но не для восстановления целостности данных пользователя, удаленных с диска. Хотя восстановить некоторые данные всё же возможно. Журнал способен принести пользу в восстановлении недавно стёртой информации, так как с течением времени журнал заполняется, происходит возврат к началу, и да....................... |
Для получения полной версии работы нажмите на кнопку "Узнать цену"
Узнать цену | Каталог работ |
Похожие работы: