Драйверы файловых систем
При эксплуатации ОС может возникнуть необходимость монтировать
файловые системы, отличающиеся от "родной" ФС. Особенно часто
она возникает в организациях, где используются ОС нескольких разных типов.
Да и в организациях, работающих с монокультурой MS DOS/MS Windows, такая
потребность возникает все чаще. Во-первых, доступ к файлам на файловом
сервере осуществляется существенно иными способами, чем к файлам локальном
диске, даже если на сервере стоит та же ДОС с той же Фс тип FAT. Во-вторых,
дисководы для CD-ROM становятся все дешевле и расгт страняются все шире.
При этом стандартная ФС на CD-ROM — вовсе FAT.
Решение этой проблемы приходит в голову сразу — необходим драйвеп файловой
системы со стандартным интерфейсом, подобный драйверу ннеш него устройства.
Естественно, набор функций такого драйвера должен быть существенно иным.
- mount — монтирование ФС.
В зависимости от типа ФС параметры тгой функции должны различаться.
Для ФС на локальных дисках достаточно передать системный идентификатор
монтируемого диска. Для ФС на удаленной машине мы должны передать сетевой
адрес этой машины и имя требуемой файловой системы. Во многих случаях
проводится различие между монтированием ФС для чтения/модификации или
только для чтения: при монтировании с модификацией устанавливается флаг
загрязнения (dirty flag) ФС.
- umount — размонтирование
ФС.
- GetFreeSpace или df
— получение информации о ФС: общее пространство, свободное пространство,
количество файлов и т. д.
- FindFirst/FindNext ИЛИ opendir/readdir
— функции длячтения из каталога. Считанную информацию необходимо привести
к формату, принятому в данной ОС. В частности, может оказаться необходимым
сократить и/или преобразовать считанные имена файлов. Например, драйвер
HPFS, используемый в-эмуляторе MS DOS, в системе OS/2 не выполняет такого
преобразования. В результате — программы DOS не видят файлов и каталогов
с длинными именами.
- access — проверить существование
файла и возможность доступа к нему в заданном режиме, например, для
чтения или для записи.
- stat — функция для получения
информации о файле с заданным именем. Драйвер ФС должен считать доступную
информацию о файле и привести ее к принятому в ОС формату. При этом
возможно придется проигнорировать часть считанной информации, а другую
часть, напро-- тив, драйвер вынужден сочинять сам. Так, драйвер файловой
системы FAT в ОС семейства Unix вынужден сочинять идентификатор хозяина
файла, права доступа и т. д.
- open - открыть существующий
или создать новый файл с заданным именем.
- read и write — функции считывания
данных из файла ц записи в него.
- lseek — позиционирование
в файле.
- lock — функция (в действительности,
набор функций) блокировки для
синхронизации доступа к файлу или его участкам. (Подробнее о них см.
в
разд. Захват участков файлов).
При работе с локальными ФС операции блокировки могут прослеживаться
ядром системы и не доходить до драйвера ФС, но при
работе с разделяемыми по сети ФС блокировки необходимо отслеживать
на уровне протокола разделения файлов, поэтому драйвер сетевой ФС
обязан знать о блокировках.
- close — закрыть файл.
- delete или unlink — удалить
файл или его имя.
- link — создать связь с файлом
(новое имя). Далеко не все ОС и ФС поддерживают эту операцию.
- mkdir — создать каталог.
- rmdir — удалить каталог.
Обычно разрешено удаление только пустых каталогов.
Кроме собственно драйвера ФС, для ее полноценной поддержки
нужны следующие программы:
- программа создания ФС — mkfs или FORMAT;
- программа контроля и починки ФС — fsck или CHKDSK;
- программа fstyp, которая смотрит на содержимое устройства
и пытается определить, "ее" это ФС или не ее. Она полезна
при монтировании ФС с автоматическим определением ее типа;
- программа mount, которая принимает из командной строки
зависящие от типа ФС параметры, проверяет их допустимость и инициализирует
драйвер ФС.
Драйверы файловых систем в SCO UnixWare
Например, дистрибутив ОС UnxiWare 2.0 фирмы SCO, основанной на ядре UNIX
System V R4.2, содержит драйверы следующих файловых систем.
memfs — файловая система, размещающая файлы в оперативной памяти. Может
рассматриваться как эквивалент виртуального диска в MS DOS.
dosfs — файловая система FAT.
s5 — "классическая" ФС, сохранившаяся
почти без изменений с самых ранних версий системы— s5, по-видимому, означает
Unix System 5. Ограничивает имя файла 14 символами. Неустойчива к сбоям.
ufs — файловая система, разработанная в университете
Беркли, известная также как FFS (Fast File System) и Berkley FS. Является
основной ФС в большинстве версий BSD UNIX и поддерживается многими другими
ОС семейства Unix. Имеет более высокую производительность, чем s5, в первую
очередь за счет разбиения таблицы инодов и списка свободных блоков на
участки (группы цилиндров). Поддерживает дисковые квоты ограничения на
объем дискового пространства, занятого файлами того и~~ иного пользователя.
Ограничивает имя файла размером блока (обычно 512 символов). Неустойчива
к сбоям.
bfs — Boot File System — загрузочная файловая
система. Эта ФС очень простую структуру, отчасти похожую на файловую систему
все файлы в ней обязаны занимать непрерывное пространство. "Гака
структура упрощает первичный загрузчик системы, которому теперь не нужно
разбираться в каталогах и инодах. bfs имеет довольно низкую про-изводительность
и требует длительной процедуры размонтирования. если в нее были записаны
новые данные. Фактически, при таком размонтирова-нии происходит операция
сжатия ФС, эквивалентная команде SQEESE в RT-11. Используется для хранения
ядра системы и нескольких конфигурационных файлов, применяемых при загрузке.
Все эти данные считываются лишь при загрузке системы и перезаписываются
только при изменениях конфигурации ядра, поэтому высокая производительность
от этой ФС не требуется.
vxfs — устойчивая к сбоям ФС Veritas с регистрацией
намерений. Версия, входящая в стандартную поставку системы, включает в
регистрируемые транзакции только системные структуры данных. За отдельную
плату можно приобрести "продвинутую" версию Veritas, которая
обеспечивает транзакции и для записи пользовательских данных.
cdfs — файловая система ISO, используемая
на CD-ROM.
nfs — Network File System — драйвер файловой
системы, обеспечивающий разделение файлов с использованием сетевого протокола
TCP/IP. Протокол NFS был предложен фирмой Sun Microsystems в середине
80-х годов и в настоящее время поддерживается практически всеми членами
семейства Unix. NFS-клиенты и NFS-серверы реализованы практически для
всех современных ОС.
rfs — Remote File Sharing — использование
удаленной UNIX-системы в качестве файлового сервера. Этот протокол был
разработан фирмой AT&T в 80-е годы и пригоден только для соединения
систем UNIX System V.
nucfs — NetWare Unix Client File System. Этот
драйвер предназначен для присоединения к файловым серверам Novell Netware.
Он входит в состав системы UnixWare, поставляемой фирмой SCO, но не в
остальные версии UNIX SVR4.
Любопытно, что даже MS/DR DOS версий выше 3.30 имеют
возможность устанавливать драйвер файловой системы. Такой драйвер может
быть реализован путем перехвата недокументированных функций прерывания
0x2F — группы функций "Network Redirector"
и "IPS". Таким образом реализован
ряд сетевых клиентов для MS/DR DOS. К сожалению, автор не смог найти полноценного
описания этих функций. |