Лабораторная работа: исследуем inode. Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровне::Журнал СА 7-8.2017
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6195
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6903
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4188
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2989
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3795
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3805
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6299
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3152
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3446
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7263
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10628
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12352
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13982
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9110
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7064
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5375
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4604
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3414
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3145
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3392
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3013
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Лабораторная работа: исследуем inode. Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровне

Архив номеров / 2017 / Выпуск №7-8 (176-177) / Лабораторная работа: исследуем inode. Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровне

Рубрика: Карьера/Образование /  Лабораторная работа

Без фото ПАВЕЛ ЗАКЛЯКОВ, ИТ-специалист

Лабораторная работа: исследуем inode
Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровне

Можно ли «увидеть» inode? Да, в работе рассказывается, «как» и на что он «влияет»

Лабораторная работа: исследуем inode. Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровнеЦель публикаций в данной рубрике – в ненавязчивой форме освежить в памяти читателей отдельные теоретические моменты, после чего позволить им плавно перейти к самостоятельной работе и исследованию теоретических вопросов напрактике. Симбиоз теории, практики, различных интересных вопросов, заданий и решений (howto), фактически это некий «квест» (quest) или вызов (challenge) читателям, потратить своё время на некоторое приключение, где наградой запрохождение (выполнение заданий) будут новые знания и навыки.

Из-за большого объёма данная работа разделена на отдельные публикации: «теория», «подготовка и проведение (части 1 и 2)», «завершение (часть 3)». Наименование частей следующее: 1. Взаимодействие с inode через стандартные программы на пользовательском уровне. 2. Взаимодействие через утилиты ФС. 3. «Сырое» чтение данных из ФС.

Введение

Предложенная в январе 1993 года Реми Кардом (Remy Card) «вторая расширенная файловая система (ФС)» (Second Extended File System, сокращённо – ext2 или ext2fs) взамен существовавшей тогда ext совсем скоро отметит четвертьвековой юбилей своего использования и сегодня фактически является не уступающим по производительности эталоном, с которым в «мире UNIX и Linux» часто сравнивают все другие файловые системы.

Новички в ОС Linux обычно исключают первую версию из рассмотрения, как de facto ушедшую в историю, а вторую вместе с третьей и четвёртой версиями рассматривают как нечто очень схожее. Общие подходы к построению и некоторая совместимость действительно существуют.

В рамках работы предлагается на примере ФС ext2 и ext4 самостоятельно более глубоко изучить, какими свойствами обладает inode (он же индексный дескриптор) и какую роль он играет в целом. Аналогичные индексные дескрипторы можно встретить и в других ФС, например UFS (Unix file system, она же Berkeley Fast File System) и др. Чтобы не вдаваться в сравнение различий, в данной работе они не рассматриваются.

Подготовка к работе

Перед началом исследования элементов ФС на практике читателям, не имеющим минимальных теоретических знаний, рекомендуется самостоятельно изучить примерное устройство ФС ext2, например из [1-6] (см. рис. 1).

Рисунок 1. Структура файловой системы ext2

Рисунок 1. Структура файловой системы ext2

Также во избежание разночтений определимся с используемыми понятиями и терминологией, рассмотрим некоторые нетипичные вопросы относительно ФС семейства ext2-ext4 и освежим важные теоретические моменты в памяти.

Краткие теоретические сведения

Как и в любой файловой системе UNIX, в составе файловой системы ext2 можно выделить следующие составляющие [1, 2, 6, 7]:

  • блок и группа блоков;
  • информационный узел (information node, inode);
  • суперблок (superblock) и его резервные копии;
  • директория.

Для эффективного доступа к ним в ФС ext2-4 дополнительно создаются и используются:

  • таблица дескрипторов групп (и её копии);
  • битовая карта занятости inode в каждой группе блоков;
  • битовая карта занятости блоков в каждой группе блоков;
  • зарезервированные блоки (в группах, где имеются копии суперблока).

Блоки и группы блоков

