inode linux что это

Кое-что об inode

Периодически, с целью переезда в ЦРС собеседуюсь в разных крупных компаниях, в основном Питера и Москвы на должность DevOps. Обратил внимание, что во многих компаниях (во многих хороших компаниях, например в яндексе) задают два сходных вопроса:

Начну «снизу», т.е. с жесткого диска (флешки, SSD и прочие современные штуки отбросим, для примера рассмотрим любой 20 или 80 гиговый старый диск, т.к. там размер блока 512 байт).

Жесткий диск не умеет адресовать свое пространство побайтно, условно оно разбито на блоки. Нумерация блоков начинается с 0. (называется это LBA, подробности тут: ru.wikipedia.org/wiki/LBA)

Как видно из рисунка, блоки LBA я обозначил как уровень HDD. К слову, посмотреть, какой размер блока у вашего диска можно так:

Уровнем выше размечен раздел, один на весь диск (опять же для простоты). Чаще всего используют разметку разделов двух типов: msdos и gpt. Соответственно msdos — старый формат, поддерживающий диски до 2Tb, gpt — новый формат, способный адресовать до 1 зеттабайта 512 байтных блоков. В нашем случае имеем раздел типа msdos, как видно из рисунка, раздел при этом начинается с блока №1, нулевой же используется для MBR.

В первом разделе я создал файловую систему ext2, по умолчанию размер блока у нее 4096 байт, что также отражено на рисунке. Посмотреть размер блока файловой системы можно так:

Нужный нам параметр — «Block size».

Теперь самое интересное, как прочитать файл /home/serp/testfile? Файл состоит из одного или нескольких блоков файловой системы, в которых хранятся его данные. Зная имя файла, как его найти? Какие блоки читать?

Вот тут нам и пригождаются inode. В файловой системе ext2fs есть «таблица», в которой содержится информация по всем inode. Количество inode в случае с ext2fs задается при создании файловой системы. Нужные цифры смотрим в параметре «Inode count» вывода tune2fs, т.е. имеем 65536 штук. В inode содержится нужная нам информация: список блоков файловой системы для искомого файла. Как найти номер inode для указанного файла?

Соответствие имени и номера inode содержится в директории, а директория в ext2fs — это файл особого типа, т.е. тоже имеет свой номер inode. Чтоб разорвать этот порочный круг, для корневой директории назначили «фиксированный» номер inode «2». Смотрим содержимое inode за номером 2:

Как видно, нужная нам директория содержится в блоке с номером 579. В ней мы найдем номер нода для папки home, и так далее по цепочке, пока в директории serp не увидим номер нода для запрошенного файла. Если вдруг кому то захочется проверить, верный ли номер, и есть ли там нужная инфа, это не сложно. Делаем:

В выводе можно прочитать имена файлов в директории.

Вот я и подошел к главному вопросу: «по каким причинам может возникнуть ошибка записи»?

Естественно так случится, если не останется свободных блоков файловой системы. Что можно в этом случае сделать? Кроме очевидного «удалить что-нибудь ненужное», следует помнить, что в файловых системах ext2,3 и 4 есть такая штука, как «Reserved block count». Если посмотреть в листинге выше, то у нас таких блоков «13094». Это блоки доступные для записи только пользователю root. но если нужно оперативно решить вопрос, как временное решение можно сделать их доступными для всех, в результате чего появится немного свободного места:

Т.е. по умолчанию, у вас не доступно для записи 5% дискового пространства, и учитывая объемы современных дисков, это могут быть сотни гигабайт.

Что еще может быть? Еще возможна ситуация, когда свободные блоки есть, а ноды кончились. Такое обычно случается, если у вас в файловой системе куча файлов размером меньше размера блока файловой системы. Учитывая, что на 1 файл или директорию тратится 1 inode, а всего их имеем (для данной файловой системы) 65536 — ситуация более чем реальная. Наглядно это можно увидеть из вывода команды df:

Как хорошо заметно на разделе /var/www, количество свободных блоков файловой системы, и количество свободных нодов сильно различается.

На случай если кончились inode, заклинаний не подскажу, т.к. их нет (если не прав, дайте знать). Так что для разделов в которых плодятся мелкие файлы следует грамотно выбирать файловую систему. Так например в btrfs inode не могут закончиться, т.к. динамически создаются новые при необходимости.

Источник

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

Обновл. 31 Авг 2021 |

