Files-11 (также известна как on-disk structure () — файловая система, используемая в операционной системе OpenVMS, а также в более простой форме в более старой ОС RSX-11. Это иерархическая файловая система с поддержкой списков контроля доступа, запись-ориентированным вводом-выводом, удалённым сетевым доступом и версиями файлов.
Files-11 похожа на файловые системы, использовавшиеся в более ранних операционных системах от DEC, таких как TOPS-20 и RSTS/E, но значительно более прогрессивна.
История
Родная файловая система OpenVMS происходит из более старых операционных систем DEC и во многом похожа на них. Главным отличием является расположение каталогов. Эти файловые системы предоставляют некоторую форму рудиментарной неиерархической структуры каталогов, обычно основанную на выделении одного каталога на одну учётную запись пользователя. В RSTS/E каждая учётная запись пользователя была представлена двумя числами, парой [проект.программист], и имела один ассоциированный каталог. Специальные системные файлы, такие как исполняемые файлы программ и сама ОС, хранились в каталоге, зарезервированном для системной учётной записи.
Несмотря на то, что это было применимо на системах PDP-11, обладавших ограниченной ёмкостью постоянного запоминающего устройства, системы VAX с гораздо большими жёсткими дисками требовали более гибкого метода хранения файлов: в частности иерархического расположения каталогов, наиболее заметного усовершенствования в ODS-2.
Обзор
Files-11 является общим названием для пяти отдельных файловых систем, известных как уровни с 1 по 5 на-дисковой структуры (ODS).
ODS-1 — плоская файловая система, использовавшаяся в ОС RSX-11; поддерживается старыми версиями ОС VMS для совместимости с RSX-11, но никогда не использовалась самой VMS; была почти повсеместно заменена на ODS-2 и ODS-5.
ODS-2 — стандартная файловая система для VMS, до сих пор остаётся наиболее часто используемой файловой системой для системного диска (диск, на который установлена операционная система).
Хотя их редко упоминают по обозначению их уровня ODS, ODS-3 и ODS-4 являются поддержкой Files-11 для файловых систем компакт-дисков ISO 9660 и High Sierra, соответственно.
ODS-5 является расширенной версией ODS-2, доступной для платформ Alpha или Itanium, в которой добавлена поддержка сохраняемого регистра имён файлов с не-ASCII символами и улучшена поддержка иерархических каталогов. Изначально она была предназначена для обслуживания файлов в Microsoft Windows или других отличных от VMS системах, как часть проекта «NT affinity», но также используется на пользовательских дисках и интернет-серверах.
Расположение каталогов
Все файлы и каталоги в файловой системе Files-11 находятся в одном или более родительских каталогах, и в конце концов в корневом каталоге — основном файловом каталоге (master file directory, MFD). Следовательно файловая система организована в древовидную структуру.
В примере справа File 2 имеет запись в каталогах Dir 2 и Dir 3; он находится в обоих каталогах одновременно. Даже если его удалить из одного каталога, то он всё еще будет существовать в другом, пока его не удалят и оттуда. Это очень похоже на концепцию жёстких ссылок в UNIX, хотя здесь необходимо следить за тем, чтобы действительно не удалить файл на дисках, которые не поддерживают жёсткие ссылки. Жёсткие ссылки доступны только на дисках с ODS-5, и только если они разрешены на этих дисках.
Организация диска и именование
Функционирующая система VMS имеет доступ к одному или нескольким постоянно подключенным дискам, каждый из которых содержит полноценную независимую файловую систему. Они являются либо локальным хранилищем, либо, в случае кластера, хранилищем, используемым совместно с удалёнными системами.
В кластерной конфигурации OpenVMS неприватные диски совместно используются всеми узлами кластера (см. рисунок 1). В такой конфигурации два системных диска доступны для обоих узлов кластера, но приватный диск не находится в совместном использовании: он подключен только для использования отдельным пользователем или процессом на первой машине. Доступ к файлам в кластере управляется OpenVMS Distributed Lock Manager, неотъемлемой частью файловой системы.
Множество дисков может быть скомбинировано в один больший логический диск или объединенный том (volume set). Диски могут также автоматически копироваться в теневые наборы для защиты данных или более высокой производительности при чтении.
Диск обозначается или своим физическим именем, или (более часто) логическим именем, определённым пользователем. Например, загрузочное устройство (системный диск) может иметь физическое имя $3$DKA100, но на него обычно будет ссылаться логическое имя SYS$SYSDEVICE.
Файловая система на каждом диске (за исключением ODS-1) является иерархической. Полная спецификация файла состоит из имени узла, имени учётной записи пользователя и его пароля, имени устройства, каталога, имени файла, типа файла и версии файла, и имеет следующий формат:
NODE"accountname password"::device:[directory.subdirectory]filename.type;version
узел"пользователь пароль"::устройство:[каталог]имя_файла.тип_файла;версия
Например, [DIR1.DIR2.DIR3]FILE.EXT будет ссылаться на последнюю версию файла FILE.EXT на диске, установленном по умолчанию, в каталоге [DIR1.DIR2.DIR3].
DIR1 является подкаталогом основного файлового каталога (MFD) или корневого каталога, а DIR2 — подкаталогом DIR1. Основной файловый каталог определён как [000000].
Многие части спецификации файла могут быть опущены, тогда они берутся из текущей спецификации файла по умолчанию. Спецификация файла по умолчанию заменяет концепцию «текущего каталога» в других операционных системах предоставлением набора установок по умолчанию для узла, имени устройства и каталога. Все процессы имеют спецификацию файла по умолчанию, которая содержит имя диска и каталог, и большинство подпрограмм файловой системы VMS принимает спецификацию файла по умолчанию, которая также может содержать тип файла; команда TYPE, например, по умолчанию ожидает «.LIS» в качестве типа файла, поэтому, если команде TYPE указать имя файла F без расширения, то она попытается открыть файл F.LIS.
Каждый файл имеет номер версии, который по умолчанию равен 1, если нет других версий этого файла (в противном случае - больше на единицу, чем наивысшая версия). Каждый раз при сохранении или перезаписи существующей версии будет создан новый файл с тем же именем, но увеличенным на 1 номером версии. Старые версии могут быть удалены явно командами DELETE или PURGE, или, опционально, более старые версии файла могут быть удалены автоматически при достижении предела количества версий файла (устанавливается командой SET FILE/VERSION_LIMIT). Старые версии в этом случае не перезаписываются, а хранятся на диске и могут быть восстановлены в любое время. Заложенный предел номера версии — 32767. Режим работы механизма присваивания версий может быть легко отключён, если в нём нет необходимости. В частности, файлы, которые обновляются напрямую, такие как базы данных, не создают новых версий, если только это не запрограммировано специально.
ODS-2 ограничена 8 уровнями вложенности каталогов и именами файлов только в верхнем регистре, длина буквенно-цифровых имён (плюс символ подчёркивания, тире и знак доллара) - до 39.39 символов (39 для имени файла и еще 39 для расширения). В ODS-5 расширен набор символов до символов в нижнем регистре и большинства других символов ASCII, а также символов ISO Latin-1 и Unicode, увеличена максимальная длина имени файла и не ограничено количество уровней вложенности каталогов. При конструировании полного имени файла для файла ODS-5, который использует символы, неразрешённые в ODS-2, используется специальный синтаксис «^» для сохранения обратной совместимости; файл «file.tar.gz;1» на диске с ODS-5, например, будет называться «file^.tar.gz» — имя файла будет «file.tar», а расширение - «.gz».
Защита файла: охрана и списки контроля доступа
Защита файлов в VMS определяется двумя механизмами: управлением доступом на основе кода идентификации пользователя (UIC) и управлением доступом на основе списков контроля доступа. Управление доступом на основе кода идентификации пользователя базируется на владельце файла и его коде идентификации или коде идентификации пользователя, желающего получить доступ к файлу. Доступ определяется четырьмя группами разрешений:
Системные разрешения (System) Разрешения владельца (Owner) Групповые разрешения (Group) Разрешения мира (World)
И четырьмя битами разрешений:
Чтение (Read) Запись (Write) Исполнение (Execute) Удаление (Delete)
Системный доступ применяется к любому пользователю, код идентификации которого меньше или равен параметру SYSGEN MAXSYSGROUP (обычно 8 или 10 восьмеричных) (например, пользователь SYSTEM); доступ владельца и группы применяются ко владельцу файла и его группе, к которой он принадлежит, а доступ мира применяется к любому другому пользователю. Также есть пятый бит разрешений — Управление (Control), который используется для определения доступа к изменению метаданных файла, таких как защита. Эта группа не может быть задана явно; она всегда задана для Системы и Владельца, и никогда не задана для Группы или Мира.
Управление доступом на основе кода идентификации также находится под влиянием четырёх системных привилегий, которые позволяют удерживать их для предотвращения перехвата управления доступом:
BYPASS: пользователь неявно имеет доступ на RWED ко всем файлам, независимо от защиты файла; READALL: пользователь неявно имеет доступ на R ко всем файлам; SYSPRV: пользователь может иметь доступ к файлам на основе защиты System; GRPPRV: пользователь может иметь доступ к файлам на основе защиты System, если группа их UIC достигает группы файла.
ACL позволяет назначать дополнительные привилегии пользователю или группе; например, коду идентификации пользователя веб-сервера может быть дано право читать все файлы в отдельном каталоге. ACL могут быть помечены как наследуемые, где ACL файлов для каталога применяются ко всем файлам в нём. Изменения в списки контроля доступа вносятся командой EDIT/ACL и имеют форму пары идентификатор/права_доступа. Например, запись в ACL команды
(IDENTIFIER=HTTP$SERVER,ACCESS=READ+EXECUTE)
позволит пользователю HTTP$SERVER читать и исполнять файлы.
Логические имена
Логическое имя является системной переменной, которая может ссылаться на диск, каталог или файл, или содержать другую программную информацию. Например, логическое имя SYS$SYSDEVICE содержит системное загрузочное устройство. Логические имена обычно ссылаются на один каталог или диск, например, SYS$LOGIN, которое является домашним каталогом (каталогами) учётной записи пользователя; эти логические имена не могут использоваться в качестве настоящих имён дисков — SYS$LOGIN:[DIR]FILE не является правильной спецификацией файла. Тем не менее, скрытые логические имена, определённые командой DEFINE/TRANSLATION=CONCEALED, могут использоваться для этого; эти корневые каталоги заканчиваются символом точки («.») в спецификации каталога, поэтому команда
$ DEFINE/TRANS=CONCEAL HOME DISK$USERS:[username.]
позволит использовать HOME:[DIR]FILE. Более распространены простые логические имена, которые указывают на определённые каталоги, связанные с какими-нибудь прикладным ПО, которое может располагаться на любом диске или в любом каталоге. Поэтому логическое имя ABC_EXE может указывать на каталог исполнимых программ приложения ABC, а ABC_TEMP может указывать на каталог временных файлов для того же самого приложения и этот каталог может быть на том же диске и в том же каталоге, что и ABC_EXE, или может быть где угодно на другом диске (и в другом дереве каталогов).