Всё пространство раздела диска разбивается на блоки фиксированного размера: 1024, 2048 или 4096 байт (предполагается, что в ext4 не включена поддержка 64-битных значений для ряда параметров ФС). По задумке все три числа были взяты кратными размеру сектора – 512 байт. В начале 1990-х такой размер сектора использовался как на дискетах, так и на жёстких дисках. Сектора по 4096 байт (используемые абсолютно всеми жёсткими дисками большого объёма начиная примерно с 2009 года) не только не существовали, но и не предвиделись. В наши дни такие большие сектора нисколько не усложняют жизнь, при создании ФС размер одного блока выбирается равным размеру одного сектора. Также среднестатистический размер мелких файлов типичной системы обычно оказывается близок к 4 КБ, что позволяет более оптимально использовать дисковое пространство за счёт минимизации неиспользуемого пространства в конце завершающих блоков с данными.

Размер логического блока указывается при создании файловой системы (с помощью ключа -b) либо определяется эвристически от размера файловой системы и ожидаемого предназначения ФС (типа использования).

Все блоки имеют порядковые номера. Поскольку ФС разрабатывалась предпочтительно для использования на традиционных жёстких дисках, то в целях уменьшения фрагментации и количества перемещений считывающих головок причтении больших массивов данных блоки объединяются в группы, нумерация блоков слева направо (см. рис. 1).

Начиная с ФС ext4 появилась новая возможность группировки нескольких соседних групп блоков в укрупнённые виртуальные группы блоков (flexible block groups), данная возможность включается опцией flex_bg при создании ФС, а число группирующихся блоков задаётся опцией -G и должно равняться 2n.

Практически все группы блоков имеют одинаковый формат. В каждой группе, помимо информационных блоков, хранится информация о занятости блоков и inode группы в виде битовой карты (Block Bitmap и Inode Bitmap). В состав 0-йгруппы блоков и некоторых других входят также суперблок, таблица дескрипторов групп и резервные блоки.

Суперблок

Суперблок – это основной элемент файловой системы ext2-4, представляющий собой некоторую таблицу различных значений, определяющих параметры ФС и местоположение её составных частей. Если не считать смещение в 1024 байта от начала файловой системы, то он идёт самым первым по порядку (см. рис. 1). Смещение необходимо для возможности размещения в самом начале кода загрузчика ОС. Если размер логического блока ФС равен 1024, то суперблок фактически начинается и оказывается во втором блоке (с порядковым номером 1, так как блоки нумеруются начиная с нуля).

В зависимости от версии ФС суперблоки несколько различаются. Первые поля структуры суперблока (назовём их базовыми) одинаковы для разных версий ФС, их общий суммарный размер меньше 1024 байт, поэтому блок с суперблоком вконце заполняется нулями. Если же используется дополнение-модификация суперблока EXT4_DYNAMIC_REV, то тогда после базовой вместо нулей располагается таблица расширенных параметров, но в любом случае весь суперблок непревышает по размеру 1024 байта.

Если размер логического блока ФС оказывается таковым, что после размещения в нём суперблока остаётся свободное место, то оно заполняется символами с кодом 0.

В базовой части суперблока содержится следующая информацию о файловой системе (список не полный):

  • общее число блоков и inode в файловой системе;
  • число свободных блоков и inode в файловой системе;
  • размер логического блока файловой системы;
  • количество блоков и inode в группе;
  • размер inode;
  • идентификатор файловой системы;
  • номер первого блока данных;
  • как часто (при каких условиях) необходимо делать проверку ФС;
  • время создания ФС и т.д.

На практике вывести всю информацию, содержащуюся в суперблоке (например, для раздела /dev/sda1), можно с помощью команды:

# dumpe2fs /dev/sda1 -h

В суперблоке содержится довольно важная информация по файловой системе. От его целостности напрямую зависит работоспособность файловой системы. Чтобы эта информация не потерялась и не произошла ситуация, когда из-за сбоя одного блока стал недоступен весь диск, её дублируют на диске в нескольких местах. Поскольку информация, содержащаяся в дескрипторе группы блоков, следующем за суперблоком, также важна, то она тоже дублируется, следуя закопиями суперблока.

