Введение

Файловая система операционных систем OpenVMS и RSX 11. Files 11 – это файловая система, используемая в операционных системах RSX 11 и OpenVMS компании Digital Equipment Corporation. Она поддерживает ввод/вывод, ориентированный на записи, удалённый сетевой доступ и версионирование файлов. Исходный уровень ODS 1 представляет собой плоскую файловую систему, а версия ODS 2 – иерархическую файловую систему с поддержкой списков управления доступом. Files 11 аналогична, но значительно превосходит файловые системы, использовавшиеся в предыдущих операционных системах Digital Equipment Corporation, таких как TOPS 20 и RSTS/E.

История

Файловая система OpenVMS берет начало от более ранних операционных систем DEC и во многом схожа с ними, обе были разработаны Дэйвом Катлером. Главное отличие заключается в организации каталогов. Все эти файловые системы предоставляли некоторую примитивную неиерархическую структуру каталогов, как правило, основанную на назначении одного каталога для каждой учетной записи пользователя. В системе RSTS/E каждая учетная запись пользователя представлялась двумя числами – парой [проект, программист] – и имела один связанный с ней каталог. Специальные системные файлы, такие как исполняемые программы и сама операционная система, хранились в каталоге зарезервированной системной учетной записи. Хотя это было приемлемо для систем PDP 11, которые имели ограниченный объем постоянной памяти, системам VAX с гораздо большими жесткими дисками требовался более гибкий метод хранения файлов: в частности, иерархическая структура каталогов, которая стала наиболее заметным улучшением в ODS 2.

Обзор

"Файлы 11" – это общее название для пяти отдельных файловых систем, известных как уровни организации на диске (ODS) от 1 до 5. ODS 1 – это плоская файловая система, используемая операционной системой RSX 11, поддерживаемая более старыми системами VMS для обеспечения совместимости с RSX, но не использовавшаяся для поддержки самой VMS; она в значительной степени уступила место ODS 2 и ODS 5. ODS 2 является стандартной файловой системой VMS и остаётся наиболее распространённой файловой системой для системных дисков (диска, на котором установлена операционная система). Хотя их редко упоминают по обозначению уровня ODS, ODS 3 и ODS 4 представляют собой поддержку "Файлов 11" для файловых систем CD ROM ISO 9660 и High Sierra Format соответственно. ODS 5 – это расширенная версия ODS 2, доступная на платформах Alpha и IA 64, которая добавляет поддержку сохранения регистра имен файлов, содержащих символы, отличные от ASCII, и улучшает поддержку иерархических каталогов. Изначально она предназначалась для обеспечения файлового обслуживания систем Microsoft Windows или других систем, отличных от VMS, в рамках проекта "NT Affinity", но также используется на пользовательских дисках и интернет-серверах.

Размещение каталога

Все файлы и каталоги в файловой системе Files 11 содержатся в одном или нескольких родительских каталогах и, в конечном итоге, под корневым каталогом, в главном каталоге файлов (см. ниже). Таким образом, файловая система организована в виде структуры направленного ациклического графа (DAG). В этом примере (см. справа) файл 2 имеет запись в каталогах Dir 2 и Dir 3; он одновременно "находится" в обоих каталогах. Даже если его удалить из одного каталога, он все равно будет существовать в другом, пока не будет удален и оттуда. Это аналогично концепции жестких ссылок в UNIX, однако следует учитывать, что файл может быть фактически удален на дисках, не поддерживающих жесткие ссылки (доступны только на дисках ODS 5, и только если на диске включена поддержка жестких ссылок).

Организация диска и его наименование

Операционная система VMS имеет доступ к одному или нескольким онлайн-дискам, каждый из которых содержит полную, независимую файловую систему. Это может быть локальное хранилище или, в случае кластера, хранилище, совместно используемое с удаленными системами. В конфигурации кластера OpenVMS диски, не являющиеся приватными, совместно используются всеми узлами кластера (см. рисунок 1). В этой конфигурации два системных диска доступны обоим узлам по сети, но приватный диск не является общим: он монтируется для использования только конкретным пользователем или процессом на данной машине. Доступ к файлам в кластере управляется OpenVMS Distributed Lock Manager, являющимся неотъемлемой частью файловой системы. Несколько дисков могут быть объединены в один большой логический диск или набор томов. Диски также могут автоматически реплицироваться в теневые наборы для обеспечения безопасности данных или повышения скорости чтения. Диск идентифицируется либо его физическим именем, либо (чаще) логическим именем, определенным пользователем. Например, загрузочное устройство (системный диск) может иметь физическое имя $3$DKA100, но обычно оно обозначается логическим именем SYS$SYSDEVICE. Файловые системы на каждом диске (за исключением ODS 1) иерархичны. Полностью определенное имя файла состоит из имени узла, имени пользователя и пароля, имени устройства, каталога, имени файла, типа файла и номера версии в формате:

NODE"accountname password"::device:[directory.subdirectory]filename.type;ver

