Как узнать количество inode

Что такое Inode

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

Что такое Inode в Linux?

sudo debugfs /dev/nvme0n1p5

Затем выполните такую команду:

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Здесь указано, что эта Inode имеет тип Directory, права 755. Её владелец и группа root, потому что идентификатор пользователя 0. Чуть ниже расположена информация про время создания, модификации и доступа. А в самом низу находятся блоки с данными этой Inode. Именно там хранится список файлов и папок директории. Вы можете посмотреть содержимое блока командой dump_block:

debugfs: block_dump 9238

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Утилита выведет данные в HEX и ASCII формате, и в них будет видно имена папок. Но увидеть номера Inode здесь не получится без дополнительных программ. Проще всего их можно посмотреть с помощью команды ls:

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Здесь в первом же столбике находится номер Inode для файла или папки. Для примера можно посмотреть ещё информацию про testfile с номером Inode 1128:

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

В разделе EXTENTS есть номер блока, в котором находятся данные файла. В данном случае это 6596316. В нём можно посмотреть содержимое файла:

debugfs: block_dump 6596316

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Здесь они будут тоже в первой колонке. Обратите внимание, что у каждого файла, папки или символической ссылки уникальный номер Inode. Исключение составляют только жесткие ссылки. Количество Inode в файловой системе ограничено, оно определяется при инициализации файловой системы. Посмотреть текущее количество Inode можно командой tune2fs:

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Как видите, на моём корневом разделе использовано 29% Inode, а блоков у меня уже использовано 95%. Но если бы у меня было очень много мелких файлов, то место бы ещё осталось, а доступные Inode закончились. Тогда бы возникла ошибка создания файла, даже несмотря на то, что место ещё есть. Чтобы избежать такой ситуации надо тщательно планировать как вы будете использовать файловую систему.

В данном случае будет создана файловая система с тремя миллионами индексов Inode. Ещё можно не указывать точное количество Inode, а указать количество байт в одной Inode, это может быть удобно, если вы знаете средний размер ваших файлов, которые будут хранится в файловой системе. Например:

В качестве альтернативы, можно использовать файловую систему Btrfs, в которой Inode не могут закончиться потому что они генерируются динамически по мере необходимости.

Выводы

В этой статье мы рассмотрели что такое Inode в Linux, а также что произойдёт если доступное количество Inodes закончатся. Будьте осторожны при создании файловой системы и думайте какие файлы в ней будут размещены и сколько их там будет чтобы избежать проблем с Inode.

Источник

Все, что вам нужно знать об inode в Linux

Главное меню » Операционная система Linux » Все, что вам нужно знать об inode в Linux

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Краткое резюме

Inodes хранит метаданные для каждого файла в вашей системе в виде таблицы, обычно расположенной в начале раздела. Они хранят всю информацию, кроме имени файла и данных.

Каждый файл в данном каталоге является записью с именем файла и номером индекса. Вся остальная информация о файле извлекается из таблицы индексов путем ссылки на номер индекса.

Номера inodes уникальны на уровне раздела. Каждый раздел как собственная таблица индексов.

Если у вас закончились inode, вы не можете создавать новые файлы, даже если у вас есть свободное место на данном разделе.

Что такое inode в Linux?

Inode означает индексный узел. Хотя история не совсем уверена в этом, это самое логичное и лучшее предположение, которое они придумали. Раньше было написан I-node, но дефис со временем потерялся.

Как написано на linfo.org :

Inode это структура данных … … которая хранит всю информацию о файле, кроме его имени и его фактических данных.

Inodes хранит метаданные о файле, к которому он относится. Эти метаданные содержат всю информацию об указанном файле.

Каждый используемый inod ссылается на 1 файл. Каждый файл имеет 1 индекс. Каталоги, файлы символов, блочные устройства, все это файлы. У каждого из них есть 1 индекс.

Для каждого файла в каталоге есть запись, содержащая имя файла и номер индекса, связанный с ним.