Копии суперблока

В ранних подверcиях ФС ext2 копия суперблока (и дескриптор группы блоков) содержалась в каждой группе блоков, но после выяснилось, что указанная избыточность дорого обходится, поэтому от столь большого числа копий отказались впользу хранения копий лишь в некоторых группах блоков. Для этого была введена функция (флаг) sparce_super (для ФС ext2 – EXT2_FEATURE_RO_COMPAT_SPARCE_SUPER, для ФС ext3/4 – EXT3_FEATURE_RO_COMPAT_SPARCE_SUPER), включённая по умолчанию при создании ФС. Алгоритм расчёта, в каких именно группах размещать копию (при наличии флага), а в каких нет, довольно прост. Суперблок (и дескриптор группы блоков) находится в 0-й группе блоков, а его копии в группах блоков, чьи номера равны степеням чисел 1, 3, 5 и 7, то есть 11, 31, 51 ,71, 32 = 9, 52 = 25, 33 = 27 и 72 = 49, 53 = 125 и т.д. Если флаг не установлен (функция невключена), то копии делаются во всех группах [4].

Для того чтобы в дальнейшем использовать копии, например при восстановлении ФС в случае потери данных из нулевой группы блоков, важный подготовительный шаг – понять, как пересчитать номера групп блоков, содержащих копии суперблока, в номера блоков (чья нумерация сквозная по всему диску), поскольку различные программы требуют указания именно блока, где находится копия суперблока. Не имея в своём распоряжении суперблока или его копии, сделать это непросто, так как в суперблоке (и его копиях) содержится необходимая для расчёта информация – размер блока и число блоков в группе. Чем-то похоже на ситуацию «ключ от сейфа в сейфе». От полного перебора всех возможных вариантов обычно спасает то, что многие администраторы при создании ФС пользуются параметрами, предлагаемыми по умолчанию, что значительно уменьшает число возможных мест для поиска копий суперблока на диске. Если предположить, что блоков в группе n = 8192, то копии суперблока будут в блоках с номерами, рассчитываемыми по формуле m*n + 1, где m – номер группы блоков с копией (см. алгоритм получения m выше), т.е.: 1*8192 + 1 = 8193, 3*8192 +1 = 24577, 5*8192 + 1 = 40961, 7*8192 + 1 = 57345, 32*8192 + 1 = 73729, 52*8192 + 1 = 204801 и т.д.

На практике вычисленных значений номеров блоков недостаточно, поскольку для чтения копий суперблока с диска дополнительно потребуется знать размер блока, для того чтобы правильно вычислить смещение в байтах от начала диска. Вреальности количество различных вариантов для размера блока конечно, что делает оправданным их перебор при поиске копий.

Совет. После создания ФС лучше всего выполнить команду:

# dumpe2fs /dev/sdaX

...

Group 9: (Blocks 73729-81920)

  Backup superblock at 73729, Group descriptors at 73730-73730

  Reserved GDT blocks at 73731-73986

  Block bitmap at 74279 (+550), Inode bitmap at 74280 (+551)

  Inode table at 73987-74242 (+258)

  0 free blocks, 2048 free inodes, 0 directories

  Free blocks:

  Free inodes: 18433-20480

...

а результат её вывода сохранить на другом компьютере или распечатать на бумаге и хранить в отдельной папке на случай последующего ручного восстановления данных.

Таблица дескрипторов групп (и её копии), резервные блоки, битовые карты

Каждая группа блоков описывается в таблице дескрипторов групп (дескрипторе группы блоков) – структуре, которая содержит информацию по каждой группе блоков: адреса битовых карт занятости блоков и inode, таблицы inode. Дляхранения структуры (вместе с её копиями), а также следующими за ней резервными блоками используются те же группы блоков, что и для хранения суперблока или его копий.

Поскольку эти все элементы ФС не будут использоваться в данной работе, то подробно они не рассматриваются. Для простоты изображения на рис. 1 резервные блоки даже не отмечены.

