inode - inode

редактировать
Структура данных, описывающая объект файловой системы (например, файл, каталог), в котором хранятся атрибуты и расположение дисковых блоков данных объекта

inode (индексный узел) - это данные структура в файловой системе в стиле Unix, которая описывает объект файловой системы, такой как файл или каталог. Каждый индексный дескриптор хранит атрибуты и расположение дисковых блоков данных объекта. Атрибуты объекта файловой системы могут включать метаданные (время последнего изменения, доступа, модификации), а также владельца и разрешение данных.

Каталоги представляют собой списки имен присваивается индексным дескрипторам. Каталог содержит запись для себя, своего родителя и каждого из его дочерних элементов.

Содержание
  • 1 Этимология
  • 2 Подробности
  • 3 Описание инода POSIX
  • 4 Последствия
  • 5 Встраивание
  • 6 В системах, отличных от Unix
  • 7 См. Также
  • 8 Ссылки
  • 9 Внешние ссылки
Этимология

В списке рассылки ядра Linux была неопределенность в отношении причины появления "i" в "inode". В 2002 году вопрос был задан пионеру Unix Деннису Ричи, который ответил:

По правде говоря, я тоже не знаю. Это был просто термин, который мы начали использовать. «Индекс» - это мое лучшее предположение из-за немного необычной структуры файловой системы, в которой информация о доступе к файлам хранится в виде плоского массива на диске, а вся информация иерархического каталога находится в стороне от этого. Таким образом, i-число - это индекс в этом массиве, i-узел - это выбранный элемент массива. (Обозначение «i-» использовалось в 1-м издании руководства; его дефис постепенно опускался.)

Статья Ритчи и Кена Томпсона, опубликованная в 1978 г., подтверждает этимологическое происхождение понятия «указатель». индексных дескрипторов. Они написали:

[…] запись каталога содержит только имя связанного файла и указатель на сам файл. Этот указатель представляет собой целое число, называемое i-номером (порядковым номером) файла. При доступе к файлу его i-номер используется в качестве индекса в системной таблице (i-list), хранящейся в известной части устройства, на котором находится каталог. Найденная таким образом запись (i-узел файла) содержит описание файла.

Кроме того, Морис Дж. Бах писал, что индексный дескриптор «является сокращением термина индексный узел и обычно используется в литературе по системе UNIX».

Подробности
Файловые дескрипторы, таблица файлов и таблица inode в Unix

Файловая система полагается на структуры данных о файлах, а не на содержимое этого файла. Первые называются метаданными - данными, описывающими данные. Каждый файл связан с индексным дескриптором, который идентифицируется целым числом, часто называемым i-номером или номером индексного дескриптора.

Inodes хранят информацию о файлах и каталогах (папках), такую ​​как право собственности на файл, режим доступа (права на чтение, запись, выполнение) и тип файла. Во многих более старых реализациях файловых систем максимальное количество inodes фиксируется при создании файловой системы, ограничивая максимальное количество файлов, которое может содержать файловая система. Типичная эвристика распределения для индексных дескрипторов в файловой системе - один индексный дескриптор на каждые 2 Кбайт, содержащихся в файловой системе.

Номер индексного дескриптора индексирует таблицу индексных дескрипторов в известном месте на устройстве. По номеру inode драйвер файловой системы ядра может получить доступ к содержимому inode, включая расположение файла, тем самым разрешая доступ к файлу. Номер inode файла можно найти с помощью команды ls -i. Команда ls -iпечатает номер i-узла в первом столбце отчета.

Некоторые файловые системы в стиле Unix, такие как ReiserFS, btrfs и APFS, пропускают таблицу inode фиксированного размера, но должны хранить эквивалент данные для обеспечения эквивалентных возможностей. Данные могут называться статистическими данными со ссылкой на системный вызов stat , который предоставляет данные программам. Общие альтернативы таблице фиксированного размера включают B-деревья и производные B + деревья.

Имена файлов и последствия для каталогов:

  • Inodes не содержат своих имен жестких ссылок, только другие метаданные файла.
  • Каталоги Unix - это списки ассоциативных структур, каждая из которых содержит одно имя файла и один номер inode.
  • Драйвер файловой системы должен выполнить поиск в каталоге, ища конкретное имя файла, а затем преобразовать имя файла на правильный соответствующий номер inode.

Представление этих данных в памяти ядра операционной системы называется struct inodeв Linux. В системах, производных от BSD, используется термин vnode(«v» относится к уровню виртуальной файловой системы ядра).

Описание inode POSIX

Стандарт POSIX предписывает поведение файловой системы, на которое сильно влияют традиционные файловые системы UNIX. Inode обозначается фразой «серийный номер файла», определяемой как уникальный идентификатор файла для каждой файловой системы. Этот серийный номер файла вместе с идентификатором устройства, содержащего файл, однозначно идентифицирует файл в рамках всей системы.