Inodes являются уникальными на уровне разделов. Вы можете иметь два файла с одинаковым номером inode, если они находятся в другом разделе. Информация inodes хранится в виде таблицы в виде структуры в стратегических частях каждого раздела. Часто встречается в начале.

Как проверить inode в Linux?

Вы можете легко перечислить номер inode с помощью следующей команды:

На следующих рисунках показан корневой каталог с соответствующими номерами inodes.
Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode
Количество inodes каждой файловой системы определяется при создании файловой системы. Для большинства пользователей число inode по умолчанию более чем достаточно.

Большинство настроек по умолчанию при создании файловой системы создает 1 inode на каждые 2 Кбайт пространства. Это дает множество inodes для большинства систем. Скорее всего, вам не хватит места, прежде чем закончатся inode. При необходимости вы можете указать, сколько inodes создавать при создании файловой системы.

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

Например, почтовый сервер будет хранить огромное количество очень маленьких файлов. Многие из этих файлов будут меньше 2K байтов. Также ожидается постоянный рост. Поэтому почтовому серверу грозит нехватка inode, прежде чем закончится свободное место.

В некоторых файловых системах в Linux, таких как Btrfs, JFS, XFS, реализованы динамические inode. Они могут увеличить количество доступных inode, если это необходимо.

Как работает inode?

Когда создается новый файл, ему присваивается номер inode и имя файла. Номер индекса – это уникальный номер в этой файловой системе. И имя, и номер индекса хранятся в виде записи в каталоге.

Вы можете вывести информацию об индексах для каждой файловой системы с помощью этой команды:

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Inodes & мягкая/жесткая связь

Мягкая ссылка – известная особенность в Linux. Но что происходит с Inodes, когда вы создаете программную ссылку? На следующем рисунке у нас есть каталог с именем «dir1», файл с именем «file1», а внутри «dir1» у нас есть мягкая ссылка «slink1», которая указывает на «../file1»
Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode
Теперь мы можем рекурсивно перечислять и показывать информацию об inods.
Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode
Как и ожидалось, dir1 и file1 имеют разные номера inode. Но так же и мягкая ссылка. Когда вы создаете программную ссылку, вы создаете новый файл. В своих метаданных он указывает на цель. Для каждой созданной вами мягкой ссылки вы используете один индекс.

После создания жесткой ссылки в dir1 с помощью следующей команды:

Список номеров inode дает нам следующую информацию:
Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode
Вы можете видеть, что « file1 ″ и« hlink1 »имеют одинаковый номер inod. По правде говоря, жесткие ссылки возможны из-за inode. Жесткая ссылка не создает новый файл. Он предоставляет только новое имя для тех же данных.

В старых версиях Linux можно было жестко связать каталог. Было даже возможно, чтобы данный каталог был его собственным родителем. Это стало возможным благодаря реализации inode. Теперь это ограничено, чтобы пользователи не могли создавать очень запутанную структуру каталогов.

Другие значения inode

Работа inode также объясняет, почему невозможно создать жесткую ссылку на другую файловую систему. Разрешение такой задачи откроет возможность наличия конфликтующих номеров inods. Мягкая ссылка, с другой стороны, может быть создана в другой файловой системе.

Поскольку жесткая ссылка имеет тот же номер inode, что и исходный файл, вы можете удалить исходный файл, и данные по-прежнему доступны через жесткую ссылку. Все, что вы сделали в этом случае, это удалите одно из имен, указывающих на этот номер inode. Данные, связанные с этим номером inode, будут оставаться доступными до тех пор, пока не будут удалены все связанные с ним имена.

Inode также являются важной причиной, по которой система Linux может обновляться без перезагрузки. Это связано с тем, что один процесс может использовать файл библиотеки, в то время как другой процесс заменяет этот файл новой версией. Поэтому создаем новый индекс для нового файла. Уже запущенный процесс будет продолжать использовать старый файл, в то время как каждый новый вызов приведет к использованию новой версии.