В каждой группе блоков имеются свои битовая карта занятости inode и битовая карта занятости блоков. При использовании опций flex_bg и meta_bg расположение битовых карт внутри укрупнённых групп однозначно не фиксировано.

По умолчанию размер битовой карты – один блок. Каждый бит карты обозначает состояние блока (или inode). Если бит установлен (1), то блок (inode) занят, если сброшен (0) – блок (inode) свободен. Первому блоку группы (inode) соответствует нулевой бит карты, второму – первый бит и т.д. Отличие inode от блоков заключается в том, что они меньшего размера, поэтому inode, находящиеся в пределах одной группы, собраны в таблицу. В битовой карте занятости inode группы каждый бит аналогично характеризует состояние элемента в таблице inode группы.

Так, если размер блока выбран 1024, то в группе блоков будет содержаться 1024*8 = 8192 блоков. Поскольку inode чаще требуется меньше числа блоков, их битовая карта оказывается меньше, а блок, содержащий карту до конца, заполняется нулями (побитно).

Информационный узел (inode)

Базовым понятием файловой системы является информационный узел, information node, inode, i-узел или i-node. Каждый inode, как и блок, имеет порядковый номер, уникальный в пределах файловой системы, и включает информацию только об одном файле. Следует отметить, что термин «файл» в контексте ФС может пониматься многозначно:

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

inode содержит информацию о «физическом» расположении данных. Связь логического имени файла с inode производится с помощью жёстких ссылок. Жёстких ссылок (как и логических имён) у одного файла в ФС ext2-4 может быть несколько. Типичный пример этому – особый тип файла – директория, в которую можно попасть как сверху, например по имени dir1 (cd dir1), так и снизу, например из низлежащих поддиректорий, переходом в директорию с именем «..» (cd ..).

Посмотреть номера inode у логических имён файлов (и директорий) можно с помощью команды ls -i либо с помощью утилиты stat.

Внутреннее устройство inode следующее: это специальная структура (таблица), которая содержит информацию об атрибутах и физическом расположении файла или, одним словом, метаданные (см. рис. 2). Её размер для ext2 – 128 байт, дляext4 – 256 байт. Причём увеличение размера происходит за счёт использования тех же структур, что и для inode ФС ext2, в первых 128 байтах, а всё дополнительное добавляется в конец. Фактически используется 156 байт, а оставшиеся 100байт пустые и могут использоваться для хранения расширенных атрибутов, также во время создания ФС размер inode может быть задан и больше – по размеру блока ФС, хотя это не очень эффективно.

Рисунок 2. Приблизительная структура индексного дескриптора (первые 128 байт, общие для ФС ext2-4)

Рисунок 2. Приблизительная структура индексного дескриптора (первые 128 байт, общие для ФС ext2-4)

Атрибутами файла являются его тип (обычный файл, каталог и т.д.), права доступа к нему (меняемые командой chmod), идентификаторы владельца и группы, размер, время создания.

Информация о физическом расположении зависит от размеров файла и представляет собой последовательность абсолютных номеров блоков, содержащих данные файла. Эта информация представляет собой последовательность 32-битных номеров блоков, содержащих данные файла.

Первые 12 номеров – это прямые ссылки на информационные блоки (direct blocks number). 13-й номер является косвенной ссылкой (indirect blocks number). В нём находится адрес блока, в котором хранятся адреса информационных блоков.14-й номер – двойная косвенная ссылка (double indirect blocks number), 15-й номер – тройная косвенная ссылка (triple indirect blocks number) (см. рис. 3).

Рисунок 3. Структура ссылок на номера блоков в inode

Рисунок 3. Структура ссылок на номера блоков в inode

Замечание. Поскольку адресация блоков 32-битная, на хранение адреса отводится 4 байта. В приведённом выше примере используются блоки размером 1024 байта, в которые помещается 1024/4 = 256 адресов. При использовании блоков большего размера нумерация на рис. 4 изменится, поскольку при косвенной адресации один блок будет содержать больше 256 адресов. Соответственно, изменится и максимально адресуемое по такой схеме пространство внутри файла, тоесть максимальный теоретический размер файла.

