- Роль Inode в файловых системах Linux
- Что такое inode?
- Сколько существует инодов?
- Команды для работы с inode
- Номер inode файла
- Номер inode каталога
- Подведем итог
- Tyler Carrigan
- Национальная библиотека им. Н. Э. Баумана Bauman National Library
- Персональные инструменты
- Inode (Индексный Дескриптор)
- Содержание
- Суть inode
- Описание индексного дескриптора в POSIX
- Индексный дескриптор не содержит:
- Практическое применение
- Структура дискового inode
- Что такое Inode
- Что такое Inode в Linux?
- Выводы
Роль Inode в файловых системах Linux
Оригинал: Inodes and the Linux filesystem
Автор: Tyler Carrigan (Red Hat)
Дата публикации: 9 июня 2020 г.
Перевод: В.Костромин
Дата перевода: 15 июня 2020 г.
Понять строение файловых систем Linux довольно сложно, особенно когда вы погружаетесь в хитросплетение данных и метаданных. Каждый раз, когда вы запускаете команду ls и видите вывод — перечисление файлов, разрешения, владельцев и т.д. — вы должны понимать, что данные о просматриваемых файлах хранятся где-то отдельно от самих файлов и должны вызываться при обращении к файлу. Иноды усердно работают «за кадром», выполняя работу, которую вы не видите. Давайте же посмотрим, что же такое inode и для чего он нужен.
Что такое inode?
Inode – это сокращение от «index node», по-русски – индексный узел. По сути он представляет собой уникальную порцию метаданных в заданной файловой системе. Эта порция метаданных описывает то, что мы называем файлом. Иноды относятся только к определенной файловой системе, не касаясь других. Как ни странно это может показаться, но все иноды хранятся в общей таблице и это иногда вызывает недоумение. Однако каждая файловая система, смонтированная на вашем компьютере, имеет свои собственные inode. Номер inode может использоваться более одного раза, но никогда не может дважды использоваться одной и той же файловой системой. Идентификатор файловой системы в сочетании с номером инода создает уникальную идентификационную метку.
Сколько существует инодов?
Если вы не хотите связываться с математикой, вы можете пропустить этот раздел. В каждой системе имеется множество inode и есть несколько относящихся к ним числовых значений, которые нужно знать. Прежде всего, хотя это и менее важно, теоретическое максимальное число inode равно 2 ^ 32 (приблизительно 4,3 миллиарда inode). Во-вторых, что гораздо важнее, это число inode в вашей системе. Как правило, количество inode составляет 1:16 от объема файловой системы в КБ. Очевидно, что каждая система отличается, поэтому вам нужно рассчитать это значение самостоятельно.
Команды для работы с inode
Есть хорошая новость для тех, кто не любит математику: для этого есть специальная команда. Чтобы узнать количество inode в вашей системе, вы можете использовать команду df с опцией -i , как показано здесь:
Вы можете видеть, что в этом примере мы запустили команду df -i на файловой системе /dev/sda1 . В этой системе всего имеется 524 288 инодов, но только 312 из них используется (примерно 1%).
Номер inode файла
Мы также можем узнать номер inode конкретного файла. Для этого можно использовать команду ls -i с указанием нужного файла. Например:
Номер inode этого файла — 1459027.
Номер inode каталога
Подобно тому, как мы узнали номер inode файла, мы можем посмотреть и номер inode каталога. Для этого снова используем команду ls -i с некоторыми дополнительными опциями. Например:
Как вы можете видеть, мы использовали опцию -i (inodes), а также -l (long format) и -d (directory). Применение этих флажков позволяет нам получить множество информации о каталоге my_articles, включая номер inode, разрешения, владельцы и т.д.
Подведем итог
Если вы хотите узнать больше о файловых системах и их структурах, то inode — это отличная тема для начала. Очень важно знать как помечаются и индексируются самые маленькие единицы данных. Некоторые из более продвинутых операций могут быть выполнены с помощью inode. Например, вы можете открыть индекс и прочитать содержимое файла. Это позволит вам более глубоко понять, какие данные хранятся в inode.
Надеммся, что этот поверхностный обзор послужит для вас отправной точкой для более глубокого изучения inode.
Tyler Carrigan
Tyler работает менеджером в Enable Sysadmin, является ветераном подводного флота и энтузиастом новых технологий! Он впервые познакомился с Red Hat в 2012 году при использовании основанной на Red Hat Enterprise Linux боевой системы в Центре управления ракетами на подводной лодке USS Georgia.
Источник
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Inode (Индексный Дескриптор)
inode (произносится а́йнод или ино́д), индексный дескриптор — это структура данных в традиционных для ОС UNIX файловых системах (ФС), таких как UFS. В этой структуре хранится метаинформация о стандартных файлах, каталогах или других объектах файловой системы, кроме непосредственно данных и имени. Каждый файл ассоциирован с одним inode, хотя может иметь несколько имен в системе, каждое из которых указывает на один и тот же inode [1] .
Содержание
Суть inode
Индексный дескриптор содержит информацию о расположении данных файла. Поскольку дисковые блоки хранения данных файла в бщем случае располагаются не последовательно, inode, должен хранить физические адреса всех блоков, принадлежащих данному файлу. В индексном дескрипторе эта информация хранится в виде массива, каждый элемент которого содержит физический адрес дискового блока, а индексом массива является номер логического блока файла. Массив имеет фиксированный размер и состоит из 13 элементов. При этом первые 10 элементов адресуют непосредственно блоки хранения данных файла. Одиннадцатый элемент адресует блок, в свою очередь содержащий адреса блоков хранения данных файла. Двенадцатый элемент указывает на дисковый блок, также хранящий адреса блоков, каждый из который адресует блок хранения данных файла. И, наконец, тринадцатый элемент используется для тройной косвенной адресации, когда для нахождения адреса блока хранения данных файлаиспользуются три дополнительных блока. Такой подход позволяет при относительно небольшом фиксированном размере индексного дескриптора поддерживать работу с файлами, размер которых может изменяться от нескольких байтов до десятка мегабайтов. Для относительно небольших файлов (до 10 Кбайт при размере блока 1024 байтов) используется прямая индексация, обеспечивающая максимальную производительность. Для файлов, размер которых не превышает 266 кбайт (10 кбайт + 256х1024), достаточно простой косвенной адресации. Наконец, при использовании тройной косвенной адресации можно обеспечить доступ к 16777216 блокам (256х256х256) [2] .
Описание индексного дескриптора в POSIX
Стандарты POSIX описывают поведение файловой системы как потомка традиционных файловых систем UNIX — UFS. Регулярные файлы должны иметь следующие атрибуты:
- длина файла в байтах;
- идентификатор (ID) устройства (это идентифицирует устройство, содержащее файл);
- ID пользователя, являющегося владельцем файла;
- ID группы файла;
- режим файла, определяющий какие пользователи могут считывать, записывать и запускать файл;
- Timestamp указывает дату последнего изменения инода (ctime, change time), последней модификации содержимого файла (mtime, modification time), и последнего доступа (atime, access time);
- счетчик ссылок указывают количество жестких ссылок, указывающих на индексный дескриптор;
- указатели на блоки диска, хранящие содержимое файла (подробнее. ).
- Системный вызов stat считывает номер индексного дескриптора файла и некоторую информацию из него.
Индексный дескриптор не содержит:
- имени файла, которое содержится в блоках хранения данных каталога;
- содержимого файла, которое размещено в блоках хранения данных.
Практическое применение
Множество программ, используемых системными администраторами в операционной системе (ОС) UNIX, часто используют номера индексных дескрипторов для обозначения файлов. Популярная встроенная программа проверки жестких дисков fsck или команда pfiles могут послужить в данном случае примерами, так как у них есть необходимость естественным образом конвертировать номера индексных дескрипторов в пути файлов и обратно. Это может быть дополнено использованием программы поиска файлов find с ключом -inum или командой ls с соответствующим ключом (которым на большинстве платформ является -i). Иноды могут ‘закончиться’. В этом случае нельзя записать информацию на устройство, даже если там достаточно свободного места.
Структура дискового inode
di_mode | Тип файла, дополнительные атрибуты выполнения и права доступа |
di_nlinks | Число ссылок на файл, т. е. количество имен, которые имеет файл в файловой системе |
di_uid, di_gid | Идентификаторы владельца-пользователя и владельца-группы. |
di_size | Размер файла в байтах. Для специальных файлов это поле содержит старший и младший номер устройства. |
di_atime | Время последнего доступа к файлу. |
di_mtime | Время последней модификации. |
di_ctime | Время последней модификации inode (кроме модификации полей di_atime, di_mtime). |
di_addr[13] | Массив адресов дисковых блоков хранения данных. |
Поле di_mode хранит несколько атрибутов файла: тип файла (IFREG — для обычных файлов, IFDIR — для каталогов, IFBLK или IFCHR для специальных файлов блочных и символьных устройств соответственно); права доступа к файлу для трех классов пользователей и дополнительные атрибуты выполнения (SUID, SGID и sticky bit). Заметим, что в индексном дескрипторе отсутствует информация о времени создания файла. Вместо этого inode хранит три значения времени: последнего доступа (di_atime), время последней модификации содержимого файла (di_mtime) и время последней модификации метаданных файла (di_ctime). В последнем случае не учитываются модификации полей di_atime и di_mtinie. Таким образом, di_ctime изменяется, когда изменяется размер файла, владелец, группа или число связей.
Источник
Что такое Inode
Inode — это структура данных в которой хранится информация о файле или директории в файловой системе. В файловой системе Linux, например Ext4, у файла есть не только само его содержимое, например, тот текст, но и метаданные, такие как имя, дата создания, доступа, модификации и права. Вот эти метаданные и хранятся в Inode. У каждого файла есть своя уникальная Inode и именно здесь указано в каких блоках находятся данные файла.
Это довольно низкоуровневое понятие, но обычным пользователям приходится взаимодействовать с ним когда эти самые Inode заканчиваются. Возможно вы уже встречались с ошибкой когда место на диске ещё есть, но программа не может создать файл, потому что Inode закончились. В этой статье мы подробно разберемся что такое Inode, а также попытаемся выяснить как избежать связанных с ними проблем.
Что такое Inode в Linux?
Как я уже сказал выше, Inode или I-node или индексный дескриптор — это структура данных, в которой хранятся метаданные файла и перечислены блоки с данными файла. Но начать надо с файловой системы. Файловые системы Ext используют блоки для хранения данных. По умолчанию размер одного блока равен 4092 байта. В начале раздела расположен суперблок, в котором находятся метаданные всей файловой системы, а ним идут несколько зарезервированных блоков, а затем размещена таблица Inode и только после неё блоки с данными. Таким образом, все Inode размещены в начале раздела диска.
Директории — это тоже Inode типа директория, в которых вместо содержимого файла содержится список имён файлов и номера их Inode. Корневая папка в Ext4 имеет номер Inode — 2. Вы можете посмотреть информацию о ней с помощью утилиты debugfs. Утилите в параметрах надо передать диск, на котором расположена файловая система:
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 идентификаторы файлов можно также с помощью команды ls. Для этого надо передать ей опцию -i:
Здесь они будут тоже в первой колонке. Обратите внимание, что у каждого файла, папки или символической ссылки уникальный номер Inode. Исключение составляют только жесткие ссылки. Количество Inode в файловой системе ограничено, оно определяется при инициализации файловой системы. Посмотреть текущее количество Inode можно командой tune2fs:
sudo tune2fs -l /dev/nvme0n1p5
Нужная информация находится в поле Inode count. Посмотреть Inode можно с помощью утилиты df передав ей опцию -i:
Как видите, на моём корневом разделе использовано 29% Inode, а блоков у меня уже использовано 95%. Но если бы у меня было очень много мелких файлов, то место бы ещё осталось, а доступные Inode закончились. Тогда бы возникла ошибка создания файла, даже несмотря на то, что место ещё есть. Чтобы избежать такой ситуации надо тщательно планировать как вы будете использовать файловую систему.
Вы не можете изменить количество Inode для существующей файловой системы, зато можете указать для новой с помощью опции -N. Например:
mkfs -t ext4 -N 3000000 /dev/nvme0n1p5
В данном случае будет создана файловая система с тремя миллионами индексов Inode. Ещё можно не указывать точное количество Inode, а указать количество байт в одной Inode, это может быть удобно, если вы знаете средний размер ваших файлов, которые будут хранится в файловой системе. Например:
mkfs -t ext4 -i 2K /dev/nvme0n1p5
В качестве альтернативы, можно использовать файловую систему Btrfs, в которой Inode не могут закончиться потому что они генерируются динамически по мере необходимости.
Выводы
В этой статье мы рассмотрели что такое Inode в Linux, а также что произойдёт если доступное количество Inodes закончатся. Будьте осторожны при создании файловой системы и думайте какие файлы в ней будут размещены и сколько их там будет чтобы избежать проблем с Inode.
Источник