Ваша система коли-небудь скаржилася на те, що у вас не залишилося вільного місця, коли його було явно більш ніж достатньо?
Іноди та метадані
Файлова система зберігає файли, які знаходяться у каталогах, які, в свою чергу, можуть мати підкаталоги. При цьому щось десь повинно записувати інформацію про розташування всіх файлів файлової системи, імена файлів, їх розмір, до яких облікових записів вони належать, які у них дозволи тощо. Ця інформація називається метаданими — дані, які описують інші дані. Метадані зберігаються в іноді файлу.
Інод (або “індексний дескриптор”, “inode”, від англ. “index node“) — це структура даних, в якій зберігаються метадані про стандартні файли, каталоги або інші об’єкти файлової системи. Кожен використовуваний інод посилається на 1 файл. Кожен файл має 1 інод. Каталоги, символьні та блокові пристрої — все це є файлами, а отже, у кожного з них є по 1 іноду.
Інформація про інод зберігається в спеціальній таблиці, розташованій, зазвичай, на початку кожного розділу диска. Кожен розділ має власну, окрему таблицю інодів.
Для кожного файлу в каталозі є запис, який містить ім’я файлу та пов’язаний з ним номер інода. Решта інформації про файл витягується з таблиці інодів за допомогою номера інода файлу.
Іноди унікальні лише в межах розділів своїх файлових систем. Якщо у вас є два файли, які знаходяться на різних розділах диска, вони можуть мати однакові номери інодів.
Якщо у вас закінчаться іноди, ви більше не зможете створювати нові файли, навіть якщо у вас залишилося місце в розділі диска.
Як отримати інформацію про іноди в Linux?
Ви можете легко вивести список номерів інодів за допомогою наступної команди:
ls –li /
На наступному скріншоті показано мій кореневий каталог з відповідними номерами інодів:

Кількість інодів у кожній файловій системі задається на етапі її створення, і, як правило, для більшості користувачів їх кількості більш ніж достатньо.
За замовчуванням параметри файлової системи такі, що створюється 1 інод на 2 КБ простору диска. Такої кількості інодів достатньо більшості систем. Швидше місце на вашому жорсткому диску вичерпається, ніж закінчаться всі іноди. При необхідності, під час визначення початкових параметрів файлової системи, можна вказати, скільки інодів потрібно створити.
Якщо у вас все-таки закінчаться іноди, то ні ви, ні ваша система більше не зможете створювати нові файли. Це трапляється досить рідко, але все ж таки трапляється. Наприклад, раніше деякі поштові сервери, які зберігали повідомлення електронної пошти у вигляді окремих файлів (що швидко призводило до створення великих колекцій маленьких файлів розміром менше 2 кілобайт), часто стикалися з цією проблемою. Однак коли вони перейшли на використання баз даних, проблема вирішилася.
У деяких файлових системах, таких як Btrfs, JFS, XFS, реалізовані динамічні іноди. За необхідності такі файлові системи можуть збільшити кількість доступних інодів.
Як працює інод?
При створенні нового файлу йому призначається номер інода та ім’я. Номер інода — це унікальний номер файлу у файловій системі. І ім’я, і номер інода зберігаються у вигляді записів в каталозі.
Коли я запустив команду ls –li /, я відобразив імена файлів кореневого каталогу та номери їх інодів. Решта інформації про власника файлу, приналежність до групи, дозволи на доступ, розмір і т.д. була отримана з таблиці інодів за допомогою номера іноду.
Ви можете перерахувати інформацію про іноди для кожної файлової системи за допомогою наступної команди:
df -hi
Іноди та посилання
Символьні посилання є досить відомою особливістю Linux. Але що відбувається з інодами, коли ми створюємо символьне посилання? На наступному скріншоті у нас є файл з ім’ям file1, каталог під назвою dir1, всередині якого розташувалося символьне посилання під назвою slink1, яке вказує на ../file1:

Тепер порівняємо їх номери інодів:
ls -liR

Як і очікувалося, dir1 та file1 мають різні номери інодів. Але те ж саме стосується і символьного посилання. Коли ви визначаєте символьне посилання, то тим самим створюєте новий файл. У своїх метаданих він вказує на цільовий об’єкт. Для кожного створюваного вами символьного посилання ви використовуєте новий інод.
Тепер давайте створимо жорстке посилання і подивимося, що станеться з інодами:
ln ../file1 hlink1
Виводимо список номерів інодів:

Ви можете бачити, що file1 та hlink1 мають однаковий номер інода. Жорстке посилання не створює новий файл, воно лише надає нове ім’я для тих же даних. Таке можливе завдяки використанню механізму інодів.
Примітка: У старіших версіях Linux можна було створити жорстке посилання на каталог. Було навіть можливо зробити так, щоб каталог став батьківським самому собі. Але тепер встановлені деякі обмеження, щоб користувачі не створювали дуже заплутану структуру каталогів.
Користь від інодів
Принцип роботи інодів також пояснює, чому неможливо створити жорстке посилання з однієї файлової системи до іншої. Виконання подібних завдань призвело би до створення конфліктуючих номерів інодів. У той же час, символьне посилання може бути створене у різних файлових системах.
Оскільки жорстке посилання має той же номер інода, що і вихідний файл, ви можете видалити вихідний файл, а дані, як і раніше, будуть доступні за жорстким посиланням. Все, що ви зробите в даному випадку, це видалите одне з імен, що вказують на заданий номер інода. Дані, пов’язані з цим інодом, залишатимуться доступними доти, доки всі імена, пов’язані з ним, не будуть видалені.
Іноди також є важливою причиною, через яку Linux-системи можуть оновлюватися без необхідності перезавантаження: один процес може використовувати бібліотечний файл, тоді як інший процес замінює поточний файл новою версією. Вже запущений процес продовжуватиме використовувати старий файл, у той час як кожен новий виклик до нього призведе до використання нової версії.
Ще одна цікава функція інодів — це можливість зберігати дані в самому іноді. Це називається вбудовуванням (англ. “inlining”). Цей метод зберігання має перевагу — економія місця, оскільки не вимагає використання блоків даних, але при цьому також збільшує час пошуку, уникаючи додаткового доступу до диска для отримання даних.
У деяких файлових системах, таких як ext4, є опція під назвою inline_data, яка дозволяє операційній системі зберігати дані вищеописаним способом. Із-за обмеження розміру вбудовування працює тільки для дуже маленьких файлів.
Висновки
Іноди — це не те, з чим ви взаємодієте напряму, але вони відіграють важливу роль у роботі операційної системи. Якщо розділ повинен містити дуже багато маленьких файлів, то розуміння того, що таке іноди і як вони працюють, може позбавити вас від багатьох проблем у майбутньому.


(6 оцінок, середня: 4,83 з 5)