Что такое inode в linux

Что такое 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.

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Inode в Linux — что это такое?

Назначение Inode в ОС Linux

Для ОС Linux есть такое понятие, как Inode или индексный дескриптор. Индексные дескрипторы в файловых системах (таких как ext4) предназначены для хранения метаданных о файлах, каталогах и др. объектах.

Представим иерархическую структуру файловой системы Линукс в упрощенном виде:

Таким образом, файловая система Linux содержит блоки для хранения данных и inodes. По умолчанию, в ext4, 4092 байта — это размер одного блока. Любой файл в каталоге ОС Linux имеет имя файла и номер inode. Пользователь может узнать метаданные этого файла, указав его номер inode.

Как правило, каждый Inode хранит следующие атрибуты:

Таблица с Inode размещена в начале раздела диска, после нее уже идут блоки с данными. Директории в ОС Линукс рассматриваются как Inode типа «директория», в них содержатся списки имен файлов и номера их inode.

Для ОС Линукс также важно понятие о ссылках (символические и жесткие ссылки).

Символическая ссылка — это по своей сути «ярлык», она содержит адрес файла.

Если вы попытаетесь открыть такую ссылку, то откроется соответствующий файл (папка). Если удалить данный файл (папку), символическая ссылка не удалится, но при попытке открыть ее — она приведет «в никуда». Номер Inоdе «символической ссылки» отличается от номера inоde того файла, на который она ссылается.

Если же вы используете «жесткие ссылки», то ваш конкретный файл находится только в определенном месте жесткого диска, а уже именно на это место и ведут сразу несколько ссылок. Каждая «жесткая ссылка» представлена в виде отдельного файла, однако все такого вида ссылки указывают на один и тот же участок диска (даже если мы перемещаем этот файл между разными каталогами). Жесткая ссылка в системе идет под таким же номером Inode, как и фaйл, на который она ссылается.

Казалось бы, тема «Inode в ОС Linux» — это сфера деятельности системных администраторов и не касается рядовых пользователей, однако, у вас может произойти такой случай, когда на диске вроде бы есть еще свободное место, а вот новые файлы вы уже создавать не можете, так как у вас закончились номера inode. В данной статье мы объясняем зачем нужен inode, а также рассмотрим, как работать с linux инод и дадим все необходимые команды для этого.

Методы и команды для работы c Linux inode

Все способы работы с linux inode будут показаны на примере десктопной ОС Ubuntu 20. Перед началом работы, необходимо узнать, на каком диске расположена файловая система, в нашем случае — это /dev/sda5. Номер 2 имеет наша корневая папка (для ext4).

Если вам потребуются права пользователя root для выполнения некоторых команд, то предварительно выполните:

Команды ls и df

Итак, посмотрим inode для файлов нашей системы с помощью команды:

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

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

Как работать с отладчиком debugfs

Debugfs — это утилита для работы с файловыми системами Ext2/Ext3/Ext4, работает она в режиме отладчика. Для вывода списка всех команд утилиты, воспользуйтесь опцией help, для выхода из режима отладчика нужно воспользоваться командой quit.

Итак, посмотрим информацию о диске, на котором расположена наша файловая система:

После этого, выполним такую команду:

Какую же основную информацию мы можем получить из данного скриншота?

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

На скриншоте мы видим только данные, записанные в форматах HEX и ASCII, справа видны и имена папок.

А для того, чтобы получить номера Inode, воспользуемся следующими командами:

В первом слева столбике мы видим номера inode для папок или файлов, для примера, можно найти папку usr c номером инод 6160385 и посмотреть эту запись:

Сейчас обратим внимание на раздел EXTENTS, там содержится запись с номером блока, в котором находится содержимое этой директории, посмотрим его с помощью команды:

Пример использования команды tune2fs

Как мы уже знаем, количество инод в системе ограничено, посмотреть эту информацию можно с помощью команды tune2fs. Утилита tune2fs дает возможность пользователю изменять различные параметры файловых систем ext2/ext3/ext4. А также она позволяет посмотреть установленные в системе параметры

На этом скриншоте видно сколько всего у нас в системе Inode:

Команда mkfs для создания новой файловой системы в Линукс

Команда mkfs (“make file system”) используется для форматирования файловой системы Линукс. На этапе создания новой файловой системы можно предусмотреть большее количество Inode, чтобы в будущем избежать проблему с их нехваткой. Делается это следующей командой (создаем файловую систему с 10 миллионами inode):

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

Использование альтернативных файловых систем

Для тех пользователей, кто не хочет испытывать проблемы с нехваткой Inode в файловых системах ext2/ext3/ext4, мы можем посоветовать использование альтернативной файловой системы Btrfs (B-tree FS или Better Fs, Butter FS), которая основана на принципах структур B-деревьев и «копирования при записи» (copy-on-write). Основное преимущество Btrfs — это использование динамического выделения inоdе, которое исключает ограничения на максимальное количество файлов в файловой системе, существующее в системах ext.

Заключение

В этой статье мы постарались объяснить читателям, что такое Inode в ОС Linux, а также дали ряд полезных команд и утилит для работы с индексными дескрипторами. Также мы постарались рассказать, как предотвратить проблему на диске, когда закончились Inode.

Надеемся, что данный материал будет полезен, как обычным пользователям ОС Линукс, так и начинающим системным администраторам.

Источник

Кое-что об 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

Главное меню » Операционная система 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.

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Что такое iiko программа
  • Что такое iiko программа как с ней работать
  • что такое iiko программа и как в ней работать
  • Что такое iiko программа для ресторанов
  • Что такое idle в программировании

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии