2.6Организация хранения файлов Все файлы системы, сотни тысяч и даже миллионы файлов размещаются на одном или нескольких файловых носителях (обычно на жестких дисках).
Файловая система с точки зрения пользователя - это "пространство", в котором размещаются файлы. Наличие файловой системы позволяет определить не только "как называется файл", но и "где он находится". Различать файлы только по имени было бы нецелесообразно. Необходим механизм, позволяющий работать с группами тематически связанных между собой файлов. Иначе говоря, файлы нужно систематизировать.
Классическая файловая система имеет иерархическую структуру, в которой файл однозначно определяется полным путем к нему.
Обычно используют в качестве основного организационного принципа каталоги. Каталог - это список ссылок на файлы или другие каталоги. Принято говорить, что каталог содержит файлы или другие каталоги, хотя в действительности он только ссылается на них, размещение данных на диске не связано с размещением каталога. Каталог, на который есть ссылка в данном каталоге, называется подкаталогом или вложенным каталогом. Каталог в файловой системе более всего напоминает библиотечный каталог, содержащий ссылки на объединенные по каким-то признакам книги и другие разделы каталога (файлы и подкаталоги). Ссылка на один и тот же файл может содержаться в нескольких каталогах одновременно - это делает доступ к файлу более удобным. В файловой системe Ext2 каждый каталог - это отдельный файл особого типа ("d", от англ. "directory"), отличающийся от обычного файла с данными: в нем могут содержаться только ссылки на другие файлы и каталоги.
В файловой системе Linux нет папок и документов. Есть каталоги и файлы, возможности которых куда шире.
C термином "папка" плохо согласуется то, что ссылка на файл может присутствовать одновременно в нескольких каталогах, файл может быть ссылкой на другой файл и т. д. Использование терминов «папка» и «документ» искажает представление о возможностях файловой системы и их использование неуместно и вредно.
В Unix нет понятия имени диска, это ограничивало бы масштабирование системы. Корневой каталог (в UNIX он называется просто /), в котором лежат все остальные доступные системе файловые ресурсы. В корневом каталоге могут храниться файлы (скорее всего - системные) и подкаталоги. В подкаталогах тоже могут лежать файлы и подкаталоги, и так все глубже до потери осмысленности (современные файловые системы не устанавливают максимальной глубины вложенности каталогов). Если требуется дать точный адрес какого-нибудь файла в этой файловой системе, описывается так называемое полное имя файла (или полный путь, absolute pathname): цепочка имен вложенных каталогов (в UNIX они разделяются символом "/"), которая начинается с "/" - "от корня" - и завершается именем файла (например, /usr/bin/vi). Получившаяся древовидная структура настолько привычна, что трудно представить себе какую-то иную организацию хранилища данных. А ведь когда-то она была, и уже довольно давно существуют разработки, в которых поиск файла происходит на основе не одного только пути, а целого набора атрибутов, как в базах данных.
В файловой системе UNIX можно хранить не только файлы и каталоги, но и объекты других типов, но мы вместо корректного словосочетания "имя ресурса файловой системы" будем употреблять компактное "имя файла", разумея под этим имя не только файла, но и всего, что при помощи файловой системы может быть поименовано.
2.6.1Что такое файловая система? A Файловая система это методы и структуры данных, которые используются операционной системой для хранения файлов на диске или его разделе. О файловой системе также говорят, ссылаясь на раздел или диск, используемый для хранения файлов или тип файловой системы.
Нужно видеть разницу между диском или разделом и установленной на нем файловой системой. Некоторые программы (например, программы установки файловой системы) при обращении к диску или разделу используют прямой доступ к секторам. Если на этом месте была файловая система, то она будет серьезно повреждена. Большинство программ взаимодействуют с диском посредством файловой системы, и, следовательно, их работа будет нарушена, если на разделе или диске никакая система не установлена (или тип файловой системы не соответствует требуемому).
Перед тем, как раздел или диск могут быть использованы в качестве файловой системы, она должна быть инициализирована, а требуемые данные перенесены на этот диск. Этот процесс называется созданием файловой системы..
У большей части файловых систем UNIX® сходная структура, а их некоторые особенности очень мало различаются. Основными понятиями являются: суперблок (superblock), индексный дескриптор (inode), блок данных (data block), блок каталога (directory block) и косвенный блок (indirection block). Рассмотрим логическую структуру файловой системы ext2fs.
Физически жесткий диск разбит на сектора размером 512 байт. Первый сектор дискового раздела в любой файловой системе считается загрузочной областью. В первичном разделе эта область содержит загрузочную запись — фрагмент кода, который инициирует процесс загрузки операционной системы при запуске. На других разделах эта область не используется. Остальные сектора объединены в логические блоки размером 1, 2 или 4 килобайта. Логический блок есть наименьшая адресуемая порция данных: данные каждого
файла занимают целое число блоков. Блоки, в свою очередь, объединяются в группы блоков. Группы блоков и блоки внутри группы нумеруются последовательно, начиная с 1.
Структуры данных, применяемые при работе с файловой системой ext2fs, описаны в заголовочном файле /usr/include/linux/ext2_fs.h.
Суперблок служит начальной точкой файловой системы и хранит всю информацию о ней. Он имеет размер 1024 байта и располагается по смещению 1024 байта от начала файловой системы. В каждой группе блоков он дублируется, что позволяет быстро восстановить его после сбоев.
В суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства и содержится информация о том, где искать незанятые участки. При запуске ОС суперблок считывается в память и все изменения файловой системы вначале находят отображение в копии суперблока, находящейся в ОП, и записываются на диск только периодически. Это позволяет повысить производительность системы, так как многие пользователи и процессы постоянно обновляют файлы. С другой стороны, при останове системы суперблок обязательно должен быть записан на диск, что не позволяет выключать компьютер простым выключением питания. В противном случае, при следующей загрузке информация, записанная в суперблоке, окажется не соответствующей реальному состоянию файловой системы.
Таблица 3.2
MBR
| Суперблок
| Группа блоков
| Группа блоков
| ...
| Группа блоков
| Копия суперблока
| Описание группы блоков
| Карта блоков
| Карта inode
| Таблица inode
| Блоки данных
| В индексном дескрипторе хранится вся информация о файле, кроме его имени. Имя файла хранится в блоке каталога, вместе с номером дескриптора. Запись каталога содержит имя файла и номер индексного дескриптора соответствующего файла. В этом дескрипторе хранятся номера нескольких блоков данных, которые используются для хранения самого файла. В inode есть место только для нескольких номеров блоков данных, однако, если требуется большее количество, то пространство для указателей на блоки данных динамически выделяется. Такие блоки называются косвенными. Для того, чтобы найти блок данных, нужно сначала найти его номер в косвенном блоке. Как видите, в устройстве файловой ext2, типичной для Linux нет ничего сложного. Обратите внимание на доступность информации.
|