Помните, что наша файловая система состоит из всех наших фактических файлов и базы данных, которая ими управляет? Эта база данных известна как таблица inode (таблица i-узлов), фундаментальная часть того, как работает inode in linux.
Что такое Inode в Linux
Inode (сокращение от index node — индексный дескриптор) — это запись в этой таблице. Каждый файл и каталог имеет свой собственный inode. Он описывает все о файле, например:
- Тип файла (например, обычный файл, каталог, символьное устройство)
- Владелец
- Группа
- Права доступа
- Временные метки: mtime (последнее изменение), ctime (последнее изменение атрибутов), atime (последний доступ)
- Количество жестких ссылок на файл
- Размер файла
- Количество блоков, выделенных файлу
- Указатели на блоки данных файла (самое важное!)
По сути, i node хранит все метаданные о файле, кроме его имени и фактического содержимого.
Создание и выделение Inode
При создании файловой системы также выделяется место для inode. Алгоритмы определяют, сколько места для inode вам потребуется, исходя из объема диска и других факторов. Вы, вероятно, видели ошибки нехватки места на диске. То же самое может случиться и с inode, хотя это менее распространено. Если у вас закончатся inode, вы не сможете создавать новые файлы. Хранение данных зависит как от блоков данных, так и от базы данных (таблицы inode).
Чтобы увидеть, сколько inode осталось в вашей системе, используйте команду df -i. Это важнейшая проверка для системных администраторов, управляющих большим количеством мелких файлов.
Просмотр информации об Inode
Каждый linux inode идентифицируется уникальным номером. При создании файла ему присваивается номер inode, часто последовательно. Однако вы можете заметить, что новому файлу присваивается меньший номер inode, чем старым. Это происходит потому, что номера удаленных inode могут быть повторно использованы для новых файлов. Чтобы просмотреть номера inode, выполните команду ls -li:
pete@icebox:~$ ls -li
140 drwxr-xr-x 2 pete pete 6 Jan 20 20:13 Desktop
141 drwxr-xr-x 2 pete pete 6 Jan 20 20:01 Documents
Первое поле в выводе этой команды — это номер inode. Вы также можете увидеть подробную информацию о i node файла с помощью команды stat:
pete@icebox:~$ stat ~/Desktop/
File: ‘/home/pete/Desktop/’
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: 806h/2054d Inode: 140 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ pete) Gid: ( 1000/ pete)
Access: 2016-01-20 20:13:50.647435982 -0800
Modify: 2016-01-20 20:13:06.191675843 -0800
Change: 2016-01-20 20:13:06.191675843 -0800
Birth: -
Как I-Node указывает на данные
Мы знаем, что наши данные хранятся на диске, но, вероятно, не в одном непрерывном блоке. Здесь структура inode linux становится незаменимой. Inode указывают на фактические блоки данных ваших файлов. В типичной файловой системе (хотя реализации различаются) каждый inode содержит 15 указателей. Первые 12 указателей указывают непосредственно на блоки данных. 13-й указатель указывает на блок, содержащий больше указателей. 14-й и 15-й указатели указывают на дальнейшие вложенные блоки указателей. Это может показаться запутанным, но такая структура позволяет i node сохранять фиксированный размер, при этом имея возможность ссылаться на файлы разного размера. К небольшим файлам можно быстро получить доступ с помощью прямых указателей, в то время как более крупные файлы находятся через вложенные указатели.