Inode (Индексный Дескриптор)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:55, 24 августа 2017.

inode (произносится а́йнод или ино́д), индексный дескриптор — это структура данных в традиционных для ОС UNIX файловых системах (ФС), таких как UFS. В этой структуре хранится метаинформация о стандартных файлах, каталогах или других объектах файловой системы, кроме непосредственно данных и имени. Каждый файл ассоциирован с одним inode, хотя может иметь несколько имен в системе, каждое из которых указывает на один и тот же inode[1].

Inode.png

Суть inode

Индексный дескриптор содержит информацию о расположении данных файла. Поскольку дисковые блоки хранения данных файла в бщем случае располагаются не последовательно, inode, должен хранить физические адреса всех блоков, принадлежащих данному файлу. В индексном дескрипторе эта информация хранится в виде массива, каждый элемент которого содержит физический адрес дискового блока, а индексом массива является номер логического блока файла. Массив имеет фиксированный размер и состоит из 13 элементов. При этом первые 10 элементов адресуют непосредственно блоки хранения данных файла. Одиннадцатый элемент адресует блок, в свою очередь содержащий адреса блоков хранения данных файла. Двенадцатый элемент указывает на дисковый блок, также хранящий адреса блоков, каждый из который адресует блок хранения данных файла. И, наконец, тринадцатый элемент используется для тройной косвенной адресации, когда для нахождения адреса блока хранения данных файлаиспользуются три дополнительных блока. Такой подход позволяет при относительно небольшом фиксированном размере индексного дескриптора поддерживать работу с файлами, размер которых может изменяться от нескольких байтов до десятка мегабайтов. Для относительно небольших файлов (до 10 Кбайт при размере блока 1024 байтов) используется прямая индексация, обеспечивающая максимальную производительность. Для файлов, размер которых не превышает 266 кбайт (10 кбайт + 256х1024), достаточно простой косвенной адресации. Наконец, при использовании тройной косвенной адресации можно обеспечить доступ к 16777216 блокам (256х256х256)[2].

Описание индексного дескриптора в POSIX

Стандарты POSIX описывают поведение файловой системы как потомка традиционных файловых систем UNIX — UFS. Регулярные файлы должны иметь следующие атрибуты:

  • длина файла в байтах;
  • идентификатор (ID) устройства (это идентифицирует устройство, содержащее файл);
  • ID пользователя, являющегося владельцем файла;
  • ID группы файла;
  • режим файла, определяющий какие пользователи могут считывать, записывать и запускать файл;
  • Timestamp указывает дату последнего изменения инода (ctime, change time), последней модификации содержимого файла (mtime, modification time), и последнего доступа (atime, access time);
  • счетчик ссылок указывают количество жестких ссылок, указывающих на индексный дескриптор;
  • указатели на блоки диска, хранящие содержимое файла (подробнее...).
  • Системный вызов stat считывает номер индексного дескриптора файла и некоторую информацию из него.

Индексный дескриптор не содержит:

  • имени файла, которое содержится в блоках хранения данных каталога;
  • содержимого файла, которое размещено в блоках хранения данных.

Практическое применение

Множество программ, используемых системными администраторами в операционной системе (ОС) UNIX, часто используют номера индексных дескрипторов для обозначения файлов. Популярная встроенная программа проверки жестких дисков fsck или команда pfiles могут послужить в данном случае примерами, так как у них есть необходимость естественным образом конвертировать номера индексных дескрипторов в пути файлов и обратно. Это может быть дополнено использованием программы поиска файлов find с ключом -inum или командой ls с соответствующим ключом (которым на большинстве платформ является -i). Иноды могут 'закончиться'. В этом случае нельзя записать информацию на устройство, даже если там достаточно свободного места.

Структура дискового inode

di_mode Тип файла, дополнительные атрибуты выполнения и права доступа
di_nlinks Число ссылок на файл, т. е. количество имен, которые имеет файл в файловой системе
di_uid, di_gid Идентификаторы владельца-пользователя и владельца-группы.
di_size Размер файла в байтах. Для специальных файлов это поле содержит старший и младший номер устройства.
di_atime Время последнего доступа к файлу.
di_mtime Время последней модификации.
di_ctime Время последней модификации inode (кроме модификации полей di_atime, di_mtime).
di_addr[13] Массив адресов дисковых блоков хранения данных.

Поле di_mode хранит несколько атрибутов файла: тип файла (IFREG - для обычных файлов, IFDIR - для каталогов, IFBLK или IFCHR для специальных файлов блочных и символьных устройств соответственно); права доступа к файлу для трех классов пользователей и дополнительные атрибуты выполнения (SUID, SGID и sticky bit). Заметим, что в индексном дескрипторе отсутствует информация о времени создания файла. Вместо этого inode хранит три значения времени: последнего доступа (di_atime), время последней модификации содержимого файла (di_mtime) и время последней модификации метаданных файла (di_ctime). В последнем случае не учитываются модификации полей di_atime и di_mtinie. Таким образом, di_ctime изменяется, когда изменяется размер файла, владелец, группа или число связей.

Примечание

  1. Inode [Электронный ресурс] : Материал из Википедии — свободной энциклопедии: — Режим доступа: https://ru.wikipedia.org/wiki/Inode
  2. Индексные дескрипторы [Электронный ресурс] : Материал из http://studopedia.ru/: — Режим доступа: http://studopedia.ru/9_88230_indeksnie-deskriptori.html
  • Робачевский А. Н., Немнюгин С. А., Стесик О. Л. Индексные дескрипторы / Базовая файловая система System V / Глава 4. Файловая система // Операционная система UNIX. — 2-е изд. — СПб.: БХВ-Петербург, 2008. — С. 334-. — 656 с.