Физическое устройство файловой системы

В Linux можно использовать большое количество файловых систем, но все они имеют общий принцип построения.

У каждого файла в файловой системе есть так называемый inode — описатель файла. В inode хранится информация о файле.

В переделах одной физической файловой системы (Помните? В Linux есть одна файловая система, которая состоит из различных физических файловых систем. В данном случае имеется в виду именно физическая файловая система.) каждый inode имеет свой уникальный номер. Таким образом, каждый файл имеет уникальный номер.

В inode хранится информация о:

  • Правах доступа. Права представлены в виде набора бит.
  • Уникальный номер пользователя (UID), которому принадлежит этот файл. Обратите внимание на то, что в inode хранится номер, а не имя пользователя.
  • Уникальный номер группы (GID), которой принадлежит данный файл. Точно так же как и с хозяином файла, в inode хранится номер, а не имя группы.
  • Временные метки:
    • Время последней модификации файла (modification time).
    • Время последнего доступа к файлу (access time). Если Вы прочитали содержимое файла, даже не изменяя его — это поле будет изменено.
    • Время последнего изменения информации в inode файла (change time). Это поле изменяет свое значение когда изменяется информация в inode. Например, при изменении прав доступа.
  • Ссылки на блоки, в которых расположены данные. Данные не хранятся в inode, а располагаются в отдельных блоках на диске. Чем больше максимальный размер дискового пространства, отводимого под inode — тем больше возможное количество ссылок на блоки — тем больше максимальный размер файла.

В inode могут храниться другие атрибуты файла. Какие атрибуты будут использованы — зависит от типа файловой системы.

Современные файловые системы имеют усовершенствованную структуру. Например, ссылки на блоки могут храниться не только в inode но и в самом блоке. То есть получается ссылка на блок ссылок.

В одном блоке может храниться информация, принадлежащая нескольким файлам.

Если информация, хранящаяся в файле, может поместиться в inode, для нее не выделяют отдельный блок и ее размещают непосредственно в inode.

Как будет храниться информация, зависит от типа файловой системы. Подробно о поддерживаемых типах файловых систем будет рассказано в главе «Работа с накопителями».

Если посмотреть внимательно на информацию, содержащуюся в inode, там нет имени файла. Дело в том, что имена файлов хранятся в директории.

Директория, как и любой файл в Linux, тоже имеет описатель файла — inode. Там хранится такая же информация как и в случае обыкновенных файлов: номер файла, права доступа, хозяин файла, группа, временные метки и т.д. Данные, которые хранятся в файле типа директория — это таблица, связывающая между собой имя файла и inode. То есть физически файл — это набор данных, а директория связывает имя данных и сами данные.

Имя файла — это ссылка на файл. Вспомните, что выводила программа ls –l, а точнее второе поле — количество ссылок на файл. Получается, что на одни данные может быть несколько ссылок — несколько имен, и это действительно возможно. Такая ссылка называется жесткой (hard link).

Физически файл (данные) существует до тех пор, пока на этот файл существует хотя бы одна ссылка (Это утверждение не относится к символьным ссылкам. О символьных ссылках будет рассказано ниже.). То есть пока существует хотя бы одно имя файла — данные существуют.