Например, [DIR1.DIR2.DIR3]FILE.EXT относится к последней версии FILE.EXT на текущем диске по умолчанию в каталоге [DIR1.DIR2.DIR3]. DIR1 является подкаталогом главного каталога файлов (MFD) или корневого каталога, а DIR2 – подкаталогом DIR1. MFD диска идентифицируется как [000000]. Большинство частей имени файла могут быть опущены, в этом случае они берутся из текущей спецификации файла по умолчанию. Спецификация файла по умолчанию заменяет понятие «текущего каталога» в других операционных системах, предоставляя набор значений по умолчанию для узла, имени устройства и каталога. Все процессы имеют спецификацию файла по умолчанию, которая включает имя диска и каталог, и большинство подпрограмм файловой системы VMS принимают спецификацию файла по умолчанию, которая также может включать тип файла; команда TYPE, например, по умолчанию использует ".LIS" в качестве типа файла, поэтому команда TYPE F без расширения пытается открыть файл F.LIS. Каждый файл имеет номер версии, который по умолчанию равен 1, если нет других версий с тем же именем файла (в противном случае он на единицу больше, чем наибольший номер версии). Каждый раз при сохранении файла вместо перезаписи существующей версии создается новый файл с тем же именем, но с увеличенным номером версии. Старые версии могут быть удалены явно с помощью команд DELETE или PURGE или, опционально, старые версии файла могут быть удалены автоматически при достижении лимита версий файла (установленного командой SET FILE/VERSION LIMIT). Таким образом, старые версии не перезаписываются, а хранятся на диске и могут быть извлечены в любое время. Архитектурный предел для номеров версий – 32767. Поведение версионного управления можно легко отключить, если оно не требуется. В частности, файлы, которые обновляются напрямую, такие как базы данных, не создают новые версии, если это не запрограммировано. ODS 2 ограничивается восемью уровнями подкаталогов и только именами, состоящими из заглавных букв, буквенно-цифровых символов (плюс символы подчеркивания, дефиса и знака доллара) длиной до 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".

Логические названия

Логическое имя – это системная переменная, которая может ссылаться на диск, каталог или файл, или содержать другую информацию, специфичную для программы. Например, логическое имя SYS$SYSDEVICE содержит загрузочное устройство системы. Логическое имя обычно относится к одному каталогу или диску, например SYS$LOGIN:, который является каталогом (или каталогами) входа (домашним) пользователя; эти логические имена нельзя использовать как истинные имена дисков – SYS$LOGIN:[DIR]FILE не является допустимой спецификацией файла. Однако скрытые логические имена, определенные с помощью DEFINE/TRANSLATION=CONCEALED, могут использоваться таким образом; эти корневые каталоги определяются с завершающей точкой "." в спецификации каталога, следовательно, команда $ DEFINE/TRANS=CONCEAL HOME DISK$USERS:[имя пользователя.] позволит использовать HOME:[DIR]FILE. Более распространены простые логические имена, указывающие на конкретные каталоги, связанные с каким-либо прикладным программным обеспечением, которое может располагаться на любом диске или в любом каталоге. Например, логическое имя ABC EXE может указывать на каталог исполняемых программ для приложения ABC, а ABC TEMP – на каталог временных файлов для того же приложения, и этот каталог может находиться на том же диске и в той же структуре каталогов, что и ABC EXE, или где-то на другом диске (и в другой структуре каталогов). Подобно Unix, VMS определяет несколько стандартных каналов ввода и вывода, к которым осуществляется доступ через логические имена SYS$INPUT, SYS$OUTPUT, SYS$ERROR и SYS$COMMAND. Логические имена не имеют прямого эквивалента в операционных системах POSIX. Они напоминают переменные среды Unix, за исключением того, что они расширяются файловой системой, а не командной оболочкой или прикладной программой. Они должны быть определены перед использованием, поэтому часто многие логические имена определяются в системном загрузочном файле, а также в файлах команд входа пользователя. В VMS логические имена могут ссылаться на другие логические имена (до предопределенного лимита вложенности в 10) и могут содержать списки имен для поиска существующего имени файла. Некоторые часто используемые логические имена:

логическое имя | значение
---|---
SYS$INPUT | стандартный ввод – используется в интерактивном режиме, представляет собой терминальную клавиатуру. В пакетном файле он читает строки пакетного файла, не начинающиеся с символа "$", или указанные как входной набор с помощью команды DECK.
SYS$OUTPUT | стандартный вывод – он выводит данные на дисплей терминала или в пакетный лог-файл, в зависимости от того, является ли процесс интерактивным или нет.
SYS$ERROR | стандартный канал ошибок – он выводит данные на дисплей терминала или в лог-файл ошибок пакета, в зависимости от того, является ли процесс интерактивным или нет.
SYS$COMMAND | источник команд для пакетных файлов. Он читает данные с терминала или из потока SYS$INPUT, в зависимости от того, является ли процесс интерактивным или нет.
TT | терминал, связанный с процессом
SYS$PRINT | принтер по умолчанию или очередь печати
SYS$LOGIN | домашний каталог для каждого пользователя
SYS$SCRATCH | временная папка, каталог для временных файлов
SYS$SYSTEM | каталог, содержащий большинство системных программ и несколько важных файлов данных, таких как файл авторизации системы (учетные записи и пароли)
SYS$SHARE | общие библиотеки времени выполнения, исполняемые файлы и т.д.
SYS$LIBRARY | системные и добавленные библиотеки