Еще одна интересная особенность, которая поставляется с inode – это возможность хранить данные в самом inode. Это называется Inlining. Преимущество этого метода хранения заключается в экономии места, поскольку блок данных не потребуется. Это также увеличивает время поиска, избегая большего доступа к диску для получения данных.

В некоторых файловых системах, таких как ext4, есть опция inline_data. Когда он включен, он позволяет операционной системе хранить данные таким образом. Из-за ограничения размера вставка работает только для очень маленьких файлов. Ext2 и более поздние версии часто сохраняют информацию о мягких ссылках таким образом. То есть если размер не более 60 байт.

Заключение

Inode – это не то, с чем вы взаимодействуете напрямую, но они играют важную роль. Если раздел должен содержать много очень маленьких файлов, таких как почтовый сервер, знание того, что они из себя представляют и как они работают, может спасти вас от многих проблем в будущем.

Надеюсь, вам понравилась эта статья, и вы узнали что-то новое и важное об inode в Linux. Подпишитесь на наш сайт, чтобы узнать больше информации о Linux.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Закончились inodes как решить проблему?

Прежде чем что то делать, нужно убедиться что проблема с inodes.
Воспользуйтесь командой:

Значения IUsed, IFree, IUse% дадут вам понимание, в какой файловой системе (разделе) у вас проблема.

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

На самом деле, когда в системе все сделано правильно, то такой проблемы как недостаток inodes не возникает.
Как минимум это подтверждает мой опыт использования SCO UNIX 3.2v4.2 на промышленном предприятии, SCO Open Desktop 3, OpenServer 5 в банке для работы банковской системы, RedHat Linux, CentOS в разных «диспетчерских» (колл-центрах). Не было проблем с инодами.

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

XFS — высокопроизводительная 64-битная журналируемая файловая система, созданная компанией Silicon Graphics для собственной операционной системы IRIX. 1 мая 2001 года Silicon Graphics выпустила XFS под GNU General Public License. XFS отличается от других файловых систем тем, что она изначально была рассчитана для использования на дисках большого объёма (более 2 терабайт, см. например, RAID-массивы).

Поддержка XFS была включена в ядро Linux версий 2.4 (начиная с 2.4.25, когда Марчело Тозатти (Marcelo Tosatti) посчитал её достаточно стабильной) и 2.6, и, таким образом, она стала довольно универсальной для Linux-систем. Инсталляторы дистрибутивов openSUSE, Gentoo, Mandriva, Slackware, Ubuntu, Fedora и Debian предлагают XFS как вариант файловой системы для установки. FreeBSD стала поддерживать XFS в режиме чтения в декабре 2005 года, с июня 2006 была представлена экспериментальная поддержка записи. Несмотря на это, её предполагалось использовать только для облегчения миграции с Linux, но не основной файловой системы. Поддержка XFS была удалена в FreeBSD 10.[1]
Особенности

64-битная файловая система.
Журналирование только метаданных (если не задать иное параметрами).
Выделение места экстентами (Extent — указатель на начало и число последовательных блоков). В экстентах выделяется место для хранения файлов, а также экстентами хранятся свободные блоки.
B-tree индексы активно используются для хранения различных данных файловой системы: для списка блоков с inode-ами, списка экстентов с содержимым файла, каталогов файлов, списков экстентов свободных блоков (свободные блоки проиндексированы и по размеру блока, и по расположению). Однако использование b-tree индексов не догма — небольшой файл или каталог может быть размещен прямо внутри inode.
Отложенное выделение места (Delayed allocation). При записи файла для него выделяется место в памяти, а на диске выделяется место только при записи файла на диск. Таким образом под файл оптимально выделяется место на диске, что уменьшает фрагментацию.
Изменение размера «на лету» (только увеличение).
Размещение в нескольких линейных областях (по умолчанию — 4 шт.) т. н. «allocation groups» (увеличивает производительность путём выравнивания активности запросов как к разным дискам на RAID-массивах типа «stripe», так и при асинхронном обращении к файловой системе на обычном диске.)
Дефрагментация «на лету».
API ввода-вывода реального времени (для приложений жёсткого или мягкого реального времени, например, для работы с потоковым видео).
Интерфейс (DMAPI) для поддержки иерархического управления носителями (HSM).
Инструменты резервного копирования и восстановления (xfsdump и xfsrestore).
«Индексные блоки» inode выделяются динамически (по мере надобности) и неиспользуемые inode могут освобождаться (высвобождая место для хранения данных).
Малые «накладные расходы» — размер служебных структур данных. На вновь созданной файловой системе XFS на служебные нужды тратится порядка 0,54 %. Это достигается малым количеством заголовков для групп (allocation groups), а также за счет динамического выделения inode.

