подробиці
При створенні файлової системи створюються також і структури даних, що містять інформацію про файлах. Кожен файл має свій инод, ідентифікований за номером инода (часто званий 'i-номером' або 'инодом'), в файлової системі, в якій розташовується сам файл.
Иноді зберігають інформацію про файлах, таку як приналежність власнику (користувачу і групі), режим доступу (читання, запис, запуск на виконання) і тип файлу. Існує певна кількість иноді, яке вказує максимальну кількість файлів, що допускається певної файлової системою. Зазвичай, при створенні файлової системи приблизно 1% її виділяється під инодом.
- Номер инода заноситься в таблицю иноді в певному місці пристрою; за номером инода ядро системи може вважати вміст инода, включаючи покажчики даних та інший контент файлу.
- Номер инода файлу можна подивитися використовуючи команду ls -i. а команда ls -l покаже інформацію, що зберігається в инодом.
- Файлові системи, що не належать до традиційних ФС UNIX, такі як stat - системним викликом. який поставляє інформацію програмами.
Імена файлів і вміст каталогів
- Иноді не зберігають імена файлів, тільки інформацію про їх вміст.
- Каталоги в Unix є списками 'довідкових' структур, кожна з яких містить одне ім'я файлу і один номер инода.
- Ядро має переглядати каталог в пошуках імені файлу, потім конвертувати це ім'я в відповідний номер инода, в разі успіху.
Подання ядром цих даних в пам'яті називається struct inode (структурним инодом) (в ОС BSD система використовує терм vnode. Буква v в якому вказує на віртуальну файлову систему рівня ядра.
Опис инода в POSIX
Стандарти Unix. Постійні файли повинні мати такі атрибути:
- Довжина файлу в байтах.
- ID пристрої (це ідентифікує пристрій, що містить файл).
- ID користувача. що є власником файлу.
- ID групи файлу.
- Режим файлу, який визначає які користувачі можуть зчитувати, записувати і запускати файл.
- ctime. change time), останньої модифікації вмісту файлу (mtime. modification time), і останнього доступу (atime. access time).
- Лічильник посилань вказують кількість жорстких посилань. вказують на инод.
- Покажчики на блоки диска, що зберігають вміст файлу (дивись структура покажчика в иноді).
Системний виклик stat зчитує номер инода файлу і деяку інформацію з инода.
походження слова
Точна причина використання "і" в вузлах (нодах) невідома. У відповідь на питання про це один з піонерів Unix-систем Денніс Рітчі відповів:
Чесно кажучи, я мало про це знаю. Це був всього лише термін, який ми почали використовувати. 'Індекс', як я вважаю, використовувався через кілька незвичайної структури файлової системи, що зберігала інформацію про доступ до файлів в плоскому (двовимірному) масиві на диску, а вся інформація про ієрархію каталогів зберігалася окремо. Таким чином, і-номер був індексом в цьому масиві, і-нод - обраним елементом масиву. (Приставка 'и-' використовувалася в першій версії керівництва; згодом дефіс перестали вживати).
Тобто index node (індексний вузол, елемент) → index-node → inode → inode - поступове укорочення і злиття словосполучення index node. За іншою версією, початкова буква i в i -node походить від слова information (інформація).
Особливості файлової системи, які призводять до використання иноді, бентежать багатьох користувачів, не знайомих з цією концепцією:
- Якщо кілька імен вказують на один і той же инод (жорсткі посилання), то всі імена вважаються еквівалентними. Перше створене ім'я ніяким особливим становищем не володіє. Це відрізняється від поведінки схожих символьних посилань. які залежать від початкового імені.
- Инод може зовсім не мати посилань. Зазвичай такий файл повинен бути вилучений з диска (саме тому програми типу undelete в Unix не дозволяють встановити точне ім'я віддаленого файлу), а його ресурси повинні звільнитися (це нормальний процес видалення файлу), але якщо будь-які процеси тримають файл відкритим, то вони можуть утримувати доступ до нього, а файл буде остаточно видалено тільки коли буде закрито останнє звернення до нього. Це відноситься і до виконуваним копіям, які утримуються відкритими процесами, їх виконують. З цієї причини, при оновленні програми рекомендується видаляти стару копію і створювати новий инод для оновленої версії, щоб ніякі екземпляри старої версії не продовжували виконуватися.
- Зазвичай немає можливості зіставити відкритий файл і ім'я, по якому він був відкритий. Операційна система перетворює ім'я файлу в номер инода при першому ж зручному випадку, а потім "забуває" про ім'я файлу. Таким чином, функції бібліотек getwd () починають шукати в батьківському каталозі файл з инодом, що збігається з файлом "." Каталогу. потім шукають батьківський каталог для поточного, і так далі поки не досягнуть "/" каталогу. SVR4 і
- Раніше було можливо застосовувати жорсткі посилання на каталоги. Це робило структуру каталогів орієнтованим графом замість дерева. тобто зв'язкового графа з N-1 ребрами і N вузлами. Наприклад, каталог мав можливість бути власним батьком. Сучасні системи не допускають подібних двозначностей, за винятком кореневого каталогу, який вважається власним батьком.
- Номер инода файлу залишається незмінним при переміщенні файлу в інший каталог на тому самому пристрої або при дефрагментації диска. Тому, переміщення або каталогу, що містить файл, або його вмісту (або і того і іншого разом) недостатньо для запобігання доступу до нього запущеного процесу, якщо у процесу є можливість обчислити номер инода. Це також обумовлює те, що повністю кероване поведінку иноді неможливо реалізувати на безліч не-Юніксових файлових систем, таких як FAT і його наступники, які не мають можливості зберігати подібну постійну 'незмінність', коли каталог файлу і його вміст переміщається.
Практичне застосування
Безліч програм. використовуваних системними адміністраторами в операційній системі жорстких дисків pfiles можуть послужити в даному випадку прикладами, так як у них є необхідність природним чином конвертувати номера иноді в дорозі файлів і назад. Це може бути доповнено використанням програми пошуку файлів -inum або командою -i).
Иноді можуть 'закінчитися'. У цьому випадку не можна записати інформацію на пристрій, навіть якщо там досить вільного місця.
проблема Y2038
Деякі файлові системи, основані на иноді, захищені від проблеми Y2038 (відомої як Unix time) з урахуванням запобігання 'переповнення' дати, але, на жаль, далеко не всі такі файлові системи захищені від подібних проблем. Під час налаштування сервера відмова від використання подібних