Поиск по сайту:
Первый шаг младенца есть первый шаг к его смерти (К. Прутков).

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

12.03.2019

У нас к вам странный вопрос. Ваша система когда-нибудь жаловалась на то, что у вас не осталось свободного места, хотя у вас явно все еще было достаточно? Это случается, когда оставалось много GB, но система Linux жаловалась, что места не осталось. Тогда узнали об inodes.

 

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

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

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

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

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

 

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

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

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

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

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

  • Размер.
  • Разрешение.
  • Владелец/группа.
  • Расположение жесткого диска.
  • Дата/время.
  • Любая другая необходимая информация.

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

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

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

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

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

ls -i

 

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

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

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

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

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

 

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

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

Когда запускаете команду ls « ls -li /», имя файла и номер inode хранилось в каталоге /. Оставшаяся информация пользователя, группы, прав доступа к файлу , размера и т. д. была получена из таблицы индексов с использованием номера индекса.

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

du -hi

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

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

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

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

ln ../file1 hlink1

 

Список номеров inode дает нам следующую информацию:
Все, что вам нужно знать об inode в Linux
Вы можете видеть, что « 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.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Руслан

Спасибо большое за подробное разъяснение с примерами, это очень важно для понимания!

Читайте также

Спасибо!

Теперь редакторы в курсе.