inode
Винформатикеinode(произноситсяа́йнодили инод),индексный дескриптор— этоструктура данныхв традиционных для ОСUNIXфайловых системах(ФС), таких какUFS,ext4.В этой структуре хранитсяметаинформацияо стандартныхфайлах,каталогахили других объектах файловой системы, кроме непосредственно данных и имени.
Подробности
[править|править код]При создании файловой системы создаются также и структуры данных, содержащие информацию о файлах. Каждый файл имеет свой индексный дескриптор, идентифицируемый по уникальному номеру (часто называемому "i-номером" или "айнодом" ), в файловой системе, в которой располагается сам файл.
Индексные дескрипторы хранят информацию о файлах, такую, как принадлежность владельцу (пользователю и группе), режим доступа (чтение, запись, запуск на выполнение) и тип файла. Существует определённое число индексных дескрипторов, которое указывает максимальное количество файлов, допускаемое определённой файловой системой. Обычно при создании файловой системы примерно 1 % её объёма выделяется под индексные дескрипторы.
Термининдексный дескрипторобычно указывает на айнодыблочных устройств,управляющие постоянными файлами, каталогами и, по возможности,символьными ссылками.Подобная концепция играет важную роль при восстановлении повреждённых файловых систем.
- Номер индексного дескриптора заносится в таблицу индексных дескрипторов в определённом месте устройства; по номеру индексного дескриптора ядро системы может считать содержимое айнода, включая указатели данных и прочий контекст файла.
- Номер индексного дескриптора файла можно посмотреть используя командуls-i,а командаls -lпокажет информацию, хранящуюся в индексном дескрипторе.
- Файловые системы, не относящиеся к традиционным ФС UNIX, такие какReiserFS,могут обходиться без таблицы индексных дескрипторов, но должны хранить аналогичную информацию схожим способом, обеспечивающим эквивалентную функциональность. Такие данные могут называтьсястатистической информацией,по аналогии со
stat
—системным вызовом,поставляющим информацию программам.
Имена файлов и содержимое каталогов:
- индексные дескрипторы не хранят имена файлов, только информацию об их содержимом;
- каталоги в Unix являются списками 'ссылочных' структур, каждая из которых содержит одно имя файла и один номер индексного дескриптора;
- ядро должно просматривать каталог в поисках имени файла, затем конвертировать это имя в соответствующий номер индексного дескриптора, в случае успеха;
- содержимое файлов располагается вблоках данных,на которые ссылаются индексные дескрипторы.
Представление ядром этих данных в памяти называетсяstruct inode
(структурным айнодом) (в ОСLinux). ВBSDсистемах используется терминvnode
,букваvв котором указывает навиртуальную файловую системууровня ядра.
Описание индексного дескриптора в POSIX
[править|править код]СтандартыPOSIXописывают поведение файловой системы как потомка традиционных файловых систем UNIX — UFS. Регулярные файлы должны иметь следующие атрибуты:
- длина файла вбайтах;
- идентификатор (ID) устройства(это идентифицирует устройство, содержащее файл);
- ID пользователя,являющегося владельцем файла;
- ID группыфайла;
- режимфайла,определяющий какие пользователи могут считывать, записывать и запускать файл;
- Timestampуказывает дату последнего изменения айнода (ctime,change time), последней модификации содержимого файла (mtime,modification time), и последнего доступа (atime,access time);
- счётчик ссылокуказывает количествожестких ссылок,указывающих на индексный дескриптор;
- указатели на блоки диска, хранящие содержимое файла (подробнее…).
Системный вызовstat
считывает номер индексного дескриптора файла и некоторую информацию из него.
Этимологияinode
[править|править код]Что в названии «и-нод» обозначает «и» — неизвестно. В ответ на вопрос об этом один из создателей UnixДеннис Ритчиответил:
Честно говоря, я тоже не знаю. Это был всего лишь термин, который мы начали использовать. Из-за немного необычной структуры файловой системы, при которой информация о доступе к файлам хранится в виде плоского массива на диске, отдельно от всей информации об иерархии каталогов, лучшее, что я могу предположить (для «и») — это «индекс». Таким образом, и-номер являлся индексом в этом массиве, и-нод — выбираемым элементом массива. (Приставка «и-» использовалась в первой версии руководства; со временем дефис перестали употреблять).
Оригинальный текст(англ.)In truth, I don't know either. It was just a term that we started to use. "Index" is my best guess, because of the slightly unusual file system structure that stored the access information of files as a flat array on the disk, with all the hierarchical directory information living aside from this. Thus the the i-number is an index in this array, the i-node is the selected elementof the array. (The "i-" notation was used in the 1st edition manual; its hyphen became gradually dropped).
—What does the "i" in inode stand for? Dennis Ritchie doesn't know either. Дата обращения: 3 августа 2010. Архивировано изоригинала23 августа 2011 года.
То естьindex node(индексный узел, элемент) →index-node→i-node→inode— постепенное укорочение и слияние словосочетанияindex node.По другим версиям, начальная букваiвi-node может происходить, в том числе, от слов information (информация), incore, indirection.
Значение
[править|править код]Файловые системы, использующие индексные дескрипторы, имеют несколько неочевидных особенностей:
- Если несколько имен указывают на один и тот же индексный дескриптор (жёсткие ссылки), то все имена считаются эквивалентными. Первое созданное имя никаким особым положением не обладает. Это отличается от поведения похожихсимвольных ссылок,которые зависят от первоначального имени.
- Индексный дескриптор может совсем не иметь ссылок. Обычно такой файл должен быть удален с диска (именно поэтому программы типаundeleteвUnixне позволяют установить точное имя удалённого файла), а его ресурсы должны освободиться (это нормальный процесс удаления файла), но если какие-либо процессы ещё не закрыли файл, то они могут удерживать доступ к нему, а файл будет окончательно удален только после того, как будет закрыто последнее обращение к нему. Это относится и к исполняемым копиям, которые удерживаются открытымипроцессами,их выполняющими. По этой причине при обновлении программы рекомендуется удалять старую копию и создавать новый индексный дескриптор для обновлённой версии, чтобы никакие экземпляры старой версии не продолжали выполняться.
- Обычно нет возможности сопоставить открытый файл иего имя,по которому он был открыт. Операционная система преобразует имя файла в номер индексного дескриптора при первом же удобном случае, а затем «забывает» про использованное имя файла. Таким образом, функции библиотекgetcwd()иgetwd()начинают искать вродительском каталогефайл с индексным дескриптором, совпадающим с файлом«.» каталога;затем ищут родительский каталог для текущего, и так далее пока не достигнут«/» каталога.SVR4иLinuxиспользуют дополнительную информацию (поля) в индексных дескрипторах для избежания подобного неудобства.
- Ранее было возможно применять жёсткие ссылки на каталоги. Это делало структуру каталогов ориентированнымграфомвместодерева(то естьсвязного графас N-1 ребрами и N узлами). Например, каталог имел возможность быть собственным родителем. Современные файловые системы не допускают подобных двусмысленностей, за исключением корневого каталога, который считается собственным родителем.
- Номер индексного дескриптора файла остается неизменным при перемещении файла в другой каталог на том же устройстве или придефрагментациидиска. Поэтому перемещения или каталога, содержащего файл, или его содержимого (или и того и другого вместе) недостаточно для предотвращения доступа к нему из уже запущенного процесса, если у процесса есть возможность вычислить номер индексного дескриптора. Это также обусловливает то, что полностью управляемое поведение индексных дескрипторов невозможно реализовать на множестве файловых систем, не произошедших от стандартной файловой системы UNIX, таких какFATи его преемников, которые не имеют возможности хранить подобную постоянную 'неизменность', когда каталог файла и его содержимое перемещается.
Практическое применение
[править|править код]Множествопрограмм,используемыхсистемными администраторамивоперационной системе(ОС) UNIX, часто использует номера индексных дескрипторов для обозначения файлов. Популярная встроенная программа проверкижестких дисковfsck
или командаpfiles
могут послужить в данном случае примерами, так как у них есть необходимость естественным образом конвертировать номера индексных дескрипторов впутифайлови обратно. Это может быть дополнено использованием программы поиска файловfind
с ключом-inum
или командойls
с соответствующим ключом (которым на большинстве платформ является-i
).
Динамическое выделение inode
[править|править код]Одна из проблем — inode могут «закончиться». В этом случае нельзя будет создать новый файл или каталог на устройстве, даже если там достаточно свободного места. При этом уже имеющиеся файлы можно полноценно изменять.
Таким образом файловые системы можно разделить на две группы
- Статическое количество inode: ext2-ext4…
- Динамическое количество inode: jfs, xfs, btrfs, zfs…
ПроблемаY2038
[править|править код]Некоторые файловые системы, основанные на индексных дескрипторах, защищены от проблемы Y2038 (известной какUnix time) с учётом предотвращения «переполнения» даты, но далеко не все. При настройке сервера отказ от использования подобныхPOSIX-несовместимых файловых систем становится более важным. Последняя версия POSIX поддерживает системное время и вызовы даты, устойчивые кпроблеме Y2038.
См. также
[править|править код]Литература
[править|править код]- 7. Inodes and Operations(англ.)(ноябрь 1999). — Уровень виртуальной файловой системы Linux: Иноды и Действия — Иноды вLinux.Дата обращения: 3 августа 2010. Архивировано изоригинала7 февраля 2008 года.
- Робачевский А. Н., Немнюгин С. А., Стесик О. Л.Индексные дескрипторы / Базовая файловая система System V / Глава 4. Файловая система// Операционная система UNIX. — 2-е изд. —СПб.:БХВ-Петербург, 2008. — С. 334-. — 656 с. —ISBN 978-5-94157-538-1.