|
Bog BOS: файловые системы для CD/DVD: ISO 9660, Joliet, Rock Ridge, El Torito, UDF. |
Последние изменения: |
Последнее изменение файла: 2007.06.09
Скопировано с www.bog.pp.ru: 2024.11.23
Предварительная информация в статье стандарты, носители, формат данных, устройства CD DVD. Дополнительная информация в статье использование CD/DVD в Linux.
Прошу прощения за "русские" слова типа "директория" и "экстент", но иначе приходится отображать несколько похожих английских слов на несколько похожих русских слов, отчего в голове получается полная каша. А тексты стандартов ISO и в оригинале производят впечатление (адвокаты их что ли пишут ;).
Стандарт - ISO 9660:1988, ISO/IEC 9660:1999, ECMA-119 - 1986, вторая редакция - 1987, Volume and file structure of CD-ROM for information interchange.
Тома (физический диск) могут объединяться в наборы томов (volume set), имеющие общий идентификатор набора. Тома внутри набора нумеруются с 1 и используют один кодовый набор. Набор томов может разделяться на группы томов. Предполагается, что каждая группа определяет версию данных, поэтому размеры групп должны совпадать. Дескрипторы и таблицы путей каждого тома набора должны содержать описания всех директорий и файлов набора, находящихся на томах с номерами меньшими или равными размеру набора.
Том разбивается на логические сектора (может состоять из нескольких физических секторов или использовать не всё место на физическом секторе) с логическими адресами (LSN - Logical Sector Number). Размер логического сектора - 2^n (предположительно 2048 байт). Том делится на системную область (LSN с 0 по 15) и область данных. Содержимое системной области стандартом не определяется. Область данных делится на логические блоки, размером 2^(n+8), где n - натуральное число, но не более логического сектора. Для адресации блоков используется LBN (Logical Block Number) - последовательная нумерация, начиная с 0 (для разнообразия байты нумеруются с 1) для начала тома. По-моему, в реальном мире размеры сектора, логического сектора и блока всегда равны 2048 байт, соответственно область данных начинается с сектора 16 первой дорожки CD-ROM и номер логического блока совпадает с номером физического сектора (для первой сессии физический адрес первого логического блока области данных - дескриптора тома - равен 00:02:16 в абсолютных временых адресах). Числа в большинстве случаев хранятся одновременно в последовательности байт LSB и MSB ("и пусть никто не уйдёт обиженный").
Наборы символов, используемые в стандарте:
В начале области данных хранятся дескрипторы тома (каждый дескриптор тома занимает отдельный логический сектор, 2048 байт, может быть несколько копий для надёжности, байты нумеруются с 1!):
Том также содержит разделы тома, размещаемые в непрерывных областях (ссылка на раздел должна быть в дескрипторах тома), таблицы путей (ссылка должна быть в дескрипторах тома), дескрипторы директорий (ссылка на корневую директорию должна быть в дескрипторе тома, на некорневую - в дескрипторе директории верхнего уровня иерархии, на любую директорию должна быть запись в таблице путей), экстенты (непрерывные области данных и атрибутов) файлов (ссылка на экстент должна быть в дескрипторе директории).
Директория хранится как файл из одного экстента, должна содержать запись оглавления для родительской директории (корневая директория содержит запись оглавления себя самой) с именем (идентификатором) 0x01, должна также содержать запись оглавления себя самой с именем 0x00, не может входить в несколько иерархий, глубина вложенности для иерархий PVD и SVD не более 8, содержит последовательность записей оглавления для каждого экстента входящих в неё файлов (включая подчинённые директории):
Экстент файла занимает целое число блоков и состоит из необязательной записи расширенных атрибутов и секции данных (также может быть нулевой длины). Экстент представляет собой непростую структуру (деление на File Units, interleave, gap и т.п.), но об этом знать не обязательно, как и о делении файла на записи фиксированной и переменной длины). Хотя вот это полезно: части сегмента данных (File Unit) и промежутки между ними (gap) могут быть приписаны сразу нескольким экстентам и/или разделам тома. Файл состоит из одной или более секций данных, их порядок определяется порядком записей оглавления в директории. Секция может входить в состав нескольких файлов в различных директориях или даже несколько раз в состав одного и того же файла. Секция может храниться на другом томе.
Запись расширенных атрибутов может содержать
Таким образом, файлы образуют древовидную структуру каталогов, но для ускорения поиска файлов хранится также таблица путей (path table), которая для каждой директории содержит адрес содержащего её экстента, длину записи расширенных атрибутов, номер родительской директории, идентификатор директории. Таким образом каждая директория получает номер (корневая директория имеет номер 1). Директории в таблице путей сортируются по возрастанию глубины иерархии, далее по возрастанию номера родительской директории и по идентификатору директории в алфавитном порядке (дополняются пробелами справа). Таблицы хранятся в двух вариантах (LSB и MSB), может быть 2 копии.
Стандарт требует, чтобы оглавление выдавалось в алфавитном порядке, директории в начале, вне зависимости от расположения файлов на диске. Поэтому при создании файловой системы желательно сортировать файлы по именам - головки будут меньше дёргаться. Сортировка внутри директории происходит сначала по именам файлов (предварительно дополненных пробелами справа), затем по суффиксам, затем по версиям в обратном порядке, затем по биту ассоциированности файла в обратном порядке, затем по порядку экстентов. Как сортируются файлы в иерархии EVD (там нет понятия суффикса) непонятно.
Файлы с образом файловой системы ISO 9660 в архивах обычно имеют суффиксы .iso и содержат одну дорожку данных.
Уровни совместимости ISO 9660:
Расширение Rock Ridge Interchange Protocol файловой системы ISO 9660 |
Стандарт System Use Sharing Protocol (SUSP, IEEE P1281, 1994) определяет cпособ кодирования поля System Use, определенного стандартом ISO 9660 в записи оглавления. Поле System Use может содержать ноль, один или несколько элементов переменной длины. Тип элемента определяется первыми двумя байтами. Возможно несколько элементов одного типа. Элемент, записанный в System Use последнего экстента файла перекрывает все элементы того же типа, записанные в предыдущие сегменты. Третий байт задаёт общую длину элемента, четвёртый - версию (если в System Use осталось менее 4 байт, то этот остаток игнорируется), далее идут данные в зависимости от типа элемента:
Стандарт Rock Ridge Interchange Protocol (RRIP, IEEE P1282, 1994) использует SUSP, чтобы обеспечить возможность хранения длинных имен файлов (POSIX), числа жестких ссылок (st_nlink), символьных ссылок, uid (st_uid), gid (st_gid), прав доступа Unix (st_mode: права доступа, setuid, setgid и sticky биты, тип файла), "дырявых" (sparse) файлов, device number (major, minor), временных отметок (время создания, время последней модификации - st_mtime, время последнего доступа - st_atime, время последнего изменения атрибутов - st_ctime, время последнего сохранения, время завершения хранения, время введения в действие - effective time), серийных номеров файлов (st_ino: файлы с одинаковым значением st_ino - inode - являются одним и тем же файлом). Глубина вложенности директорий произвольна (обратите внимание на файлы RRMOVED, возможно скрытые). При этом диск остается совместимым с ISO 9660.
Стандарт определяет новые типы элементов SUSP (идентификатор расширения указан как "IEEE_P1282", но что-то я такого не вижу, зато вижу строчки RR):
Длина идентификатора файла - до 255 символов (не байт!).
Joliet - расширение файловой системы ISO 9660, предложенное MS. Формат PVD не отличается от описанного в ISO 9660, что обеспечивает совместимость с приложениями, не использующими SVD. При этом нет гарантированного способа произвести соответствие файлов в иерархиях PVD и SVD. Для записи иерархии директорий с именами в кодировке Unicode (точнее UCS-2, UTF-16, MSB) используется SVD с escape-последовательностями:
Поля дескриптора тома (идентификатор системы, идентификатор тома, идентификатор набора томов, идентификатор публикатора, идентификатор подготовившего данные, идентификатор приложения, копирайт, аннотация, библиография), идентификаторы директорий и файлов в иерархии директорий и идентификатор системы в записи расширенных атрибутов записываются в кодировке UTF-16 с использованием любых символов (соответствующего уровня), кроме "*/:;?\" и интервала 0x0000 - 0x001F. Кстати, максимальные длины полей (выраженные в символах) уменьшились при этом вдвое (например, имя тома в Joliet не может быть более 16 символов!). Имена файлов на диске и на CD опять-таки совпадают не до конца.
Идентификаторы зарезервированных директорий (ссылка на себя, на родительскую директорию, на корень) записываются также, как в PVD. Разделители частей идентификатора (; и .) записываются в UTF-16 (MSB). Алгоритм сортировки таблиц путей и директорий адаптирован к двухбайтным символам заменой символа-заполнителя с пробела на 0x00. Сортировка обязательна. Локализация сортировки возлагается на приложения. Полная длина имени файла от корня не может превышать 240 байт (120 символов).
Иерархия директорий, описанная в SVD Joliet, может нарушать ограничения стандарта ISO 9660
Особенности мультисессионных дисков:
Спецификация загружаемого CD-ROM El Torito определяет формат загрузочной записи, находящейся среди дескрипторов тома файловой системы ISO 9660, и её интерпретацию в BIOS. Позволяет разработчикам создавать CD-ROM, а BIOS использовать для загрузки записанный на нём образ дискеты или жесткого диска. CD-ROM может содержать несколько загружаемых образов, выбор нужного может осуществляться BIOS, программой или вручную. Некоторые BIOS могут обрабатывать только первый образ.
Загрузочная запись д.б. записана по адресу 17 (т.е. сразу после PVD) последней сессии. Идентификатор системы д.б. "EL TORITO SPECIFICATION". Со смещением 0x47 записывается адрес (LSB) первого сектора загрузочного каталога. Загрузочный каталог содержит набор 32-байтовых записей (по 64 записи на сектор) следующих типов (подозреваю, что большинство BIOS-ов умеют загружать только образ по умолчанию):
Если эмулируется дискета, то дальнейшие обращения программы к первому флоппидисководу (A:) с использованием прерывания BIOS INT 13h будут транслироваться в обращения к этой области CD-ROM, обращения ко второму флоппидисководу (B:) будут транслироваться в операции с первым настоящим флоппидисководом, второй настоящий флоппидисковод становится недоступен средствами BIOS.
Если эмулируется жесткий диск, то дальнейшие обращения программы к первому диску (C:) с использованием прерывания BIOS INT 13h будут транслироваться в обращения к этой области CD-ROM, обращения программы ко второму диску будут транслироваться в операции с первым настоящим диском и т.д.. Можно использовать как CHS, так и LBA адресацию (см. ATA). Таблица разделов в образе должна содержать только 1 раздел и только в первой строке. Геометрия виртуального диска берётся из таблицы разделов.
Виртуальный образ может загружаться в указанный сегмент памяти с передачей ему управления с эмуляцией или без эмуляции дискеты или диска. Загруженная программа в режиме без эмуляции может обращаться к CD-ROM с помощью дополнительных функций INT 13h (функции 41h-48h, LBA, размер сектора - 2048 байт).
Если образ описан как незагрузочный, то BIOS переходит к следующему устройству загрузки, но создаёт виртуальное устройство, только не первым, а вслед за последним настоящим жёстким диском.
Загруженная программа имеет возможность определить, что диск эмулируется (INT 13h Function 48h, EDD specification). Определяются дополнительные функции INT 13h:
p.s. все числа в тексте спецификации - шестнадцатеричные, поэтому размер сектора определяется как 800 байт, что поначалу привело меня в шоковое состояние.
не дописано
UDF (Universal Data Format) - файловая система для CD-RW, DVD. Приспособлена для модификации файлов. Имена файлов длиной до 127 символов. Используются пакеты переменной длины. Каждый файл (или фрагмент файла) хранится в отдельном пакете вместе со своим описанием. VTOC не требуется, но для совместимости может иметься VTOC ISO 9660 level 3 (UDF Bridge).
UDF с пакетами фиксированной длины. Диск предварительно форматируется пакетами фиксированной длины. При размере пакета в 4 КБ полезный объем диска в 650 МБ - 494 МБ. Диск при этом не закрывается, поэтому его можно читать лишь на устройстве записи (нужен доступ к PMA). VTOC хранится на диске, но обновление проихводится только при необходимости из-за ограниченного числа циклов перезаписи CD-RW.
DVD-Video и DVD-Audio используют микро-UDF (подмножество UDF, ISO 13346). Размер файла не более 1 ГБ. Имена файлов до 255 символов, UNICODE. Видеофайлы должны лежать в каталоге VIDEO_TS, аудио - AUDIO_TS. DVD-Video и DVD-Audio шифруются системой CSS. Ключ уникален для каждого диска и хранится в зашифрованном виде на нем (гениальная идея ;). Аналоговый выход защищается Macrovision APS. DVD-Video диски имеют код региона (всего их 8, Россия - 5), который должен совпадать с кодом региона устройства. Устройство уровня защиты RPC-1 позволяет менять код региона произвольное число раз, уровня RPC-2 - не более 5.
UDF Bridge - комбинация ISO 9660 и MicroUDF.
ISO-13346 (ECMA-167).
ISO-13490 (ECMA-168).
Ничто не мешает записать файловую систему ext2fs на CD-R/RW. Я так и вовсе иногда записываю архив в формате .cpio.gz вместо iso-образа. Надо только не забыть, что же вы туда запихнули ;)
|
Bog BOS: файловые системы для CD/DVD: ISO 9660, Joliet, Rock Ridge, El Torito, UDF. |
Последние изменения: |