Ближайшей операционной системой, не относящейся к DEC, поддерживающей концепцию логических имен, является AmigaOS, через команду ASSIGN. Дисковая операционная система AmigaOS, AmigaDOS, являющаяся портом TRIPOS, имеет некоторое сходство с операционными системами DEC. Например, имена физических устройств следуют шаблону, такому как DF0: для первого дисковода, CDROM2: для третьего CD-ROM-привода и т.д. Однако, поскольку система может загружаться с любого подключенного диска, операционная система создает присвоение SYS: для автоматической ссылки на используемое загрузочное устройство. Другие присвоения, LIBS:, PREFS:, C:, S: и т.д., также выполняются и сами ссылаются на SYS:. Пользователи, конечно, могут создавать и удалять свои собственные присвоения.

Физическая структура: структура на диске

На уровне диска ODS представляет файловую систему как массив блоков, где блок состоит из 512 последовательных байт на одном физическом диске (томе). Дисковые блоки выделяются кластерами (первоначально 3 последовательных блока, но позднее их количество увеличивалось с ростом размеров дисков). В идеале файл на диске должен быть полностью непрерывным, то есть блоки, содержащие файл, должны быть последовательными, однако фрагментация диска иногда требует размещения файла в несмежных кластерах, при этом фрагменты называются экстентами. Диски могут объединяться в наборы томов, и файлы могут храниться в любом месте этого набора дисков, но использование наборов томов сократилось с увеличением размеров дисков, поскольку управление одним физическим диском проще. Каждый файл на диске Files 11 (или в наборе томов) имеет уникальный идентификатор файла (FID), состоящий из трех чисел: номера файла (NUM), номера последовательности файла (SEQ) и относительного номера тома (RVN). NUM указывает местоположение метаданных файла в файле INDEXF.SYS (см. ниже); SEQ – это номер поколения, который увеличивается при удалении файла и создании нового файла, использующего ту же запись в INDEXF.SYS (чтобы избежать случайного обращения висячих ссылок на старый файл к новому); а RVN указывает номер тома, на котором хранится файл при использовании набора томов.

Справочники

Структурная поддержка ODS-тома обеспечивается файлом каталога — специальным файлом, содержащим список имен файлов, номеров версий файлов и связанных с ними FID, аналогично каталогам VSAM в MVS и каталогам в файловых системах Unix и NTFS. В корне структуры каталога находится главный каталог файлов (MFD), корневой каталог, который содержит (непосредственно или косвенно) каждый файл на томе. На этой диаграмме показан пример каталога, содержащего 3 файла, и способ сопоставления каждого имени файла с записью INDEXF.SYS (каждая запись INDEXF содержит больше информации; здесь показаны только первые несколько элементов).

Другие файлы

Файл битмапа хранения: BITMAP. SYS
Файл бит-карты отвечает за хранение информации об используемом и доступном пространстве на томе. Он содержит блок управления хранилищем (SCB), который включает сводную информацию, подробно описывающую ?, и битмап – массив битов, указывающий, свободен ли кластер блоков на диске или выделен. В ранних версиях VMS кластер состоял из 3 блоков, но по мере увеличения размеров дисков увеличивался и размер кластера. Файл плохих блоков: BADBLK. SYS
Файл плохих блоков содержит информацию обо всех известных поврежденных блоках на физическом томе. Его назначение – предотвратить выделение этих блоков системе для файлов. Этот файл использовался чаще в ранние годы, когда диски обычно производились с большим количеством дефектов на поверхности. Файл списка наборов томов: VOLSET. SYS
Список наборов томов находится на первом томе набора томов и содержит список меток всех томов в наборе, а также имя набора томов. Файл продолжения: CONTIN. SYS
Когда файл в многотомном наборе пересекает границу двух составляющих томов, файл продолжения используется в качестве заголовочного файла продолжения и описывает том, где находится остальная часть файла. Файл квот: QUOTA. SYS
Файл квот содержит информацию об использовании дискового пространства каждой UIC на томе. Он содержит запись для каждой UIC с выделенным ей пространством на томе, а также информацию о том, сколько пространства использует эта UIC. ПРИМЕЧАНИЕ: Функция DISK QUOTA является необязательной, и файл будет существовать только в том случае, если эта функция была включена. Профиль безопасности тома: SECURITY. SYS
Профиль безопасности тома содержит UIC-владельца тома, маску защиты тома и его список контроля доступа. Таблица разделов GUID: GPT. SYS
Этот файл перекрывает и защищает структуры дисков MBR (Master Boot Record) и GPT (GUID Partitioning Table), используемые для и поддерживаемые прошивкой, соответствующей спецификации Extensible Firmware Interface. Этот файл создается по умолчанию во время инициализации диска OpenVMS I64 и может быть создан дополнительно (с INITIALIZE/GPT) на OpenVMS Alpha.