Таблица 16.6. Особые индексные дескрипторы
Идентификатор |
Значение |
Описание |
EXT2_BAD_INO |
1 |
Индексный дескриптор, в котором перечислены адреса дефектных блоков на диске (Bad blocks inode) |
EXT2_ROOT_INO |
2 |
Индексный дескриптор корневого каталога файловой системы (Root inode) |
EXT2_ACL_IDX_INO |
3 |
ACL inode |
EXT2_ACL_DATA_INO |
4 |
ACL inode |
EXT2_BOOT_LOADER_INO |
5 |
Индексный дескриптор загрузчика (Boot loader inode) |
EXT2_UNDEL_DIR_INO |
6 |
Индексный дескриптор каталога для удаленных файлов (Undelete directory inode) |
EXT2_FIRST_INO |
11 |
Первый незарезервированный индексный дескриптор |
Самый важный дескриптор в этом списке - дескриптор корневого каталога. Этот дескриптор указывает на корневой каталог, который, подобно всем каталогам, представляет собой связанный список, состоящий из записей переменной длины. Каждая запись имеет следующую структуру (табл. 16.7):
Таблица 16.7. Структура дескриптора, описывающего корневой каталог
Название поля |
Тип |
Описание |
Inode |
ULONG |
Номер индексного дескриптора (индекс) файла |
Rec_len |
USHORT |
Длина этой записи |
Name_len |
USHORT |
Длина имени файла |
Name |
CHAR[0] |
Имя файла |
Использование записей переменной длины позволяет использовать длинные имена файлов без пустой траты дискового пространства. Отдельная запись в каталоге не может пересекать границу блока (т. е. должна быть расположена целиком внутри одного блока). Поэтому, если очередная запись не помещается целиком в данном блоке, она переносится в следующий блок, а предыдущая запись продолжается таким образом, чтобы она заполнила блок до конца.
16.4. Система адресации данных
Система адресации данных - это одна из самых существенных составных частей файловой системы. Именно система адресации позволяет находить нужный файл среди множества как пустых, так и занятых блоков на диске. В ext2fsсистема адресации реализуется полем i_block индексного дескриптора файла.
Поле i_block в индексном дескрипторе файла представляет собой массив из 15 адресов блоков. Первые 12 адресов в этом массиве (EXT2_NDIR_BLOCKS [12]) представляют собой прямые ссылки (адреса) на номера блоков, в которых хранятся данные из файла. Следующий адрес в этом массиве (EXT2_IND_BLOCK) является косвенной ссылкой, т. е. адресом блока, в котором хранится список адресов следующих блоков с данными из этого файла. В этом блоке могут быть записаны адреса ( размер_блока / размер_ULONG ) блоков с данными файла.
Следующий адрес в поле i_block индексного дескриптора (EXT2_DIND_BLOCK) указывает на блок двойной косвенной адресации (double indirect block). Этот блок содержит список адресов блоков, которые в свою очередь содержат списки адресов следующих блоков данных того файла, который задается данным индексным дескриптором.
И, наконец, последний адрес (EXT2_TIND_BLOCK) в поле i_block индексного дескриптора задает адрес блока тройной косвенной адресации, т. е. блока со списком адресов блоков, которые являются блоками двойной косвенной адресации.
Теперь вы знаете, как устроены индексные дескрипторы файлов, т. е. можете представить, как в файловой системе ext2fs осуществляется запись в файл и чтение из файла.
Может быть здесь еще надо бы рассказать о команде mkfs, которая служит для создания файловой системы в разделе диска. Но вкратце мы ее рассмотрели в разд. 4.12, а за более подробными пояснениями читатель может обратиться к интерактивным руководствам.
16.5. Виртуальная файловая система VFS
До сих пор наш рассказ о файловой системе касался только "статических", если можно так выразиться, составных частей файловой системы. Но, я думаю, вы понимаете, что все это хозяйство обслуживается какими-то программными модулями. Эти программные части можно разделить на две составных части. Одна часть входит в состав ядра и образует так называемую виртуальную файловую систему (VFS). VFS обеспечивает унифицированный программный интерфейс к услугам файловой системы, причем безотносительно к тому, какой тип файловой системы (vfat, ext2fs, nfs и т. д.) имеется на конкретном физическом носителе. Поэтому каждая файловая система должна предоставлять еще какие-то конкретные процедуры доступа к своим файлам, для того, чтобы использоваться под Linux. Виртуальная файловая система VFS, расположенная как бы между приложениями и конкретными файловыми системами, позволяет пользовательским приложениям получать доступ к множеству файловых систем разных типов.
Читать дальше