Ваша система когда-нибудь жаловалась на то, что у вас не осталось свободного места, в то время как его было явно более чем достаточно?

Иноды и метаданные

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

Инод (или «индексный дескриптор», «inode», от англ. «index node») — это структура данных, в которой хранятся метаданные о стандартных файлах, каталогах или других объектах файловой системы. Каждый используемый инод ссылается на 1 файл. Каждый файл имеет 1 инод. Каталоги, символьные и блочные устройства — всё это является файлами, а значит у каждого из них есть по 1 иноду.

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

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

Иноды уникальны только в границах разделов своих файловых систем. Если у вас есть два файла, которые находятся на разных разделах диска, то у них могут быть одинаковые номера инодов.

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

Как получить информацию об инодах в Linux?

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

На следующем скриншоте показан мой корневой каталог с соответствующими номерами инодов:

Количество инодов в каждой файловой системе задается на этапе её создания, и, как правило, для большинства пользователей их количества более чем достаточно.

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

Если у вас всё-таки закончатся иноды, то ни вы, ни ваша система больше не сможете создавать новые файлы. Это довольно редкая ситуация, но все же она может возникнуть. Например, в старые времена некоторые почтовые серверы, которые хранили сообщения электронной почты в виде отдельных файлов (что быстро приводило к созданию больших коллекций маленьких файлов размером менее 2 килобайт), довольно часто сталкивались с данной проблемой. Однако, когда они перешли на использование баз данных, проблема решилась.

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

Как работает инод?

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

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

Иноды и ссылки

Теперь сравним их номера инодов:

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

Теперь давайте создадим жесткую ссылку и посмотрим, что произойдет с инодами:

Выводим список номеров инодов:

Вы можете видеть, что file1 и hlink1 имеют одинаковый номер инода. Жесткая ссылка не создает новый файл, она лишь предоставляет новое имя для тех же данных. Такое возможно благодаря введению механизма инодов.

Примечание: В более старых версиях Linux можно было создать жесткую ссылку на каталог. Было даже возможно сделать так, чтобы каталог стал родительским самому себе. Но теперь установлены некоторые ограничения, чтобы пользователи не создавали очень запутанную структуру каталогов.

Польза от инодов

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

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

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

Еще одна интересная функция, которая поставляется с инодами, — это возможность хранить данные в самом иноде. Это называется встраиванием (англ. «inlining»). Этот метод хранения имеет преимущество в экономии места, поскольку не требует использования блоков данных, но при этом также увеличивает время поиска, избегая дополнительного доступа к диску для получения данных.

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

Заключение

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

Источник

Что такое иноды в Linux и как они используются?

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

Что такое иноды в Linux? Записи Inode являются основой файловой системы Linux. Они управляют метаданными о файле и являются неотъемлемой частью внутренней работы Linux.

Какова структура файловой системы?

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

Имя, путь, местоположение, ссылки и другие атрибуты файла не находятся в каталоге. Каталоги — это просто таблицы, которые содержат имена файлов с соответствующим номером инода.

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

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

Верхняя часть иерархии — это сама файловая система. Внутри файловой системы находятся имена файлов. Имена файлов ссылаются на иноды. Индексы ссылаются на физические данные.

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

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

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

Имена файлов и номера индексов хранятся в отдельном индексе и ссылаются на индекс. Вы можете ссылаться на метаданные, которые представляют файл. Можно иметь несколько имен файлов, которые ссылаются на один фрагмент данных или индекс, как вы можете видеть на рисунке ниже.

Что такое номер инода?

Каждый индекс в структуре Linux имеет уникальный номер, идентифицируемый с ним. Он также называется индексным номером и имеет следующие атрибуты:

Чтобы проверить список номеров инодов, используйте следующую команду:

На приведенном ниже снимке экрана показан каталог с номерами узлов, которые отображаются в крайнем левом столбце.

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

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

Сколько Inode вы используете?

Один из способов освободить место в файловой системе — это использовать все свои inode. Даже если у вас достаточно свободного места на диске, вы не сможете создавать новые файлы.

Использование всех инодов также может привести к внезапной остановке системы. Чтобы просмотреть список статистических данных об использовании inode, таких как «Используется», «Свободен» и «Процент использования», введите следующую команду:

Используются дополнительные способы Inode

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

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

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

Пользователи не взаимодействуют напрямую с inode, но они представляют фундаментальный компонент файловых структур Linux.

Источник

Все, что вам нужно знать об 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.

Источник

Операционные системы и программное обеспечение