Как работают иноды в Linux?

Bg1 Resize

Если вы достаточно долго используете Linux, вы, вероятно, встречали термин “иноды”. Это что-то, что будет появляться время от времени, но не влияет на то, что вы делаете. Здесь мы объясним, что такое иноды и как они работают.

Что такое иноды?

В библиотеке все книги организованы по жанрам, именам авторов или возрастным группам читателей. Если вы хотите найти триллер “Бобби Дэниелса”, вы прямо пойдете в раздел триллеров и начнете искать имена авторов, начинающиеся на “Б”. Точно так же все файлы в системе Linux организованы для эффективного поиска и использования. Инод — это сущность, помогающая в организации файлов в системе Linux.

Что такое метаданные файла?

Допустим, у нас есть файл под названием “sample.txt”, содержащий данные “hello”.

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

что такое инод - метаданные файла

Что такое файловые системы?

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

Разделы в системах Linux часто форматируются с использованием EXT4. Другие файловые системы, такие как B-Tree File System (BTRFS), Reiser File System, ZFS и т.д., также доступны для использования.

Связывая все вместе

Инод — это структура данных на Ext4, которая хранит все метаданные для файла.

Инод в деталях

Конечно, на файловой системе будет множество файлов. Как вы уже догадались, у каждого файла будет свой собственный инод. Чтобы уникально идентифицировать иноды, каждый инод имеет номер.

Как будет выглядеть нумерация инодов?

Номера инодов на файловой системе начинаются с 1. Первые десять инодов зарезервированы для системного использования. Метаданные пользовательских файлов хранятся начиная с инода 11. Все иноды аккуратно упакованы вместе в таблице инодов.

Одна запись в таблице инодов будет размером 256 байт. Для файла Linux умно организует все метаданные в пределах 256 байт! Кроме того, инод для файла также будет содержать информацию о том, где в файловой системе находятся данные файла. Помните — только метаданные файла хранятся в иноде.

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

Как выделяются и освобождаются иноды?

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

Существует другая структура данных, называемая “битовой картой инодов”, для отслеживания статуса выделения инода. Это коллекция битов, которая действует как карта.

Рассмотрим восемь бит в битовой карте инодов, чтобы обозначить статус выделения инодов с 11 по 18, как показано в таблице ниже. Значение 1 в битовой карте означает, что инод выделен, т.е. используется для хранения метаданных файла. Значение 0 в битовой карте означает, что инод в настоящее время не используется. Здесь мы можем видеть, что инод 17 используется.

Битовая карта инодов

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

Таблица битовой карты инодов

Как просмотреть номер инода для файла?

Существует два способа сделать это.

Первый — использовать команду ls с переключателем -i, за которым следует имя файла. Первое поле в выводе — это номер инода, который содержит метаданные “sample.txt”.

Та же информация может быть получена с помощью команды stat, за которой следует имя файла.

Инод 8

Чтобы просмотреть общее количество инодов, доступных для раздела, можно использовать команду df с переключателем -i.

В разделе “/dev/sda4” доступно 404754480 инодов, из которых только 359044 инода используются.

Заключение

По своей природе таблица инодов аккуратно упаковывает метаданные всех файлов в иноды, вместе с информацией о местоположении данных файла. Все, что мы обсудили о инодах Linux, — это лишь верхушка айсберга. Для получения дополнительной информации о его внутренней работе вы можете ознакомиться с этой ссылкой.