В системе POSIX файл имеет следующие атрибуты, которые могут быть получены с помощью stat системный вызов:

  • ID устройства (идентифицирует устройство, содержащее файл; то есть область уникальности серийного номера).
  • серийный номер файла числа.
  • Режим файла , который определяет тип файла и то, как владелец файла, его группа и другие лица могут получить доступ к файлу.
  • A количество ссылок, указывающее, сколько жесткие ссылки указывают на индексный дескриптор.
  • ID пользователя владельца файла.
  • ID группы файла.
  • ID устройства файла, если это файл устройства.
  • Размер файла в байтах.
  • Временные метки, указывающие, когда в последний раз был изменен сам индексный дескриптор. (ctime, время изменения inode), последнее измененное содержимое файла (mtime, время модификации) и последний доступ (в ime, время доступа).
  • Предпочтительный размер блока ввода-вывода.
  • Количество блоков, выделенных для этого файла.
Последствия
  • Файлы могут иметь несколько имен. Если несколько имен жестко связывают с одним и тем же индексом, тогда имена эквивалентны; т.е. тот, кто будет создан первым, особого статуса не имеет. В этом отличие от символических ссылок, которые зависят от исходного имени, а не от индекса (номера).
  • У индекса может не быть ссылок. Несвязанный файл удаляется с диска, а его ресурсы освобождаются для перераспределения, но удаление должно ждать, пока все процессы, открывшие его, закончат доступ к нему. Сюда входят исполняемые файлы, которые неявно удерживаются открытыми исполняющими их процессами.
  • Обычно невозможно отобразить открытый файл на имя файла, которое использовалось для его открытия. Операционная система немедленно преобразует имя файла в номер inode, а затем отбрасывает имя файла. Это означает, что библиотечные функции getcwd() и getwd() выполняют поиск в родительском каталоге, чтобы найти файл с индексом, соответствующим рабочему каталогу, затем выполните поиск в родительском каталоге этого каталога и так далее, пока не достигнете корневого каталога . Системы SVR4 и Linux поддерживают дополнительную информацию, чтобы сделать это возможным.
  • Исторически было возможно жестко связывать каталоги. Это превратило структуру каталогов в произвольный ориентированный граф в отличие от ориентированного ациклического графа. Каталог даже мог быть собственным родительским. Современные системы обычно запрещают это сбивающее с толку состояние, за исключением того, что родительский элемент root по-прежнему определяется как root. Наиболее заметным исключением из этого запрета является Mac OS X (версии 10.5 и выше), который позволяет суперпользователю создавать жесткие ссылки на каталоги.
  • Номер inode файла остается неизменным. то же самое, когда он перемещается в другой каталог на том же устройстве, или когда диск дефрагментирован, что может изменить его физическое местоположение, позволяя перемещать и переименовывать его даже во время чтения и записи без прерывания. Это также означает, что полностью соответствующее поведение inode невозможно реализовать со многими файловыми системами, отличными от Unix, такими как FAT и его потомками, у которых нет способа сохранить эту инвариантность, когда обе записи каталога файла и его данные перемещаются.
  • Установка новых библиотек проста с файловыми системами inode. Запущенный процесс может получить доступ к файлу библиотеки, в то время как другой процесс заменяет этот файл, создавая новый индексный дескриптор, и для нового файла будет существовать совершенно новое сопоставление, чтобы при последующих попытках доступа к библиотеке была получена новая версия. Эта возможность устраняет необходимость перезагрузки для замены отображаемых библиотек.
  • На устройстве могут закончиться inodes. В этом случае на устройстве невозможно создать новые файлы, даже если на нем может быть свободное место. Это наиболее распространено для таких случаев, как почтовые серверы, которые содержат множество небольших файлов. Файловые системы (например, JFS или XFS ) обходят это ограничение с помощью экстентов или динамического выделения inode, что может «увеличить» файловую систему или увеличить количество inodes.
Встраивание

Может иметь смысл хранить очень маленькие файлы в самом inode, чтобы сэкономить как пространство (блок данных не требуется), так и время поиска (не требуется дальнейшего доступа к диску). Эта функция файловой системы называется встраиванием. Таким образом, при использовании современных файловых систем нельзя предполагать строгое разделение индексных дескрипторов и файловых данных.

Если данные файла умещаются в пространстве, выделенном для указателей на данные, это пространство можно удобно использовать. Например, ext2 и его преемники хранят данные символических ссылок (обычно имена файлов) таким образом, если размер данных не превышает 60 байт («быстрые символические ссылки»).

Ext4 имеет параметр файловой системы с именем inline_data, который позволяет ext4 выполнять встраивание, если оно включено во время создания файловой системы. Поскольку размер inode ограничен, это работает только для очень маленьких файлов.

В системах, отличных от Unix,
  • NTFS имеет таблицу основных файлов (MFT), в которой файлы хранятся в B-дереве. Каждая запись имеет «fileID», анологичный номеру inode, который однозначно ссылается на эту запись. Три отметки времени, идентификатор устройства, атрибуты, количество ссылок и размеры файлов находятся в записи, но, в отличие от POSIX, разрешения выражаются через другой API. Схема на диске более сложная. В более ранних файловых системах FAT такой таблицы не было, и они не могли создавать жесткие ссылки.
  • Тот же API GetFileInformationByHandle, похожий на статистику, можно использовать в ReFS, Cluster Shared Volumes и SMB 3.0, поэтому в этих системах предположительно используется аналогичная концепция идентификатора файла. ReFS имеет 128-битный идентификатор файла; это расширение также было перенесено в NTFS, которая изначально имела 64-битный идентификатор файла.
См. также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-24 03:14:25
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте