• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Inode в Linux

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

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

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

  1. верхушка иерархии — это сама файловая система;
  2. уровнем ниже идут имена файлов (папок);
  3. имена файлов ссылаются на inode;
  4. inode ссылаются на физические данные.

Таким образом, файловая система 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 для выполнения некоторых команд, то предварительно выполните:

sudo -i

Команды ls и df

Наиболее известная команда Linux, которую можно рекомендовать для просмотра информации об индексных дескрипторах — это ls, используемая с параметрами -i, -li. С помощью ls мы можем вывести на монитор сведения о содержимом каталогов и файлах нашей ОС.

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

ls -li /

Использование комапнды ls

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

df -hi

Использование команды df

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

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

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

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

sudo debugfs /dev/sda5

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

debugfs: stat 

Работа с отладчиком debugfs

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

  • Тип Inode — директория (Directory).
  • Права (Mode) — 755.
  • Владелец директории (User) — группа root (идентификатор пользователя 0).

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

debugfs: block_dump 9308

Просмотр блока block_dump

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

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

debugfs: ls -l 

Просмотр номеров Inode

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

debugfs: stat 

Просмотр записи Inode

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

debugfs: block_dump 24649760

Просмотр конкретного блока командой block_dump

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

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

sudo tune2fs -l /dev/sda5

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

Inode count 30498816

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

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

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

mkfs -t ext4 -N 10000000 /dev/sda5

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

mkfs -t ext4 -i 4K /dev/sda5

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

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

Заключение

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

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

Если же у вас возникают проблемы с индивидуальной настройкой вашей ОС Linux на арендуемых у нас серверах, то вы всегда можете обратиться за консультацией к специалистам нашей компании FREEhost.UA.

Дата: 24.03.2021
Автор: Владислав
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA