[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Создание новых типов файловых систем

Для создания нового типа файловой системы необходимо разработать драйвер для самой файловой системы и для монтирования. Ниже описаны особенности реализации и синтаксис вызова драйверов файловой системы и монтирования.

Драйверы файловых систем

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

Драйвер предназначен для работы непосредственно с файловой системой конкретного типа. Программы-драйверы, используемые командами файловой системы, называются драйверами файловой системы и драйверами монтирования.

При выполнении команды, обрабатывающей файлы, выполняется поиск драйвера с именем вида /sbin/helpers/vfstype/command, где vfstype - тип файловой системы, указанный в файле /etc/vfs, а command - имя выполняемой команды. Флаги команды передаются драйверу файловой системы.

Для каждого типа файловой системы должны быть предоставлены драйверы для всех команд, а также один дополнительный драйвер. Этот драйвер должен называться так же, как и тип файловой системы. Он должен определять, действительно ли на указанном логическом томе находится файловая система соответствующего типа. Драйвер должен возвращать 0, если на логическом томе нет подходящей файловой системы. Он должен возвращать 1, если на логическом томе есть файловая система нужного типа, и для протокола файловой системы не требуется отдельное устройство. Драйвер должен возвращать значение 2, если на логическом томе есть подходящая файловая система, и для ее протокола требуется отдельное устройство. Если в драйвер будет передан флаг -l, он должен проверять наличие протокола файловой системы на указанном логическом томе. Значение 0 в этом случае должно указывать, что протокол найден, а 1 - что протокол не найден.

Устаревшая схема работы с файловыми системами

В этом разделе описана устаревшая схема работы с файловыми системами, применявшаяся в предыдущих версиях AIX. Ей по-прежнему можно пользоваться, хотя и не рекомендуется.

Операции драйвера файловой системы

Ниже приведен список всех операций, которые может выполнять драйвер файловой системы (они описаны в файле /usr/include/fshelp.h):

Операции Значение
#define FSHOP_NULL 0
#define FSHOP_CHECK 1
#define FSHOP_CHGSIZ 2
#define FSHOP_FINDATA 3
#define FSHOP_FREE 4
#define FSHOP_MAKE 5
#define FSHOP_REBUILD 6
#define FSHOP_STATFS 7
#define FSHOP_STAT 8
#define FSHOP_USAGE 9
#define FSHOP_NAMEI 10
#define FSHOP_DEBUG 11

Файловая система JFS поддерживает только следующие операции:
Операция Значение Команда


#define FSHOP_CHECK 1 fsck


#define FSHOP_CHGSIZ 2 chfs


#define FSHOP_MAKE 5 mkfs


#define FSHOP_STATFS 7 df


#define FSHOP_NAMEI 10 ff

Формат вызова драйвера файловой системы

Драйверы файловой системы имеют следующий формат запуска:

OpName OpKey FilsysFileDescriptor PipeFileDescriptor Modeflags
DebugLevel OpFlags


Поле Определение
OpName Задает параметр arg0 при запуске драйвера из программы. Значение поля OpName помещается в список процессов (см. описание команды ps).
OpKey Задает операцию драйвера. Например, если параметр OpKey имеет значение 1, будет запрошена операция fsck (проверить файловую систему).
FilsysFileDescriptor Указывает дескриптор файла, по которому программа обратилась к файловой системе.
PipeFileDescriptor Указывает файловый дескриптор конвейера (см. описание процедуры pipe), открытого между исходной программой и драйвером. Этот канал обеспечивает связь драйвера и вызывающей программы.

Пример: Драйвер передает по конвейеру сообщение об успешном выполнении операции или ошибке, в зависимости от чего определяется дальнейшая работа программы. В режиме отладки драйвер может передавать по конвейеру и другую информацию.

Modeflags Описывает характер запуска драйвера и может влиять на его работу, особенно в отношении сообщений об ошибках. Флаги режимов определены в файле /usr/include/fshelp.h :

Флаги
Обозначение

#define FSHMOD_INTERACT_FLAG
"i"

#define FSHMOD_FORCE_FLAG
"f"

#define FSHMOD_NONBLOCK_FLAG
"n"

#define FSHMOD_PERROR_FLAG
"p"

#define FSHMOD_ERRDUMP_FLAG
"e"

#define FSHMOD_STANDALONE_FLAG
"s"

#define FSHMOD_IGNDEVTYPE_FLAG
"I"

Пример: Флаг FSHMOD_INTERACT указывает, будет ли команда выполняться интерактивно (определяется с помощью проверки значения функции isatty стандартного ввода). Не все операции поддерживают перечисленные выше режимы.

DebugLevel Задает требуемый объем отладочной информации - чем выше уровень отладки, тем подробнее будет отладочная информация.
OpFlags Указывает устройство (или устройства) для которого необходимо выполнить операцию, и все остальные опции, переданные вызывающей программой.

Примеры вызова драйверов

При запуске команды fsck -fp /user выполняется следующий вызов драйвера:

execl("/etc/helpers/v3fshelpers","fshop_check","1","3","5","ifp",
        "0","devices=/dev/lv02,fast,preen,mounted")

В этом примере:

Другой пример вызова драйверов рассматривается для команды mkfs. Для создания файловой системы JFS на существующем логическом томе /dev/lv02 применяется следующая команда:

mkfs /junk

Создается точка монтирования. Если при создании файловой системы известно только устройство, на котором она создается, то нужно ввести:

mkfs /dev/lv02

В любом из этих вызовов вызывается следующий драйвер файловой системы:

execl ("/etc/helpers/v3fshelpers", "fshop_make", "5", "3", "5", "-ip",\
 "0", "name=/junk,label=/junk,dev=/dev/lv02") 

В этом примере запрошена операция FSHOP_MAKE. Указываются режимы  interactive и perror. Строка OpFlags указывает точку монтирования и устройство.

Драйверы монтирования

Команда mount - это интерфейсная программа, запускающая драйвер для конкретных файловых систем. Драйверы для команд mount и umount (или unmount) называются драйверами монтирования.

Как и другие команды файловой системы, команда mount считывает опции, заданные в командной строке, и интерпретирует их в контексте файловой системы, описанной файлом /etc/filesystems. С помощью информации из файла /etc/filesystems, команда вызывает драйвер монтирования, соответствующий типу заданной файловой системы. Например, пусть введена команда

mount /test

В этом случае программа mount обратится к файлу /etc/filesystems и найдет раздел, описывающий файловую систему /test. По данным файла /etc/filesystems команда mount определит, что файловая система  /test смонтирована по NFS на удаленном узле host1. Команда mount также учтет указанные опции монтирования.

Ниже приведен пример раздела файла /etc/filesystems:

/test:
        dev              = /export
        vfs              = nfs
        nodename         = host1
        options  = ro,fg,hard,intr

По типу файловой системы (в этом примере - nfs  ) будет определен драйвер монтирования. Для этого команда сравнит тип файловой системы со значением первых полей записей файла /etc/vfs. В третьем поле строки с соответствующим первым полем будет указано имя драйвера.

Формат вызова драйвера монтирования

Ниже приведен пример вызова драйвера монтирования:

/etc/helpers/nfsmnthelp M 0 host1 /export /test ro,fg,hard,intr

В командах mount и unmount указывается шесть параметров. Первые четыре параметра совпадают для обеих команд:

операция Указывает операцию, запрашиваемую у драйвера. Возможные значения - M (монтирование), Q (запрос) и U (размонтирование). Операция запроса устарела и не применяется.
уровень отладки Определяется численным значением флага -D. Ни команда mount, ни команда unmount не поддерживают флаг -D, поэтому его значение равняется 0.
имя узла Указывает имя узла при удаленном монтировании или содержит пустую строку при локальном монтировании. Команды mount и unmount не вызывают драйвер, если параметр имя узла пуст.
объект Указывает имя локального или удаленного устройства, каталога или файла, для которого выполняется операция монтирования или размонтирования. Не все файловые системы поддерживают все возможные комбинации. Например, удаленные файловые системы обычно не поддерживают монтирование устройств, в то время как локальные файловые системы не поддерживают остальные типы монтирования.

У команды mount есть два дополнительных параметра:

точка монтирования Определяет локальный каталог или файл, в котором будет смонтирован объект.
опции Содержит список опций файловой системы, разделенных запятой. Значение этого параметра определяется полем options соответствующего раздела файла /etc/filesystems или флагом -o Опции командной строки (mount -o Опции). Команда mount также поддерживает флаг -r (только для чтения), и при формировании этого поля преобразует его в опцию ro.

У команды unmount есть два дополнительных параметра:

vfsNumber Задает уникальный номер размонтируемого объекта. Этот номер возвращается функцией vmount и может быть получен процедурами mntctl и stat. Драйверу это значение передается как первый параметр вызова процедуры uvmount, которая и выполняет размонтирование.
flag Определяет значение второго параметра процедуры uvmount. Значение 1 соответствует принудительному размонтированию, если указан флаг -f (umount -f). В противном случае этот параметр имеет значение 0. Не все файловые системы поддерживают принудительное размонтирование.

Связанная информация

Управление файловыми системами - Обзор

Глава 5, Файловые системы и каталоги

Обзор виртуальных файловых систем

Глава 13, Создание программ, работающих с логическими томами

Вводная информация об общих I-узлах (G-узлах)

Команды chfs, df, ff, fsck, mkfs, mount, ps, umount и unmount.

Файлы vfs и filesystems.

Функции vmount, mount, umount и uvmount.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]