Что такое Inode
Это довольно низкоуровневое понятие, но обычным пользователям приходится взаимодействовать с ним когда эти самые Inode заканчиваются. Возможно вы уже встречались с ошибкой когда место на диске ещё есть, но программа не может создать файл, потому что Inode закончились. В этой статье мы подробно разберемся что такое Inode, а также попытаемся выяснить как избежать связанных с ними проблем.
Что такое Inode в Linux?
sudo debugfs /dev/nvme0n1p5
Затем выполните такую команду:
Здесь указано, что эта Inode имеет тип Directory, права 755. Её владелец и группа root, потому что идентификатор пользователя 0. Чуть ниже расположена информация про время создания, модификации и доступа. А в самом низу находятся блоки с данными этой Inode. Именно там хранится список файлов и папок директории. Вы можете посмотреть содержимое блока командой dump_block:
debugfs: block_dump 9238
Утилита выведет данные в HEX и ASCII формате, и в них будет видно имена папок. Но увидеть номера Inode здесь не получится без дополнительных программ. Проще всего их можно посмотреть с помощью команды ls:
Здесь в первом же столбике находится номер Inode для файла или папки. Для примера можно посмотреть ещё информацию про testfile с номером Inode 1128:
В разделе EXTENTS есть номер блока, в котором находятся данные файла. В данном случае это 6596316. В нём можно посмотреть содержимое файла:
debugfs: block_dump 6596316
Здесь они будут тоже в первой колонке. Обратите внимание, что у каждого файла, папки или символической ссылки уникальный номер Inode. Исключение составляют только жесткие ссылки. Количество Inode в файловой системе ограничено, оно определяется при инициализации файловой системы. Посмотреть текущее количество Inode можно командой tune2fs:
Как видите, на моём корневом разделе использовано 29% Inode, а блоков у меня уже использовано 95%. Но если бы у меня было очень много мелких файлов, то место бы ещё осталось, а доступные Inode закончились. Тогда бы возникла ошибка создания файла, даже несмотря на то, что место ещё есть. Чтобы избежать такой ситуации надо тщательно планировать как вы будете использовать файловую систему.
В данном случае будет создана файловая система с тремя миллионами индексов Inode. Ещё можно не указывать точное количество Inode, а указать количество байт в одной Inode, это может быть удобно, если вы знаете средний размер ваших файлов, которые будут хранится в файловой системе. Например:
В качестве альтернативы, можно использовать файловую систему Btrfs, в которой Inode не могут закончиться потому что они генерируются динамически по мере необходимости.
Выводы
В этой статье мы рассмотрели что такое Inode в Linux, а также что произойдёт если доступное количество Inodes закончатся. Будьте осторожны при создании файловой системы и думайте какие файлы в ней будут размещены и сколько их там будет чтобы избежать проблем с Inode.
Все, что вам нужно знать об inode в Linux
Главное меню » Операционная система Linux » Все, что вам нужно знать об inode в Linux
Краткое резюме
Inodes хранит метаданные для каждого файла в вашей системе в виде таблицы, обычно расположенной в начале раздела. Они хранят всю информацию, кроме имени файла и данных.
Каждый файл в данном каталоге является записью с именем файла и номером индекса. Вся остальная информация о файле извлекается из таблицы индексов путем ссылки на номер индекса.
Номера inodes уникальны на уровне раздела. Каждый раздел как собственная таблица индексов.
Если у вас закончились inode, вы не можете создавать новые файлы, даже если у вас есть свободное место на данном разделе.
Что такое inode в Linux?
Inode означает индексный узел. Хотя история не совсем уверена в этом, это самое логичное и лучшее предположение, которое они придумали. Раньше было написан I-node, но дефис со временем потерялся.
Как написано на linfo.org :
Inode это структура данных … … которая хранит всю информацию о файле, кроме его имени и его фактических данных.
Inodes хранит метаданные о файле, к которому он относится. Эти метаданные содержат всю информацию об указанном файле.
Каждый используемый inod ссылается на 1 файл. Каждый файл имеет 1 индекс. Каталоги, файлы символов, блочные устройства, все это файлы. У каждого из них есть 1 индекс.
Для каждого файла в каталоге есть запись, содержащая имя файла и номер индекса, связанный с ним.
Inodes являются уникальными на уровне разделов. Вы можете иметь два файла с одинаковым номером inode, если они находятся в другом разделе. Информация inodes хранится в виде таблицы в виде структуры в стратегических частях каждого раздела. Часто встречается в начале.
Как проверить inode в Linux?
Вы можете легко перечислить номер inode с помощью следующей команды:
На следующих рисунках показан корневой каталог с соответствующими номерами inodes. 
Количество inodes каждой файловой системы определяется при создании файловой системы. Для большинства пользователей число inode по умолчанию более чем достаточно.
Большинство настроек по умолчанию при создании файловой системы создает 1 inode на каждые 2 Кбайт пространства. Это дает множество inodes для большинства систем. Скорее всего, вам не хватит места, прежде чем закончатся inode. При необходимости вы можете указать, сколько inodes создавать при создании файловой системы.
Если у вас закончились inode, вы не сможете создать новый файл. Ваша система также не сможет это сделать. Это не та ситуация, с которой сталкивается большинство пользователей, но это возможно.
Например, почтовый сервер будет хранить огромное количество очень маленьких файлов. Многие из этих файлов будут меньше 2K байтов. Также ожидается постоянный рост. Поэтому почтовому серверу грозит нехватка inode, прежде чем закончится свободное место.
В некоторых файловых системах в Linux, таких как Btrfs, JFS, XFS, реализованы динамические inode. Они могут увеличить количество доступных inode, если это необходимо.
Как работает inode?
Когда создается новый файл, ему присваивается номер inode и имя файла. Номер индекса – это уникальный номер в этой файловой системе. И имя, и номер индекса хранятся в виде записи в каталоге.
Вы можете вывести информацию об индексах для каждой файловой системы с помощью этой команды:
Inodes & мягкая/жесткая связь
Мягкая ссылка – известная особенность в Linux. Но что происходит с Inodes, когда вы создаете программную ссылку? На следующем рисунке у нас есть каталог с именем «dir1», файл с именем «file1», а внутри «dir1» у нас есть мягкая ссылка «slink1», которая указывает на «../file1» 
Теперь мы можем рекурсивно перечислять и показывать информацию об inods. 
Как и ожидалось, dir1 и file1 имеют разные номера inode. Но так же и мягкая ссылка. Когда вы создаете программную ссылку, вы создаете новый файл. В своих метаданных он указывает на цель. Для каждой созданной вами мягкой ссылки вы используете один индекс.
После создания жесткой ссылки в dir1 с помощью следующей команды:
Список номеров 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 в разных «диспетчерских» (колл-центрах). Не было проблем с инодами.
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. Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровне
Архив номеров / 2017 / Выпуск №7-8 (176-177) / Лабораторная работа: исследуем inode. Часть 1. Взаимодействие с inode через стандартные программы на пользовательском уровне
|









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





