Энциклопедия системного администратора Linux

         

Что такое файловая система?


A Файловая система это методы и структуры данных, которые используются операционной системой для хранения файлов на диске или его разделе. О файловой системе также говорят, ссылаясь на раздел или диск, используемый для хранения файлов или тип файловой системы.

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

Перед тем, как раздел или диск могут быть использованы в качестве файловой системы, она должна быть инициализирована, а требуемые данные перенесены на этот диск. Этот процесс называется созданием файловой системы..

У большей части файловых систем UNIX сходная структура, а их некоторые особенности очень мало различаются. Основными понятиями являются: суперблок (superblock), индексный дескриптор (inode), блок данных (data block), блок каталога (directory block) и косвенный блок (indirection block). В суперблоке содержится информация о файловой системе в целом, например, ее размер (точная информация зависит от типа файловой системы). В индексном дескрипторе хранится вся информация о файле, кроме его имени. Имя файла хранится в блоке каталога, вместе с номером дескриптора. Запись каталога содержит имя файла и номер индексного дескриптора соответствующего файла. В этом дескрипторе хранятся номера нескольких блоков данных, которые используются для хранения самого файла. В inode есть место только для нескольких номеров блоков данных, однако, если требуется большее количество, то пространство для указателей на блоки данных динамически выделяется. Такие блоки называются косвенными. Для того, чтобы найти блок данных, нужно сначала найти его номер в косвенном блоке. Как видите, в устройстве файловой ext2, типичной для Linux нет ничего сложного.

В файловых системах UNIX обычно имеется возможность создания дыр (hole)в файлах (это можно сделать с помощью команды lseek, см. man-руководство). Это означает, что файловая система предоставляет ложную информацию о том, что в каком-то месте в файле содержатся нулевые байты, но в действительности для этого не выделяются сектора (это означает, что файл будет занимать несколько меньше места на диске). Это часто используется особенно в небольших двоичных программах, библиотеках Linux, в некоторых базах данных и в других отдельных случаях. Дыры реализуются хранением специального значения в косвенном блоке или индексном дескрипторе вместо адреса блока данных. Это специальное значение показывает, что для данной части файла блоки данных не размещены и, следовательно, что в файле есть дыра. Таким образом, довольно примитивное сжатие данных в Linux реализовано непосредственно на уровне файловой системы.

Использование дыр неожиданно эффективно. На компьютере с общим дисковым пространством в 200 Мб, простые измерения показывают, что применение дыр дает экономию в 4 Мб. Однако, эти измерения проводились на системе, где было установлено относительно мало программ и отсутствовали файлы баз данных. Метод измерения дыр рассмотрен в приложении B.



Содержание раздела