Невозможно уменьшить размер существующей файловой системы. Если раздел на диске занят XFS, его размер нельзя будет изменить в меньшую сторону (это важно принимать во внимание при разбивке диска).
Восстановление удалённых файлов в XFS — очень сложный процесс, поэтому на данный момент (2014 год) для этого существует всего лишь несколько программных продуктов, например «Raise Data Recovery for XFS» для ОС Windows.
Возможность потери данных во время записи при сбое питания, так как большое количество буферов данных хранится в памяти при том, что метаданные записываются в журнал (на диск) оперативно. Это характерно и для других файловых систем с журналированием метаданных.

Источник

Как узнать количество inode

Общая информация
Inode — объект файловой системы, файл или папка. Каждому такому объекту задается номер «inode». Чем больше файлов и папок на сервере, тем больше используются inode

Вывод будет примерно таким:
[root@kolesnikov

Колонка «IUse%» показывает, что занято только 6% i-node.

При 100% занятых inode сервер не сможет функционировать. При запросе к сайту, попытке зайти в панель управления будет выдаваться ошибка так, как на сервере не будут функционировать функции записи. Чтобы этого избежать, необходимо своевременно чистить ваш сервер от лишних файлов. Если произошло полное заполнение inode, то необходимо написать запрос в нашу техническую поддержку.

Определить, что закончились indodes Вы можете, посмотрев на графиках нагрузок в личном кабинете https://support.rusonyx.ru/index.php?/Knowledgebase/Article/View/289/0/grfiki-ngruzki

Чем заняты inode?

Наиболее распространенные случаи: Большая почтовая очередь
Чаще всего проблема актуальна при несанкционированных рассылках писем, т.е. на сервере присутсвуют зараженные вирусами файлы сайта и с него рассылается спам.
Для того, чтобы провести диагностику, нужно подключиться к серверу под Root пользователем.

Просмотреть количество сообщений в очереди можно при помощи команды:

Поиск файлов, занимающих больше всего i-node

Команда покажет, в какой директории находится больше всего файлов.
Пример вывода:

Видно, что больше всего файлов содержит в себе каталог /usr.
Теперь перейдем в этот каталог при помощи команды: cd *имя_директории* и выполнить следующий скрипт inodes.sh:
Откройте файл vi inodes.sh

Чтобы увидеть самые «большие» директории, выполните:
tail root/inodes.txt

Что делать если inodes закончились и подключиться к серверу нельзя?

Нужно составить запрос через тикет систему в нашу службу поддержки

Источник

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

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

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inodeПАВЕЛ ЗАКЛЯКОВ, ИТ-специалист

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

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

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество 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, например из 2 (см. рис. 1).

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество inode

Рисунок 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).

Как узнать количество inode. Смотреть фото Как узнать количество inode. Смотреть картинку Как узнать количество inode. Картинка про Как узнать количество inode. Фото Как узнать количество 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 могут повторяться, и одно дело – оперировать с ФС на отчуждаемом носителе, а другое дело – с корневой ФС.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

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