Следует отметить, что «имя файла» в состав данных, хранимых в inode, не входит, установление соответствия между именами файлов и порядковыми номерами inode выполняется с помощью жёстких ссылок, которые хранятся вдиректориях (каталогах).

Подробнее о структуре inode см. [4].

Директория (каталог)

Директория, так же как и файл, описывается при помощи inode. Наглядности ради её можно считать особым псевдофайлом, у которого в ФС установлен тип d, а его содержимое представляет собой массив записей, содержащих информацию о файлах, псевдофайлах или поддиректориях, которые находятся «внутри» неё. Используется два не сильно отличающихся формата этих записей (ext4_dir_entry и ext4_dir_entry_2). Поскольку исследование директорий не входит в цели данной работы, коротко скажем, что первая из вышеупомянутых структур имеет следующий вид:

  • порядковый номер inode файла;
  • длина записи в байтах;
  • длина имени файла;
  • имя файла.

Вопросы общего плана на понимание темы

Для того чтобы подумать на досуге или для проверки готовности к выполнению работы.

  1. Зачем нужны ФС, какие они бывают и почему их много?
  2. Какие задачи решают ФС?
  3. Какие существуют проблемы (ограничения) при использовании ФС?
  4. Какие вы знаете способы классификации ФС?
  5. Какие проблемы решает inode или на что он влияет?
  6. Можно ли увидеть inode?
  7. Существует один тип inode или их несколько?
  8. Какой размер у inode?
  9. Как inode связан с жёсткими ссылками и именами файлов?
  10. Что такое файл, сколько определений файла вы можете дать?
  11. Если содержимое файла 4 байта, то сколько места в ФС потребуется (будет задействовано байт) для его хранения?
  12. Назовите такие размеры (n и n+1, в байтах) содержимого двух файлов, при которых между ними существует «качественный скачок» с точки зрения ФС?
  13. Как узнать общее число inode в файловой системе и сколько из них заняты?

    Замечание (или ещё один вопрос). В детстве я любил задавать взрослым разные (как многие из них говорили, «глупые») вопросы, возможно, это было одним из моих любимых занятий. Одни, не находя, что ответить, меня сразу «посылали», другие, попав в неловкое положение, всё же находили во мне достойного собеседника и пытались что-то ответить.

    Слова «троллить» в современном его понимании тогда не существовало, а многие вопросы не были глупыми – это был способ познания мира. Помню, что как-то в очередной раз, не зная, что ответить по сути, моя бабушка выдала народную мудрость: «Один дурак может задать столько вопросов, что сто умных не ответят». Ответ был дан, и я понял, да и сейчас верю, что «глупых вопросов не бывает». Поскольку я нередко «сдруживался» с теми, кто пытался давать ответы, попытаюсь сдружиться с читателями СА, добавив к списку выше ещё один интересный вопрос по теме, и дам на него ответ, поскольку зачастую из ответов можно узнать больше, чем прочитать в ста книжках.

  14. Можно ли создать файл (или иной объект ФС) с конкретным номером inode? Например, 1 или 112233?

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

Естественно, от администратора ситуация выглядит легче, поскольку последний может получить прямой доступ к файловой системе, через доступ к разделу (носителю), на котором она расположена. С другой стороны, существенен момент, в какой ФС будет создаваться файл и какой именно номер из двух выше указанных затребован задающим вопрос? Это важно, поскольку в разных ФС номера inode могут повторяться, и одно дело – оперировать с ФС на отчуждаемом носителе, а другое дело – с корневой ФС.

Номер inode также имеет значение, поскольку номера с 0 по 11 зарезервированы системой для разных целей [4], конкретно номер 1 используется (зарезервирован) для хранения списка дефектных (сбойных) блоков. Именно из-за этого корневая директория ФС (/) имеет номер 2. Без вмешательства в ФС через debugfs [8, 9] или напрямую в «сыром» режиме не обойтись.

Что касаемо номера 112233, то ситуации возможны следующие:

  • такого номера нет в принципе, поскольку ФС мала;
  • такой номер есть и занят файлом «X»/директорией «Y»;
  • такой номер есть, но пока не занят.

Второй случай, как найти объекты ФС по номеру inode, в работе рассмотрен, однако многое ещё зависит от того, кто владелец файла/директории и какие есть права у пользователя. Если это файл и прав у пользователя достаточно, то можно создать жёсткую ссылку на него. А чтобы полноценно и единолично пользоваться содержимым, то ещё потребуется скопировать содержимое в новый файл, удалить другие ссылки на требуемый inode и создать их заново, но уже на inode нового файла-копии. С директорией сложнее, поскольку на неё создавать ссылки нельзя, поэтому придётся её удалить (предварительно переписав содержимое в созданную для этого новую). После этого будет третья ситуация, когда требуемый inode не занят.

Несмотря на то что система многопользовательская, предположим, что мы единственные пользователи ФС и конкуренции по «захвату» нужного номера у нас не будет.

Единственный вариант решения от уровня пользователя – это создавать файлы, пока не будет занят нужный номер, например банально циклом:

for i in $(seq 1 xxx); do touch $i; done

указав вместо xxx число, сравнимое с искомым, 112233. Поскольку часть номеров в ФС уже занята, то необходимое количество создаваемых файлов будет меньше на число уже занятых и зарезервированных inode. Создавать же файлов больше, чем требуется, нет смысла. Ненужные файлы впоследствии можно стереть, а как найти среди них файл с нужным номером, будет показано в работе.

Если требуемую ФС можно отмонтировать, то «захватить» требуемый inode намного проще с использованием утилиты debugfs. С помощью неё можно попытаться использовать и некоторые зарезервированные номера из первого десятка, новыйдет ли это «боком», предугадать сложно.

Краткая последовательность действий для номера x следующая:

0) отмонтировать раздел;

1) открыть его в debugfs, указав опцию -w, чтобы можно было вносить изменения;

2) clri <x>;

3) seti <x>;

4) sif <x> mode 0x81FF;

5) ln <x> NewFileName;

6) sif <x> links_count 1 (команда ln внутри debugfs не меняет это значение);

7) quit.

После монтирования ФС файл NewFileName будет иметь номер inode, равный x, и его можно использовать как обычный файл. Номер x в командах выше (для debugfs) вводится в угловых скобках (знаках меньше и больше).

Вместо заключения

Теперь, когда вы освежили в памяти отдельные вопросы строения ФС, можно переходить к подготовке лабораторного стенда и самой работе. Продолжение следует...

  1. Мешков В. Архитектура файловой системы ext2. // «Системный администратор», № 11, 2003 г. – С. 26-32. URL: http://www.samag.ru/archive/article/203.
  2. Design and Implementation of the Second Extended Filesystem – http://e2fsprogs.sourceforge.net/ext2intro.html.
  3. Analyzing a filesystem – http://homepage.smc.edu/morgan_david/cs40/analyze-ext2.htm.
  4. Ext4 Disk Layout – https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout.
  5. Документация по ФС ext2-4 из исходников ядра (v.3.16.44 на kernel.org) файлы Documentation/filesystems/ext2.txt (ext3.txt, ext4.txt) либо из пакета kernel-doc-2.6.32-642.15.1.el6.noarch файл /usr/share/doc/kernel-doc-2.6.32/Documentation/filesystems/ext2.txt, ext3.txt, ext4.txt.
  6. A Non-Technical Look Inside the EXT2 File System (архивная версия страницы http://web.archive.org/web/20040301054851/http://linuxgazette.net/issue21/ext2.html).
  7. The Second Extended File System – http://www.nongnu.org/ext2-doc/ext2.html.
  8. debugfs Command Examples – https://www.cs.montana.edu/courses/309/topics/4-disks/debugfs_example.html.
  9. Linux Ext2fs Undeletion mini-HOWTO – http://www.faqs.org/docs/Linux-mini/Ext2fs-Undeletion.html.

Комментарии отсутствуют

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

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru