|
Bog BOS: Использование CD-ROM/-R/-RW и DVD-ROM/-R/-RW/+R/+RW в Linux
|
Последнее изменение файла: 2014.04.09
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Использование CD-ROM/-R/-RW и DVD-ROM/-R/-RW/+R/+RW в Linux
Для чтения статьи желательно знакомство с принципами работы накопителей
на оптических дисках (см. мою статью
Стандарты, носители, формат данных, устройства CD DVD) и строением файловых систем для CD/DVD файловые системы для CD/DVD: ISO 9660, Joliet, Rock Ridge, El Torito).
И, конечно, с Linux.
В статье описаны:
В современных дистрибутивах (kernel 2.6) задумываться о драйверах
для работы с CD/DCD-ROM не приходится (за исключением пакетной записи, pktcdvd) -
даже PATA/ATAPI устройство фигурирует в системе
как /dev/sr0, т.е. как SCSI CD-ROM, причём драйвер встроен в ядро, а не загружается как модуль.
Так что те, кто не собирает самостоятельно систему на базе ядер 2.0/2.2/2.4 могут пропустить
эту главу.
При работе с CD-ROM (CD-RW, DVD-ROM, DVD-RW) используются
следующие драйверы, обычно оформленные в виде модулей ядра
(подробнее номера устройств см. в Documentation/devices.txt):
Особенности конфигурации ядра для записи на ATAPI CD-RW
для старого cdrecord (в режиме эмуляции SCSI), шаг влево, шаг вправо - и
работать не будет (в RedHat 7.0 и выше все уже сделано за нас):
- IDE=y
- IDECD=m # модуль - ide-cd
- IDESCSI=m # модуль - ide-scsi
- SCSI=m # модуль - scsi
- BLK_DEV_SR=m # SCSI CDROM, модуль - sr
- BLK_DEV_SR_VENDOR=y
- CHR_DEV_SG = m # SCSI generic, модуль - sg
- ни в коем случае SCSI_MULTI_LUN в версиях ядра до 2.2.10
(Up to kernel-version
2.2.10, don't enable CONFIG_SCSI_MULTI_LUN ('probe for multiple luns')
and ide-scsi support at the same time)
- SCSI драйвер для конкретного контроллера
В новых версиях cdrecord можно записывать на ATAPI CD-RW
в режимах ATA или ATAPI
- IDE=y
- BLK_DEV_IDE=y
- BLK_DEV_IDECD=y # (т.е. встроен в ядро)
- BLK_DEV_IDESCSI=m # (на всякий случай, да?)
- SCSI=m
- SCSI_PROC_FS=y
- BLK_DEV_SR=m
- BLK_DEV_SR_VENDOR=y
- CHR_DEV_SG=m
Перед использованием устройства полезно сделать
(если её не сделал кто-нибудь за вас) символьную ссылку для /dev/cdrom,
т.к. многие программы по умолчанию ожидают увидеть устройство
по этому адресу
ln -s /dev/hdс /dev/cdrom
или
ln -s /dev/sr0 /dev/cdrom
При монтировании файловой системы надо указывать тип
iso9660 или udf. Мне встретился диск с драйверами от принтеров Samsung,
на котором при монтировании с типом iso9660 оказывались доступны
драйвера для Unix/Linux, при монтировании с типом udf - драйвера для MS,
а при монтировании с типом hfs - драйвера для Mac OS.
Так что надо аккуратнее с типом auto в /etc/fstab (где это сейчас в udev/hal?).
При возможности стоит добавить в строку /etc/fstab для CD-ROM ключи
"noauto,owner,user,noexec,ro,utf8",
чтобы он не монтировался при загрузке и позволял монтировать
файловую систему обычному пользователю.
Это позволит отключить автомонтирование, встроенное в Gnome, мешающее
использовать устройство для записи и монтировать диски с нестандартными
параметрами (выбирать тип iso9660 или udf, задавать номер сессии и т.д.).
В совсем старых системах перед размонтированием необходимо закрыть все файлы на диске,
в более новых достаточно использовать аплет Gnome, а в совсем новых - срабатывает
аппаратная кнопка на устройстве.
В новых версиях Gnome отключить автоматическое монтирование и запуск:
- "Система - Параметры - Персональные - Управление файлами", вкладка "Носители",
поставить галку "никогда не спрашивать и не запускать"
- в gconf-editor убрать галку в apps - Nautilus - preferences - media_automount
Опции монтирования iso9660 (также понимает расширения
Rock Ridge, Joliet, zisofs?)
(mount -t iso9660 -o опции-через-запятую устройство точка-монтирования):
- dev (файловая система может содержать файлы типа символьное или блочное
устройство)
- exec (разрешить запуск программ из файловой системы)
- nodev (игнорировать файлы типа символьное или блочное
устройство)
- noexec (не разрешить запуск программ из файловой системы)
- nosuid (игнорировать биты прав файлов set-user-identifier и
set-group-identifier)
- ro
- suid (разрешить интерпретацию бит прав файлов set-user-identifier и
set-group-identifier)
- norock (не использовать расширения Rock Ridge, даже если они есть на диске)
- nojoliet (не использовать расширения Joliet, даже если они есть на диске)
- map=normal (для томов, не содержащих расширение Rock Ridge, имена файлов
преобразуются в строчные буквы, отбрасываются хвосты ";1")
- map=off (для томов, не содержащих расширение Rock Ridge, имена файлов
не преобразуются)
- check=relaxed (имя файла преобразуется в строчные
буквы перед обращением к поиску в каталоге; полезно для norock,map=normal)
- check=strict (непреобразованное имя файла ищется в каталоге;
имена в каталоге могут быть преобразованы при map=normal!)
- uid= (назначить всем файлам идентификатор владельца, в т.ч. не обращая
внимания на расширение Rock Ridge)
- gid= (назначить всем файлам идентификатор группы, в т.ч. не обращая внимания
на расширение Rock Ridge)
- mode= (назначить всем файлам права (восьмеричное число начинается с 0),
в т.ч. не обращая внимания на расширение Rock Ridge)
- unhide (показывать в каталогах скрытые и ассоциированные файлы;
могут "перекрыть" нормальные файлы, если совпадут имена)
- block=1024 (512, 2048)
- cruft (игнорировать старшие биты длины файла, позволяет работать с
неправильно сделанными томами (до-iso9660?))
- session=номер-сессии
- sbsector=номер-первого-сектора-сессии
- iocharset= (только для Joliet, в какую кодировку преобразовывать имена
файлов из UCS-2)
- utf8 (только для Joliet, преобразовывать имена файлов из UCS-2 в utf8)
Опции монтирования udf (mount -t udf -o опции-через-запятую устройство точка-монтирования):
- dev (файловая система может содержать файлы типа символьное или блочное
устройство)
- exec (разрешить запуск программ из файловой системы)
- nodev (игнорировать файлы типа символьное или блочное
устройство)
- noexec (не разрешить запуск программ из файловой системы)
- nosuid (игнорировать биты прав файлов set-user-identifier и
set-group-identifier)
- ro
- suid (разрешить интерпретацию бит прав файлов set-user-identifier и
set-group-identifier)
- uid= (назначить всем файлам идентификатор владельца)
- gid= (назначить всем файлам идентификатор группы)
- mode= (назначить всем файлам права (восьмеричное число начинается с 0))
- unhide (показывать в каталогах скрытые и ассоциированные файлы;
могут "перекрыть" нормальные файлы, если совпадут имена)
- undelete (показывать в каталогах удалённые файлы)
- session=номер-сессии (нумеруются с 0)
- bs=2048 (размер блока)
- adinicb (default, Embed data in the inode ?)
- noadinicb (Don't embed data in the inode)
- longad (default, ?)
- shortad
- nostrict (не придираться к формату)
- iocharset= (в какую кодировку преобразовывать имена файлов из UCS-2)
- utf8 (?)
- novrs (пропустить распознавание тома для плохо сделанных дисков)
- ручное задание адресов, с 0 (для отладки?)
- anchor=256
- volume=
- partition=
- lastblock=
- ручное задание адресов, относительно корня раздела (для отладки?)
"Общепринятая" точка монтирования файловой
системы с CD-ROM: /mnt/cdrom или /media/cdrecorder или /media/имя-тома.
При использовании программы find необходимо указывать
ключ -noleaf, если файловая система записана без расширения Rock Ridge.
Программа hdparm для ATA устройств позволяет изменить скорость
вращения (ключ -E), посмотреть (-v) и изменить параметры устройства,
узнать тип и модель (-i или -I). Не все возможности доступны в режиме эмуляции
(ide-scsi).
Программа eject позволяет вытолкнуть (размонтировав)
диск из устройства (по умолчанию /mnt/cdrom);
закрыть трей (-t, не работает на ноутбучном устройстве);
выбрать слот (-c номер, нумерация с 0);
узнать поддерживаемые скорости (-X);
установить скорость вращения (-x скорость-в-попугаях, сбрасывается при смене диска).
Программа volname (пакет eject) показывает имя тома, установленного
в устройство. Его можно использовать для создания точки монтирования
с "правильным" (как в Solaris) именем (осторожно с чужими дисками!).
Аналогичного результата можно добиться командой
dd if=/dev/cdrom bs=1 skip=32808 count=32
Пакет libcdio в дополнении к библиотеке содержит набор полезных программ:
- cd-drive -i (информация о характеристиках устройства)
- cd-info [--dvd] [--iso9660] (информация о CD-DA, Video CD, томе ISO 9660;
может работать с образами в форматах bin, cue, cdrdao и NRG)
- cd-read (чтение "сырого" образа)
- iso-info [-l] (информация о томе ISO 9660)
- iso-read
Программа isosize (util-linux-ng) показывает размер файловой системы
в байтах (можно указывать /dev/cdrom или образ диска).
Монтирование образов файловой системы ISO, записанных в файл:
mount -o loop имя-файла точка-монтирования
Проигрыватели CD-DA (это старый список -
все имевшиеся у меня CD-DA давно сграблены во flac):
- gtcd (Gnome, cddb, шрифт надо настроить)
- cdplayer_applet
- workman (X11, cddb)
- workbone (term)
- xcdplayer (X11)
- cdplayer (term)
- cdp/cdplay (text)
- xplaycd
Грабители CD-DA:
Программа regionset
показывает текущий регион DVD устройства, количество смен региона, остаток, при возможности
позволяет его изменить. Имя устройства указывается первым параметром (/dev/dvd).
Просмотр DVD-Video.
Особенности конфигурации ядра (в RedHat 7.0 и выше все уже сделано за нас)
- Loopback device (файловая система внутри файла), BLK_DEV_LOOP=m, модуль - loop,
для тестирования
- ISO 9660 CDROM filesystem (включает RockRidge), обязательно встроенный
в ядро, для тестирования
- Microsoft Joliet, для тестирования
Для создания образа файловой системы ISO 9660
(расширения Rock Ridge, Juliet, HFS, Apple Extensions, El Torito, UDF) используется
программа mkisofs (пакет mkisofs-2.01.1-5 в Fedora Core 3; иногда
входит в пакеты cdrtools или cdrecord).
В 2006 году проект был форкнут и вошёл в
состав Cdrkit под именем genisoimage (версия 1.1.8 в Fedora 10).
Текущая версия (genisofs 1.1.8) не позволяет создавать многоэкстентные файлы,
соответственно файлы размером более 4GB (2GB?)
можно записывать только в режиме совместимости с UDF
(при этом они не будут читаться при монтировании в режиме ISO9660,
а также недоступен многосессионый режим).
В простейшем случае, достаточно указать имя каталога, содержимое которого
необходимо записать.
Результат выводится на стандартный вывод. Перенаправить вывод в файл
можно с помощью ключа: -o. Ключ -split-output разбивает результат на куски
размером не более 1 ГБ (имя_00, имя_01 и т.д.).
Программа позволяет указать несколько имён каталогов.
В этом случае их содержимое будет слито и помещено в общий образ.
Сами имена каталогов верхнего уровня в образ не записываются.
Опция -graft-points позволяет "пересадить" исходный файл или каталог
на указанное место в образе и переименовать при пересадке (промежуточные
каталоги в образе создаются "на ходу" с правами 0555), необходимость
пересадки определяется наличием немаскированного символа '=' в имени
исходного файла:
-graft-points полное-имя-каталога-в-образе/=исходное-имя
или
-graft-points полное-имя-в-образе=исходное-имя
Ключ -v увеличивает болтливость программы (-v -v ещё больше).
Ключ -gui тоже, но в другом виде (для интерпретации графическими оболочками).
Ключ -quiet уменьшает болтливость.
Ключ -log-file перенаправляет сообщения в указанный файл.
Ключ -print-size выдаёт число секторов, но не создаёт образ (нужен
для предварительного вычисления размера тома при записи в режиме DAO - "на лету").
Тонкости обхода исходных файлов и перемещений
- -path-list имя-файла (содержит список имён файлов и каталогов для
добавления в образ; символ "-" означает чтение со стандартного ввода)
- -m файловый-шаблон (можно указывать несколько раз; не включать в образ
файлы, простые имена которых подпадают под шаблон)
- -exclude-list содержащий-шаблоны-для-исключения-файл
- -x полный-путь (можно указывать несколько раз; не включать в образ
файлы, с указанным именем)
- -f (вместо символьных ссылок помещать в образ файлы и каталоги, на которые
они показывают; символьные ссылки без ключей -f или -r/-R просто
игнорируются)
- -cache-inodes (установлено по умолчанию; кешировать иноды, чтобы записать
один экземпляр файла с несколькими жёсткими ссылками)
- -no-cache-inodes (обязательно, если в файловой системе нет понятия иноде:
исходная ISO 9660)
- -nobak (также -no-bak; не включать в образ файлы, имена которых
заканчиваются '~', '#' или '.bak')
- -root каталог (все исходные файлы и каталоги помещать внутрь
указанного каталога в образе)
При преобразовании имён файлов
в ISO-допустимые латинские буквы преобразуются в прописные, имя обрезается
до формата 8.3. Если при этом получаются неуникальные имена, то в одном из них
последние 3 символа основы имени заменяются порядковым номером (т.е. не более
1001 дубля). Такие "упрощённые" имена будут видны программам, которые не
понимают расширений ISO 9660 или если нужное расширение не использовалось
при создании образа. Можно "слегка" нарушить ограничения на имена
- -allow-leading-dots или -ldots (разрешить именам ISO9660 начинаться с точки
вместо замены на подчёркивание)
- -allow-lowercase (разрешить именам ISO9660 включать строчные буквы)
- -allow-multidot (разрешить именам ISO9660 включать несколько точек)
- -d (не добавлять точку к ISO9660 именам файлов без точек вообще)
- -D (не соблюдать ограничение на глубину вложенности каталогов;
в версии ISO9660:1999 отменено)
- -iso-level уровень (версия ISO-9660:1999 обозначается как 4 уровень)
- -l (разрешить имена файлов до 31 символа)
- -N (не записывать номера версий файлов)
- -max-iso9660-filenames (разрешить имена файлов до 37 символа;
занимается место, предназначенное для версий файлов)
- -relaxed-filenames (разрешить в именах любые ASCII-7 символы,
кроме строчных букв)
- -no-iso-translate (не преобразовывать символы ~ и #)
- -U (записывать имена файлов "как есть", без всяких ограничений)
Но лучше ограничений не нарушать, а использовать
расширения для записи "недеформированных" имён файлов и их атрибутов:
- -R (создавать записи расширения Rock Ridge)
- -r (создавать записи расширения Rock Ridge со сброшенными правами
доступа к файлам; uid=gid=0; все файлы и каталоги читаемы всеми;
если файл исполняем, то всеми; прав на запись нет ни у кого;
биты специальных режимов сброшены)
- -z (создаёт образ со сжатыми файлами,
которые будут разжиматься "на лету";
каталог с исходными файлами требуется предварительно сжать
утилитой mkzftree;
для чтения требуется ядро выше 2.4.14 или утилита mkzftree;
используется расширение к Rock Ridge (элементы типа ZF),
так что использование -r/-R обязательно)
- -T (создавать файлы TRANS.TBL в каждом каталоге, содержащие
информацию о "полных" именах файлов, символьных ссылках и файлах устройств)
- -table-name имя-файла (вместо TRANS.TBL)
- -hide-rr-moved (использовать для перемещённых каталогов Rock Ridge
имена .rr_moved вместо привычных RR_MOVED; для полной невидимости см.
ключ -D)
- -dir-mode права-доступа (как в mode(2); автоматически включает
создание расширений Rock Ridge; замещает права доступа к каталогам
в создаваемом образе на указанные)
- -file-mode права-доступа (как в mode(2); автоматически включает
создание расширений Rock Ridge; замещает права доступа к файлам
в создаваемом образе на указанные)
- -new-dir-mode права-доступа (0555; как в mode(2); права доступа для
каталогов, создаваемых "на лету")
- -gid gid (автоматически включает
создание расширений Rock Ridge; замещает gid файлов и каталогов
в создаваемом образе на указанный)
- -uid uid (автоматически включает
создание расширений Rock Ridge; замещает uid файлов и каталогов
в создаваемом образе на указанный)
- -J (создавать Joliet SVD; имена в UCS-2/UTF-16, до 64 символов;
не переносит несколько файлов с
одним и тем же именем, получающиеся после слияния нескольких
исходных каталогов)
- -ucs-level уровень-UCS-2 (для Joliet SVD)
- -joliet-long (нарушать ограничение Joliet и записывать имена файлов
до 103 символов UTF-16)
Ключи для обеспечения совместимости:
- -pad (дополнить образ пустыми 150 секторами, а то у некоторых ОС
предварительное чтение перескакивает за границу тома;
с некоторой версии установлен по умолчанию)
- -no-pad
- -dvd-video (создавать файловую систему UDF, совместимую с DVD-Video;
точнее UDF Bridge; файлы сортируются по именам (только прописные
латинские буквы) и создаются промежутки между файлами)
- -udf (UDF Bridge; alfa версия, гибрид с Joliet, нет поддержки uid/gid, прав доступа и пр.)
- -allow-limited-size (позволяет создавать гибридный ISO/UDF образ,
в котором файлы с размером более 2ГБ нормально читаются в режиме UDF;
в режиме ISO размер файлов выглядит урезанным до 2ГБ)
Управление кодировкой имён файлов
- -input-charset кодировка-имён-исходных-файлов (полный список
по команде mkisofs -input-charset help; UTF-8 и UTF-16 нет,
есть только iso8859-1, cp866, koi8-r; можно определить свою
8-битную кодировку; кодировка с именем default означает отсутствие
перекодировки; для перекодировки в Joliet можно указывать все имена
кодировок, доступные по "iconv -l", но тогда нельзя использовать Rock Ridge
и ISO9660v2)
- -output-charset кодировка-имён-файлов-в-RockRidge
- -jcharset кодировка ("-J -input-charset кодировка")
Управление невидимостью файлов в образе (каталоги
тоже можно скрывать, но требуется аккуратность в сочетании слияния и
одержания... виноват, невидимости (см. README.hide)):
- -hide файловый-шаблон (можно указывать несколько раз; не включать файлы
в PVD)
- -hide-list содержащий-шаблоны-файл
- -hidden файловый-шаблон (помечать файлы в PVD как невидимые)
- -hidden-list содержащий-шаблоны-файл
- -hide-joliet файловый-шаблон (не включать файлы в SVD для Joliet)
- -hide-joliet-list содержащий-шаблоны-файл
- -hide-joliet-trans-tbl (всё равно TRANS.TBL содержит реальные и
ISO-совместимые имена, а не имена в стиле Joliet)
- -hide-rr-moved (переименовать RR_MOVED в .rr_moved в пространстве имён Rock Ridge)
Ключи для занесения информации в
дескриптор тома (очень полезно задать имя тома):
- -V имя-тома (ID, метка, до 32 символов)
- -abstract имя-файла-аннотации (до 37 символов)
- -A идентификатор-приложения (до 128 символов)
- -biblio имя-файла-библиографии (до 37 символов)
- -copyright имя-файла-копирайта (до 37 символов)
- -publisher идентификатор-публикатора (e-mail, телефон, до 128 символов)
- -p идентификатор-обработчика-данных (e-mail, телефон, до 128 символов)
- -sysid идентификатор-системы (до 32 символов)
- -volset имя-набора-томов (до 128 символов)
- -volset-size размер-набора-томов (не поддерживается больше 1)
- -volset-seqno номер-тома-в-наборе
mkisofs позволяет создавать загружаемые диски в
соответствии со спецификацией El Torito:
- -c имя-загрузочного-каталога (создаётся на лету, не должен конфликтовать
с исходной файловой системой)
- -eltorito-alt-boot (начать описание новой группы загрузочных образов, до 63 групп)
- -b файл-с-загрузочным-образом-эмулируемого-флоппи (д.б. внутри
создаваемой файловой системы; тип флоппидисковода определяется по размеру
файла, так что он д.б. ровно 1200, 1440 или 2880 КБ)
- -hard-disk-boot (файл является образом не флоппи, а жесткого диска;
эмулировать надо жёсткий диск; MBR должен содержать один раздел)
- -no-emul-boot (не надо ничего эмулировать при загрузке)
- -no-boot (не загружаться, только создавать виртуальное устройство)
- -boot-load-seg сегмент-памяти-для-загрузчика (для -no-emul-boot)
- -boot-load-size число-виртуальных-секторов (по 512 байт, лучше делать
кратным 4)
- -boot-info-table (якобы положено записывать 56-байт информации о структуре
CD, начиная с 8-го байта загрузочного образа; в описании своего
El Torito я такого не нашёл, но mkisofs действительно записывает
внутрь файла, который указан в качестве загрузочного образа - именно
прямо внутрь исходного файла, а не в создаваемый образ для прожигания!)
- -alpha-boot, -hppa-bootloader, -hppa-cmdline, -hppa-kernel-32,
-hppa-kernel-64, -hppa-ramdisk, -mips-boot, -mipsel-boot,
-sparc-boot, -sparc-label, -sunx86-boot, -sunx86-label
(про управление загрузочными образами для других архитектур см. документацию)
- -G файл-помещаемый-в-системную-область-тома
Например, создание первого (загрузочного) диска для
RH 7.3:
mkisofs -A 'Red Hat Linux/i386 7.3' -V 'Red Hat Linux/i386 7.3' -J -R -v -x boot.cat -m TRANS.TBL -T -b dosutils/autoboot/cdboot.img -c boot.cat -o куда .
Создание первого (загрузочного)
диска для RH 8.0 и более новых:
mkisofs -A 'Red Hat Linux/i386 8.0' -V 'Red Hat Linux/i386 8.0' -J -R -v -m TRANS.TBL -T -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o куда .
В кеше гугла, наверное, ещё можно найти статью
создание загружаемого DVD для RedHat 8.0 (вкратце: слить все диски в один каталог,
в .discinfo поместить список дисков через запятую, разрешить запись в isolinux.bin,
создать .iso как описано выше и записать; для записи контрольной суммы на диск
требуются дополнительные усилия) или адаптировать готовый
скрипт
(для встраивания md5 в iso требуется пакет anaconda-runtime;
внедрение md5 - /usr/lib/anaconda-runtime/implantisomd5;
проверка md5 - /usr/lib/anaconda-runtime/checkisomd5).
mkisofs позволяет записывать мультисессионные диски
(не рекомендуется делать файловую систему с расширением Joliet, но без
расширения Rock Ridge; имеются некоторые другие проблемы):
- -С первый-сектор-последней-сессии,первый-сектор-следующей-сессии
(извлекаются с помощью cdrecord/wodim -msinfo; в сочетании с ключом -М получается
продолжение предыдущей сессии; без ключа -М создаётся образ для
второй сессии CDextra (в первой сессии - звуковые дорожки);
получившийся образ не монтируется loop-устройством, чтобы создать
образ для тестирования (а вот его нельзя прожигать!) необходимо
указать 0 в качестве второго параметра)
- -M образ-предыдущей-версии (вместо имени файла можно указать адрес
устройства как для cdrecord или wodim)
- -dev адрес-устройства (см. -M)
- -check-oldnames (проверять имена файлов из старых сессий на соответствие
ограничениям ISO 9660; в любом случае проверяется, чтобы длина имени
не превышала 31 символ)
- -check-session имя-файла (сокращённая запись для:
-M имя-файла -C 0,0 -check-oldnames)
- -force-rr (не использовать записи Rock Ridge из предыдущей сессии;
борьба с дефективными образами от NERO)
- -no-rr (в чём разница?)
- -old-root каталог (если предыдущая сессия была создана с использованием
ключа -root)
Для сортировки содержимого файла на диске (не имён
в каталогах!) используется ключ сортировки (-sort имя-файла).
Файл для каждого исходного файла должен содержать строку с именем и
приоритетом (чем больше число, тем ближе к началу диска).
Если хотите, чтобы диск с некрупными файлами просматривался быстро,
то содержимое файлов должно лежать в том же порядке, что и выдаются
имена файлов при просмотре оглавления.
Поддержка jigdo (Jigsaw Download):
- -jigdo-jigdo имя-файла (метаинформация для jigdo: .jigdo)
- -jigdo-template имя-файла
- -jigdo-min-file-size размер (1024 байта)
- -md5-list имя-файла (MD5 суммы, размеры и имена файлов для помещения в .jigdo)
- -jigdo-force-md5 шаблон (суммы MD5 этих файлов обязаны быть в файле -md5-list.)
- -jigdo-exclude шаблон (эти файлы не помещать в .jigdo)
- -jigdo-map шаблон
- -jigdo-template-compress gzip|bzip2
Перед записью не мешает протестировать получившийся образ:
mount [ -t iso9660 ] -o ro,loop образ точка-монтирования
Некоторые параметры mkisofs/genisoimage может брать из файла
.mkisofsrc/.genisoimagerc (сначала ищется из переменной окружения MKISOFSRC/GENISOIMAGERC,
затем в текущем каталоге, затем в домашнем каталоге,
затем в /etc/genisoimagerc,
затем в каталоге, содержащей программу mkisofs/genisoimage):
- ABST=имя-файла-аннотации
- APPI=идентификатор-приложения
- BIBL=имя-файла-библиографии
- COPY=имя-файла-копирайта
- PREP=идентификатор-обработчика-данных (e-mail, телефон)
- PUBL=идентификатор-публикатора (e-mail, телефон)
- SYSI=идентификатор-системы
- VOLI=имя-тома
- VOLS=имя-набора-томов
Ключи HFS и Apple Extensions оставлены в качестве домашнего
упражнения ;p).
Фиктивный каталог для хранения информации о
перемещённых каталогах для расширения Rock Ridge называется RR_MOVED.
Утилиты
- devdump [ -i содержащий-образ-файл ] [ dev=адрес-как-в-cdrecord/wodim ]
(интерактивный поблочный шестнадцатеричный дамп образа или диска;
управление:
b - вперёд; a - назад; g - к указанному блоку; f - поиск; + - повтор
поиска; q - выход)
- isodump [ -i содержащий-образ-файл ] [ dev=адрес-как-в-cdrecord/wodim ]
(интерактивный дамп каталога - номер тома, адрес сектора и длина
экстентов файлов, флаги, имя файла, элементы SUSP (Rock Ridge);
управление такое же; осторожно - пытается любой сектор интерпретировать
как экстент каталога)
- isovfy [ -i содержащий-образ-файл ] [ dev=адрес-как-в-cdrecord/wodim ]
(тестирование структуры образа)
- isoinfo [ -i содержащий-образ-файл ] [ dev=адрес-как-в-cdrecord/wodim ]
(аналог ls):
- -N начальный-сектор
- -T начальный-сектор-сессии
- -d (выдавать информацию из PVD)
- -R (выдавать информацию Rock Ridge)
- -p (выдавать информацию из таблицы путей)
- -J (выдавать информацию из SVD Joliet; -j charset)
- -f (формат вывода, как у "find . -print")
- -l (формат вывода, как у "ls -lR")
- -s (выдавать размер в секторах)
- -debug (дополнительная информация)
- -x имя-файла (извлечь файл)
- isodebug [ -i содержащий-образ-файл ] [ dev=адрес-как-в-cdrecord/wodim ]
- dirsplit (вспомогательная утилита, распределяющая большое количество файлов
на тома примерно равного размера)
Утилита mkzftree
(пакет zisofs-tools) необходима для создания образа из сжатых файлов,
которые будут "разжиматься" на лету. В основном, используется для
создания "Live CD" (rpm и картинки не сжимаются :().
Первый параметр указывает исходный каталог.
Второй параметр указывает вновь создаваемый каталог.
Все файлы из исходного каталога сжимаются и записываются в создаваемый
каталог. Атрибуты файлов сохраняются (кроме ctime).
Исходный каталог не изменяется. Имя создаваемого каталога
надо указать программе mkisofs/genisoimage (с ключом -z).
Если необходимо поместить в образ
несжатые файлы (например, загрузочный образ ;), то их надо переместить
в отдельный каталог до сжатия и указать отдельно программе mkisofs.
Ключи:
- --verbose
- --quiet
- --force (сжимать даже те файлы, которые увеличиваются в размере)
- --level уровень-сжатия (9; от 1 до 9)
- --uncompress
- --parallelism число-потоков
- --one-filesystem (создавать заглушки в точках монтирования)
- --strict-one-filesystem (даже заглушек не оставлять)
- --local (не обрабатывать подкаталоги, но создавать)
- --strict-local (не обрабатывать подкаталоги и не создавать)
- --file (обрабатываем файл, а не каталог)
- --sloppy (не печалиться о невозможности установить правильные права
и пр. в создаваемый каталог; полезно, если исходный каталог
принадлежит не вам)
Пакет udftools содержит программы записи в пакетном режиме, позволяющие
- инициализировать файловую систему UDF - mkudffs;
первым параметром указывается устройство или файл,
который будет содержать файловую систему;
вторым параметром можно указать размер файловой системы в блоках;
ключи:
- --blocksize=1024|2048|4096 (2048)
- --udfrev=версия-стандарта (0x0201, 0x0200, 0x0150, 0x0102)
- --lvid=имя-логического-тома
- --vid=имя-тома
- --vsid=имя-набора-томов
- --fsid=имя-набора-файлов
- --media-type=hd|dvd|dvdram|worm|mo|cdrw
- --space=freedbitmap|freedtable|unallocbitmap|unalloctable
- --u8 (имена файлов в UTF-8?)
- --u16 (имена файлов в UTF-16)
- --utf8 (имена файлов в UTF-8)
- проверять и чинить файловую систему UDF - udffsck
- обслуживание устройств и носителей - cdrwtool; ключи:
- -d /dev/sr0
- -q (очистить диск, форматировать и записать UDF)
- -i (информация о носителе)
- -g (текущие параметры записи)
- -u число-блоков (создать UDF указанного размера)
- -m смещение-в-блоках
- -b full|fast (режим очистки носителя)
- -f имя-файла (записать файд?)
- -c номер (закрыть дорожку)
- -r номер (зарезервировать дорожку)
- -s (установить параметры записи)
- -v версия-стандарта (0x0201, 0x0200, 0x0150, 0x0102)
- -t скорость-записи-в-попугаях
- -w режим (mode1 или mode2?)
- -p тип (тип пакетов: 0 - переменный размер, 1 - фиксированный размер)
- pktsetup позволяет ассоциировать виртуальное устройство
пакетной записи с реальным устройством (пакетное устройство
можно монтировать и использовать в режиме записи):
pktsetup пакетное-устройство /dev/sr0
pktsetup -d пакетное-устройство
Пример создания и наполнения образа файловой системы UDF:
mkudffs --lvid=имя-тома --vid=имя-тома --media-type=dvd /tmp/test.udf 2294922
mount -o loop -t udf /tmp/test.udf /media/udf
cp ... /media/udf
umount /media/udf
cdrecord -v -dao /tmp/test.udf
К сожалению, летом 2006 года что-то поломали в монтировании udf на запись
м пришлось включать запись дополнительным перемонтированием:
mount -o remount,rw /media/udf
Затем преднамеренно отключили возможность создавать файлы размером более 1GB,
а это единственное для чего я использовал UDF (для записи HDTV-фильмов на двухслойные
болванки). Включили только весной 2007 (я это заметил в FC6 на ядре kernel-2.6.20-1.2952.fc6).
Подготовленный (или позаимствованный) образ файловой системы
надо ещё суметь записать (прожечь) на заготовку (болванку) CD/DVD.
Основной (а долгое время единственной) программой для записи
была cdrecord, программа с тяжёлой судьбой. Её основной разработчик
(Joerg Schilling) некоторое время назад (1999) собрал в один пакет (cdrtools)
все программы, необходимые для работы с CD (mkisofs, mkhybrid, cdda2wav,
cdrdao, cdrecord) и всё было замечательно, пока он не захотел заработать
на её версии cdrecord-ProDVD, которая позволяла записывать не только
на CD-R/CD-RW, но и на DVD-R/DVD-RW. Для этого он встроил в программу защиту
от записи образа размером более 1 ГБ
(с выдачей личного ключа, снимающего защиту, для каждой копии) и даже
организовал раздачу временно работающей ограниченной версии cdrecord-ProDVD
для личного пользования (скорость записи 1х). Дело кончилось понятно
чем - многочисленныим форками. Например, Red Hat "обнаружила" (или сама
организовала ;) сайт с
dvdrecord, дополненной
возможностью записи на DVD-R/DVD-RW старой версией cdrecord
(dvdrecord-0.1.2 вошла в состав RedHat 8.0). Аналогичная история
произошла с SuSE (ссылка потерялась) и
Mandrake.
Единственное улучшение в cdrecord-ProDVD относительно этих "мутантов",
которое я заметил - выдача обильной полезной информации об устройстве и
болванке. Затем Red Hat и Fedora Core поставлялись с пакетом
cdrecord (mkisofs и cdda2wav образуют отдельные пакеты), со встроенной
возможностью записывать на DVD-R/DVD-RW. При этом выдаётся предупреждение
от Joerg Schilling, что замечена работа "хакнутой этими козлами из SuSE"
программы и он ответственности за последствия не несёт. В общем, он
был сильно недоволен и продолжил борьбу. Сайт, где он
обитал много лет (оказывается, что fhg.de расшифровывается как
"Fraunhofer Institut ..."), исчез и будущее проекта cdrtools непонятно.
В 2006 Joerg Schilling перевёл свой проект под лицензию CDDL
(несовместимую с GPL), что было последней каплей для разработчиков Debian,
которые форкнули последнюю GPL версию cdrtools в cdrkit,
частями которого и являются genisoimage и wodim (Writes Optical Media).
Кстати, одна из внутренних библиотек называется librols: LIB Remains Of LibSchily.
Старые версии cdrecord работают с ATAPI CD-R/CD-RW
только в режиме эмуляции SCSI (см, главу про модули),
т.е. необходимо загрузить модуль ide-scsi (после этого надо обращаться
не к /dev/hd?, а к /dev/scd?) или загружаться со строкой hdc=ide-scsi:
- modprobe ide-scsi (нужны права root)
- он должен найти CD-ROM и все про него рассказать (на syslog), создать
sr-устройство (у меня sr0 на scsi0 (chanel 0, id 0, lun 0),
даже оказался scsi3-mmc drive:
24x/24x writer cd/rw xa/form2 cdda tray)
- появились устройства (/proc/devices): char 21 (sg) и block 11 (sr)
Новые версии позволяют работать без эмуляции SCSI
в режимах ATA и ATAPI (ATA не имеет аналога для флага disconnect, поэтому
не стоит подсоединять источник данных и устройство записи на общую шину;
однако см. опцию -immed).
В новых ядрах PATA и SATA устройства представлены
как SCSI устройства (/dev/sr0) и соответсвующим образом к ним надо обращаться.
В первую очередь необходимо определить какие
типы транспортов SCSI поддерживает ваша версия cdrecord/wodim,
от этого зависит формат имени устройства при использовани cdrecord/wodim:
wodim dev=help
Возможные транспорты:
- sg (Generic transport independent SCSI), имя устройства в виде: bus,target,lun
- ATA, имя устройства в виде: ATAPI:bus,target,lun
- ATA с использованием sg, имя устройства в виде: ATA:bus,target,lun
- RSCSI (Remote SCSI), имя устройства в виде: REMOTE:rscsi@имя-хоста:bus,target,lun
Следующим шагом необходимо определить подходящие устройства
(в устройстве не должно быть смонтировано файловых систем, иначе wodim пропустит устройство
при сканировании) и запомнить их адреса, выполнив либо команду получения системных имён блочных устройств
(их можно в дальнейшем указывать явно: "wodim dev='/dev/scd0'")
wodim --devices
0 dev='/dev/scd0' rwrw-- : 'ASUS' 'DRW-1814BLT'
или "традиционным" способом, получая 3 числа и префикс
(их можно в дальнейшем указывать явно: "wodim dev=3,0,0")
cdrecord -scanbus
или
wodim -scanbus
SATA DVD-RW
scsibus3:
3,0,0 300) 'ASUS ' 'DRW-1814BLT ' '1.04' Removable CD-ROM
ATAPI DVD-RW в режиме эмуляции SCSI
scsibus0:
0,0,0 0) '_NEC ' 'DVD_RW ND-3520A ' '1.04' Removable CD-ROM
USB flash drive в режиме эмуляции SCSI
scsibus1:
1,0,0 100) 'JetFlash' 'TS1GJF2A ' '1.00' Removable Disk
ATAPI DVD/CD-RW без эмуляции SCSI
scsidev: 'ATA'
devname: 'ATA'
Driveropts: 'burnfree'
SCSI buffer size: 32768
scsibus1:
1,0,0 100) 'MATSHITA' 'UJDA750 DVD/CDRW' '1.50' Removable CD-ROM
В последнем случае имя устройства будет выглядеть как:
ATA:1,0,0
или (может не поддерживать DMA, но выше вероятность, что заработает):
ATAPI:1,0,0
В большинстве случае единственное устройство
будет обнаружено автоматически и его адрес в командах указывать необязательно.
Односессионный диск с данными
записывается командой (используйте имя файла "-" для обозначения стандартного ввода):
cdrecord -v dev=адрес-устройства образ-файловой-системы
или
wodim -v образ-файловой-системы
Часто используемые ключи (некоторые без символа '-'!):
- speed=скорость
- blank=fast (очистка болванки CD-RW перед записью)
- -dummy (имитирует процесс записи, что позволяет проверить её
возможность на указанной скорости)
- -force (позволяет иногда вернуть к жизни болванку CD-RW)
Формат вызова (некоторые ключи не начинаются с '-'!):
wodim [ общие-опции ] [dev=адрес-устройства] [ опции-дорожки-1 ] дорожка-1 ...
Если адрес устройства не задан явно, то программа
пытается извлечь его из переменной окружения CDR_DEVICE. Если адрес
устройства является идентификатором, то он рассматривается как метка
устройства для поиска в /etc/cdrecord.conf или /etc/wodim.conf.
Общие опции, управляющие выводом сообщений:
- -version
- -v (увеличить болтливость; может быть несколько)
- -V (увеличить болтливость транспортного уровня; может быть несколько)
- -d (увеличить уровень отладочной печати; может быть несколько)
- debug=уровень-отладочной-печати
- kdebug=уровень-отладочной-печати-ядра
- -silent (-s; не выводить статус ошибочных SCSI команд)
Общие опции, задающие режим получения информации:
- -scanbus (сканировать все обнаруженные SCSI шины и выдать адреса
и названия устройств)
- -msinfo (получение информации о ранее записанных на диск сессиях для
mkisofs/genisoimage)
- msifile=имя-файла (получение информации о ранее записанных на диск сессиях для
mkisofs/genisoimage и запись её в файл)
- -toc (выдать TOC диска или информацию из PMA для CD-ROM или CD-R)
- -atip (выдать информацию из ATIP для CD-ROM или CD-R)
- -prcap (выдать информацию о SCSI-3/mmc устройстве (mode page 0x2A);
kB = 1000, KB = 1024)
- -inq (выдать краткую информацию об устройстве)
Общие опции, управляющие ходом процесса и
обработкой ошибок:
- fs=размер-буфера-программы (формат, как у dd;
если не задано, то из переменной
окружения CDR_FIFOSIZE; по умолчанию - 4m;
более 16m не выносит старое ядро Linux (в FC3 SHMMAX=32МБ),
а больше 4m не выносит старое устройство HP 8100)
- ts=максимальный-размер-блока-данных-команды-SCSI (63k)
- -force (продолжать работу после некоторых ошибок устройства;
позволяет иногда вернуть к жизни болванку CD-RW)
- -immed (немедленно освобождать шину, не дожидаясь окончания выполнения
некоторых команд (load, eject, blank, close_track, close_session);
полезно для систем, у которых диск и CD-R на одной ATA шине, или
SCSI контроллер не умеет делать disconnect; такие системы "замирают"
на время очистки или фиксации или дополнения минимального объёма на DVD;
этот же ключ (требуется -v) пытается делать маленькие паузы при записи,
что должно позволить считать данные с диска на той же ATA шине)
- minbuf=процент (при каком наполнении буфера устройства делать маааленькие
паузы при записи)
- -dummy (устройство работает, не включая лазера; для тестирования)
- -waiti (ждать появления первых данных на входе перед началом работы
с устройством; зачем-то нужно при записи многосессионных дисков)
- -load (загрузить диск и завершить работу)
- -lock (загрузить диск, заблокировать дверцу и завершить работу)
- -eject (после записи выбросить диск)
- speed=множитель (одинарная скорость - 150 KB/s для CD, 1385 kB/s для DVD;
если не задано, то извлекает из описания устройства в /etc/cdrecord.conf или /etc/wodim.conf;
если и там нет, то из переменной окружения CDR_SPEED;
если и там нет, то из записи CDR_SPEED= в /etc/cdrecord.conf или /etc/wodim.conf;
в противном случае на усмотрение устройства (обычно максимально возможная скорость),
скорость 0 - минимально возможная скорость)
- blank=способ-очистки-CD-RW (иногда необходимо использовать ключ -force)
- help (выдать список способов)
- all (очистить весь диск; очень медленно)
- fast (очистить PMA, TOC, pregap)
- track (очистить последнюю дорожку)
- unreserve (?)
- trtail (очистить конец дорожки)
- unclose (отменить закрытие последней сессии)
- session (очистить последнюю сессию)
- -format (форматировать DVD+RW; новый DVD+RW форматируется перед
записью автоматически)
- gracetime=секунд (10; не менее 2; длина паузы перед записью)
- timeout==секунд (40; если выдаётся сообщение об ошибке записи по причине
истечения времени ожидания, то можно попробовать его увеличить)
- driver=имя (вообще-то должен определяться автоматически):
- help (выдать список драйверов с описаниями)
- mmc_cd_dvd (generic SCSI-3/mmc CD/DVD устройство с поддержкой
нескольких типов носителей, определить тип носителя не удалось;
втягивает трей, определяет тип носителя и загружает соответствующий
драйвер)
- mmc_cdr (generic SCSI-3/mmc устройство с поддержкой только CD
или установлен носитель CD)
- mmc_mdvd
- mmc_dvd (generic SCSI-3/mmc-2 DVD-R/DVD-RW и установлен носитель DVD;
нет режима TAO)
- mmc_dvdplus (generic SCSI-3/mmc-3 DVD+R/DVD+RW;
втягивает трей, определяет тип носителя и загружает соответствующий
драйвер)
- mmc_dvdplusr (для DVD+R; необходимо выбирать режим -dao; на самом деле
используется гибрид пакетной записи и TAO)
- mmc_dvdplusrw (для DVD+RW; необходимо выбирать режим -dao; на самом деле
пакетная запись)
- множество драйверов для девиантных устройств
- -checkdrive (проверить наличие драйвера для устройства и завершить работу)
- driveropts=список-опций-драйвера-через-запятую
- help (выдать список доступных опций; требуется указать dev=
и -checkdrive)
- burnfree (по умолчанию был выключен, теперь включён)
- noburnfree
- varirec=смещение (смещение мощности лазера от автоматически выбранной;
от -2 до 2; только Plextor и только скорость 4)
- gigarec=множитель (от 0.6 до 1.4; исменение плотности дорожек и ёмкости диска;
только Plextor и только скорость до 8)
- audiomaster (только Yamaha; дырки пишутся "крупным шрифтом"; только SAO;
ёмкость диска уменьшается)
- forcespeed (записывать на заказанной скорости, даже если устройство
распознаёт плохое качество носителя и его возможное разрушение)
- noforcespeed
- speedread (читать на максимальной скорости, даже если устройство
не уверено в надёжности носителя)
- nospeedread
- singlesession (отключить обработку многосессионных дисков при
чтении; помогает прочитать неправильно сделанные диски;
установить до того, как вставить диск!)
- nosinglesession
- hidecdr (получившийся диск имитирует CD-ROM, скрывая CD-R происхождение)
- nohidecdr
- tattooinfo (для Yamaha DiskT@2; использовать совместно с -checkdrive;
выдаёт информацию о размере картинки)
- tattoofile=имя-файла (для Yamaha DiskT@2; использовать совместно с
-checkdrive; запись картинки на диск)
- -setdropts (установить указанные в driveropts= параметры и завершить
работу)
- -reset (произвести сброс шины)
- -abort (послать команду прерывания предыдущей операции; может
потребоваться дополнительно сделать -reset)
Общие опции, задающие формат диска и режим записи:
- -dao (Disk At Once; можно называть -sao (Session At Once);
только для MMC устройств, поддерживающих SAO; размер каждой
дорожки должен быть известен до записи)
- -tao (Track At Once; раньше был по умолчанию, теперь надо указывать явно)
- -raw (-raw96r?)
- -raw96r (позволяет заполнить произвольными данными все 2352 байта
сектора и 96 сырых байт субканалов P-W; компьютер выполняет
часть работы устройства, вычисляя из обычного 2048 байтового сектора
необходимые контрольные суммы и прочие оформительские штучки;
размер каждой дорожки должен быть известен до записи)
- -raw96p (позволяет заполнить произвольными данными все 2352 байта
сектора и 96 упакованных байт субканалов P-W; компьютер выполняет
часть работы устройства, вычисляя из обычного 2048 байтового сектора
необходимые контрольные суммы и прочие оформительские штучки;
при возможности лучше использовать -raw96r;
размер каждой дорожки должен быть известен до записи)
- -raw16r (позволяет заполнить произвольными данными все 2352 байта
сектора и 16 сырых байт субканалов P-Q; этого недостаточно для
записи CD-Text и т.п., но дешёвые устройства не поддерживают
режим -raw96r; компьютер выполняет
часть работы устройства, вычисляя из обычного 2048 байтового сектора
необходимые контрольные суммы и прочие оформительские штучки;
размер каждой дорожки должен быть известен до записи)
- -clone (запись образа, созданного "readcd/readom -clone"; требует режима
-raw96r (предпочтительно) или -raw16)
- -multi (должен быть при записи всех сессий, кроме последней;
при записи TOC обеспечивает ссылку на следующую область;
тип дорожки по умолчанию устанавливается XA mode 2 form 1, размер
сектора 2048 байт; см. опции -C и -M у genisoimage)
- -fix (только фиксировать диск, т.е. записать TOC из PMA)
- -nofix (не фиксировать диск после записи)
- -overburn (использовать часть выводной зоны CD-R для записи дополнительной
информации; до 13 МБ; некоторые устройства не позволяют этого;
некоторые - только в режимах SAO или RAW)
- -ignsize (не проверять перед записью достаточность размера носителя)
- -useinfo (использовать информацию из *.inf файлов, ассоциированных
со звуковыми записями, для установки значения pregap для дорожек
(cdda2wav/icedax))
- -packet (запись в пакетном режиме; как это использовать?;
pktsize=; -noclose)
- mcn=Media-Catalog-Number
- -text (запись CD-Text; *.inf файлы, сделанные cdda2wav/icedax (-useinfo),
или CUE sheet (cuefile=))
- textfile=имя-файла (образец для подражания можно получить по команде
"cdrecord -vv -toc")
- cuefile=имя-файла (информация о структуре диска берётся из CUE sheet
файла, совместимого с CDRWIN; только в режиме -dao)
Опции, задающие формат следующей дорожки (следующих
дорожек), должны быть расположнеы после всех общих опций:
- -audio (CD-DA: стерео, 16 бит, 44100 отсчётов/сек; MSB левого канала,
LSB левого, MSB правого, LSB правого и т.д., целое число секторов по
2352 байта; файлы .au и .wav преобразуются на лету)
- -swab (в звуковом потоке менять байты местами - MSB/LSB)
- isrc=ISRC_number
- index=список-чисел-через-запятую (задаёт индекс дорожки в 1/75 секунды)
- -preemp, -nopreemp, -copy, -nocopy, -scms (флажки для звуковых дорожек)
- -data (CD-ROM mode 1; в этом режиме запиь идёт по умолчанию)
- -mode2 (CD-ROM mode 2; 2336 байт на сектор)
- -xa (CD-ROM XA mode 2 form 1; 2048 байт на сектор; XA подзаголовок
формируется устройством)
- -xa1 (CD-ROM XA mode 2 form 1; 2056 байт на сектор; XA подзаголовок
берётся из входных данных)
- -xa2 (CD-ROM XA mode 2 form 2; 2324 байт на сектор; XA подзаголовок
формируется устройством)
- -xamix (CD-ROM XA mode 2 form 1 или 2; 2332 байт на сектор; XA подзаголовок
берётся из входных данных; контрольные суммы и пр. берутся из входных
данных)
- -cdi (тип TOC устанавливается равным CDI)
- -isosize (определять размер дорожки из структуры образа ISO-9660
во входных данных, а не из размера файла)
- -pad (дописать в конце дорожки 15 секторов нулей)
- -nopad (по умолчанию)
- padsize=15s (задание размера дополнения; сбрасывается в 0 на следующей
дорожке)
- tsize=размер-дорожки
Переменные окружения:
- CDR_DEVICE= (адрес устройства или метка из /etc/cdrecord.conf или /etc/wodim.conf)
- CDR_SPEED=
- CDR_FIFOSIZE=
- CDR_FORCERAWSPEED (устанавливается максимальная скорость записи,
которую способен обеспечить процессор в формате RAW)
- CDR_FORCESPEED (устанавливается максимальная скорость записи,
которую способен обеспечить DMA канал)
Перед началом работы cdrecord читает параметры из
файла /etc/cdrecord.conf (wodim из /etc/wodim.conf),
который может содержать установки переменных
- CDR_DEVICE= (адрес устройства или метка из /etc/cdrecord.conf или /etc/wodim.conf)
- CDR_SPEED=
- CDR_FIFOSIZE=
- CDR_MAXFIFOSIZE=
- описание конкретного устройства: поля разделяются табуляциями
- имя устройства и знак "="
- адрес устройства (или -1)
- скорость записи (или -1)
- размер FIFO буфера (или -1)
- параметры для driveropts (или "")
Например (про табуляции не забудьте!):
CDR_DEVICE=nec3520
CDR_FIFOSIZE=4m
nec3520= 0,0,0 -1 -1 burnfree
Теперь записывать можно так:
mkisofs имя-каталога | cdrecord -
или
genisoimage -R имя-каталога | wodim -
Мда... А я когда-то писал длиннюююющий скрипт, который
разбирался с типом устройства, выгружал, загружал нужные модули
(читать диск надо было в режиме ide cdrom, а записывать в режиме ide-scsi),
определял тип болванки и допустимую скорость.
Утилита readcd/readom позволяет прочесть диск для
его последующего клонирования. Адрес устройства задаётся параметром
dev=адрес точно так же, как в программе cdrecord/wodim. Если не указать имя файла
результата (ключ f=), то утилита переходит
в интерактивный режим (большинство команд не работает).
Общие опции, управляющие выводом сообщений:
- -version
- -v (увеличить болтливость; может быть несколько)
- -V (увеличить болтливость транспортного уровня; может быть несколько)
- -d (увеличить уровень отладочной печати; может быть несколько)
- debug=уровень-отладочной-печати
- kdebug=уровень-отладочной-печати-ядра
- -silent (-s; не выводить статус ошибочных SCSI команд)
- -overhead (измерить время, требуемое на обработку самих SCSI команд)
- meshpoints=отсчётов (вывести скорости чтения в указанном количестве
точке для построения в дальнейшем графика)
- -factor (выводить скорость в единицах 1х)
Общие опции, управляющие ходом процесса и
обработкой ошибок:
- timeout==секунд (40; если выдаётся сообщение об ошибке записи по причине
истечения времени ожидания, то можно попробовать его увеличить)
- speed=множитель (одинарная скорость - 150 KB/s для CD, 1385 kB/s для DVD;
если не задано, то читать с макимальной скоростью)
- ts=максимальный-размер-блока-данных-команды-SCSI (256k)
- -noerror (не останавливаться при большом количестве неисправимых ошибок чтения)
- -nocorr (перевести устройство на время чтения в режим игнорирования
неисправимых ошибок ECC/EDC; это могут быть не ошибки, а защита от копирования)
- retries=число-попыток-чтения (128!)
Общие опции, управляющие источником и получателем
информации:
- f=имя-файла-результата (или источника при записи; имя файла "-"
означает стандартный ввод или вывод)
- sectors=от-до (нумерация от 0; последний сектор интервала не считывается)
- -notrunc (не обрезать выходной файл перед записью)
Общие опции, задающие формат диска и режим работы:
- -c2scan (сканирование в поиске ошибок уровня C2, неприменимо для DVD;
процессор загружается полностью; устройство должно иметь такую
возможность: cdrecord -prcap)
- -w (запись на устройство вместо чтения; для DVD-RAM?)
- -fulltoc (оглавление диска в шестнадцатеричном формате)
- -clone (читает CD в "сыром" виде, т.е. со всеми подканалами и служебной
информацией; оглавление диска записывается в файл, имя которого
составляется из имени файла результата с приписанным суффиксом .toc;
запись копии командой cdrecord/wodim с параметрами -raw96r и -clone;
DVD читать не умеет)
Пример копирования диска "с подробностями":
readom dev=устройство -clone [-nocorr] f=имя-файла
wodim dev=устройство -raw96r -clone -v имя-файла
Для записи в режиме -dao нужна чистая болванка, так что
стирание DVD-RW необходимо производить отдельным проходом:
wodim dev=адрес blank=fast
Перед записью на DVD-* и в конце записи маленьких образов
наблюдается большая пауза (несколько минут), стандарт накладывает
ограничение на минимальный размер тома (около 800 МБ, некоторые DVD-ROM
после загрузки проводят калибровку в середине диска и обижаются,
если там ничего нет). После записи на
DVD-R/DVD-RW необходимо вынуть и вставить диск, иначе он не монтируется
(подсистема кеширования не знает о том, что данные на DVD-ROM изменились).
Или просто используйте ключ -eject.
Записывать "на лету" в режиме DAO всё же можно, но в
2 этапа:
cdblocks=`mkisofs -print-size -quiet ...`
mkisofs ... | dvdrecord -dao tsize=${cdblocks} ... -
Проект libburnia (2002)
задуман для разработки библиотек, позволяющих добавить в любую программу возможность
создания образов файловой системы ISO 9660, записи их на оптический носитель и чтения.
Лицензия - GPLv2. Реализована под Linux и FreeBSD.
Пока не все обещания исполнены.
Состоит из:
- библиотеки libisofs (пакеты libisofs 0.6.6 и libisofs-devel) -
интерфейс для создания и редактирования образов файловой системы ISO 9660;
включает поддержку Rock Ridge, Joliet, ISO-9660:1999, El-Torito, сессий;
копирует все атрибуты файла из текущей файловой системы в ISO 9660 RR и обратно;
не поддерживается HSF, UDF, файлы из нескольких экстентов, zisofs;
- библиотеки libburn (пакеты libburn 0.6.0 и libburn-devel) - интерфейс для записи подготовленных ранее
образов на оптический носитель; для ядра 2.4 используется /dev/sgX (ide-scsi),
для ядра 2.6 - /dev/srX и /dev/hdX; предоставляет возможность чтения с устройства
в обход блочного ввода/вывода (позволяет избежать необходимости выгрузки носителя
между записью и чтением); поддерживвает режимы CD SAO, CD TAO, DVD, BD;
только блоки данных (никаких CD-DA и т.п.)
- библиотеки libisoburn (?!) - работа с сессиями на перезаписываемых носителях (CD/DVD/BD),
связывает libisofs и libburn; не поддерживает CD-DA и его модификации (CD-Text и др.)
- программы записи cdrskin (замена cdrecord, пакет cdrskin 0.6.0 в Fedora 10 дефективен)
- записывает на CD-R и CD-RW также как cdrecord;
DVD-RAM, DVD+RW, DVD-RW и BD-RE записываются почти в режиме TAO;
DVD-R[W], DVD+R и DVD+R DL в последовательном режиме записываются почти в режиме TAO
с использованием сессий; DVD-R и DVD-RW можно записывать в режиме DAO;
программа имеет 2 набора ключей: совместимые с cdrecord (-help) и дополнительные (--help):
- --devices (сканирование подходящих устройств)
- --list_formats (допустимые форматы записи)
- blank=as_needed
- blank=format_overwrite
- blank=deformat_sequential
- --allow_emulated_drives (эмуляция устройства с помощью файлов;
имена псевдоустройств задаются в виде dev=stdio:/dev/usbstick или dev=stdio:/tmp/test)
- write_start_address=
- --prodvd_cli_compatible (вернуться к поведению cdrecord)
- --grow_overwriteable_iso (имитировать поведение groisofs)
- assert_write_lba=
- --no_rc (не извлекать параметры из /etc/cdrskin/cdrskin.conf и $HOME/.cdrskinrc)
- программы xorriso 0.3.2 (?!) -
создание и запись образов ISO 9660 с расширением Rock Ridge;
загрузка образа с устройства, редактирование и запись обратно в мультисессионом режиме;
El Torito; возможность монтирования предыдущих сессий;
очистка и форматирование;
командный и интерактивный интерфейс; очень много возможностей
- программы libburner (?!) - демонстрационная программа для проекта libburnia;
позволяет вывести список доступных устройств, очистить CD-RW и DVD-RW,
форматировать DVD-RW и BD, записывать CD-R, CD-RW, DVD-R, DVD+R, DVD+R/DL,
DVD+RW, DVD-RW, DVD-RAM, BD-R, BD-RE (не умеет DVD-R/DL); в качестве параметров
могут передаваться имена файлов с образами ("-" - читать со стандартного ввода);
ключи:
- --drive адрес|номер|- ("-" - запрос на сканирование устройств)
- --audio (файлы с образами содержат звуковые дорожки для CD-DA)
- --blank_fast (CD-RW)
- --blank_full (DVD-RW)
- --format (DVD-RW, BD-RE или BD-R)
- --try_to_simulate
- --multi (не последняя сессия, так что том не закрывать)
Используется в xfburn
(графическая программа записи для Xfce).
Пакет dvd+rw-tools 7.1 содержит средства для записи на
DVD-R, DVD-RW, DVD+R, DVD+RW, DVD-RAM, Blu-ray (BD-RE и BD-R)
и форматирования DVD-RW, DVD+RW, DVD-RAM.
Поддерживает запись на DVD+R9, на DVD-R DL (только одна сессия,
для мультисессионной записи требуется поддержка Layer Jump от mkisofs/genisofs).
Устройство должно быть MMC3-совместимо.
Для создания образа файловой системы требует наличия mkisofs/genisofs.
Может записывать созданные ранее образы, создавать образ на лету (вызывает
mkisofs/genisofs) и дополнять записанный на диске образ новыми файлами.
Не умеет записывать на CD-R и CD-RW. Лицензия - GPL.
Перед записью необходимо отключить программы
автоматического монтирования (autofs, supermount, magicdev, autorun и т.д.).
Использование ATAPI устройства с ядром 2.4 требует
тех же манипуляций с модулем эмуляции SCSI, что и программа cdrecord,
например, загрузки с параметром ядра hdX=ide-scsi и установки модулей
sg, sr_mod, ide-scsi (к устройству при этом надо обращаться как к /dev/scdN).
Перед первой записью болванку DVD+RW требуется
отформатировать (growisofs пытается сделать это самостоятельно, но может
потребоваться ей помочь) программой dvd+rw-format (большая часть форматирования
происходит в фоновом режиме).
Запись на DVD-R осуществляется методом последовательных добавлений
(весь образ или всё дополнение записываются как одна зона), на DVD-RW -
методом последовательных добавлений (Incremental Sequential)
или ограниченной перезаписи (Restricted Overwrite,
всё вместе выглядит как одна зона, но на границах 32КБ блоков делаются связки;
требуется форматирование перед использованием; требуется полная очистка, чтобы
вернуться к методу последовательных добавлений ("dvd+rw-format -blank"),
или частичная очистка, чтобы использовать болванку в режиме DAO).
Некоторые устройства поддерживают только режим (выясняется опытным путём ;).
Текущий режим можно узнать командой dvd+rw-mediainfo (Mounted Media).
Запись в режиме DAO возможна, но рекомендуется использовать dvdrecord (cdrecord, wodim).
Устройство записи на BD-R и BD-RE половину времени тратит
на проверку записанного (система управления дефектами перезаписывает плохо
записавшиеся блоки в резервную зону), так что рекламируемую скорость необходимо делить на 2.
Перед первой записью на BD-RE growisofs форматирует болванку самостоятельно,
резервируя 256 MB.
Запись на BD-R возможно в режимах предварительного форматирования
(резервируется зона для управления дефектами), последовательной записи
(без резервирования зоны), перезаписи (перезаписываемые блоки выдаются за
дефективные, зона резервируется) и произвольного доступа (аналогично, не поддерживается).
В последних 2 случаях резервная зона может достигать половины диска.
Перед первой записью на BD-R growisofs форматирует болванку самостоятельно
в режиме перезаписи, резервируя всего 256 MB.
Для записи на диск используется программа growisofs,
которая работает в 2 режимах: запись первой сессии и слияние новых
файлов с содержимым предыдущей сессии.
Для записи первой сессии необходимо указать ключ -Z и имя устройства
(например, /dev/scd0), все остальные ключи из командной строки передаются
программе mkisofs/genisofs для создания образа файловой системы. Образ создаётся
"на лету" и записывается прямо на устройство без создания промежуточного
файла. При этом
- нельзя указывать ключ "-о"
- growisofs порождает ключ "-С" и его параметры самостоятельно
Если образ уже существует, то его можно записать
с помощью команды:
growisofs -Z имя-устройства=имя-файла
В частности, если файл подаётся на стандартный ввод,
то надо делать так:
find | cpio -oavH crc | bzip2 | growisofs -Z имя-устройства=/dev/fd/0
Если диск уже содержит ISO9660 и growisofs запускается
неинтерактивно (cron) с ключом -Z, то она отказывается стирать старое
содержимое.
Запись новой сессии со слиянием с содержимым предыдущих
сессий производится командой (чтение мультисессионных дисков DVD+R/DVD-R может
составлять проблему даже на той системе, на которой их записали):
growisofs -М имя-устройства параметры-mkisofs
isofs в Linux до 2.6.8 имеет ошибку, не позволяющую
каталогу располагаться за 4 ГБ границей, поэтому growisofs отказывается
записывать новую сессию, если её начало лежит после 4 ГБ - 40 МБ.
Чтобы закрыть диск в этом случае (или вы передумали записывать ещё
одну сессию) необходимо выполнить команду:
growisofs -М имя-устройства=/dev/zero
Вместо /dev/zero можно подставить имя файла, содержащего
образ, но тогда необходимо также передать и ключ "-С" и его параметры.
Не работает под sudo.
Для создания incremental backup (как это по-русски?)
обратите внимание на ключи -root и -old-root программы mkisofs.
Дополнительные собственные ключи growisofs
(все размеры задаются в секторах по 2КБ):
- -version
- -quiet (можно несколько раз)
- -zero-session (синоним -Z)
- -prev-session (синоним -M)
- -dry-run (всё, кроме записи на устройство)
- -dvd-compat (записывается выводная зона, после этого DVD-R и DVD+R нельзя
дополнять; если указать дважды, то записывать в режиме DAO;
нельзя использовать вместе с -М для DVD-R и DVD+R, см. выше пример с
/dev/zero)
- -overburn (начинать запись даже если последняя сессия выйдет за
пределы 4.377 GiB для DVD или 25 GiB для Blu-ray)
- -speed=х (1х = 1385KBps или 4496KBps)
- -poor-man (д.б. первой в строке; употреблять, если выдаётся ошибка
03h/15h/82h; используются всякие хитрости, чтобы пользователям не
требовалось накладывать заплатки на ядро)
- -use-the-force-luke=dao[:размер] (записывать в режиме DAO, размер
необходим, если образ подаётся на стандартный ввод)
- -use-the-force-luke=tracksize:размер (размер образа для режима DAO?)
- -use-the-force-luke=noload (оставить "подставку для кофе" открытой после
записи)
- -use-the-force-luke=notray (не закрывать её перед записью?)
- -use-the-force-luke=moi (-quite для mkisofs)
- -use-the-force-luke=break:размер (задать располжение границы между слоями
для DVD+R9)
- -use-the-force-luke=4gms (записывать новую сессию даже если она начинается
после 4 ГБ - 40 МБ; из-за ошибки реализации ISOFS в Linux до 2.6.8 запрещено по-умолчанию)
- -use-the-force-luke=wrvfy (WRITE AND VERIFY? у меня при этом скорость
записи получилась 0.2x :()
- -use-the-force-luke=seek:номер-сектора (при записи существующего образа
пропустить указанное число секторов)
- -use-the-force-luke=tty (стирать старое содержимое диска при
неинтерактивном запуске)
- -use-the-force-luke=dummy (пробный прогон для DVD-R и DVD-RW)
- -use-the-force-luke=spare:none (запись на BD-R в последовательном режиме,
без резервной зоны)
По завершении записи лоток с диском выдвигается,
чтобы ядро сбросило блоковый кеш (он всё равно не соответствует обновленным
данным на диске) и обновило размер блочного устройства.
Утилита dvd+rw-format позволяет отформатировать или
очистить болванки DVD+RW, DVD-RAM и DVD-RW на указанном устройстве:
- -lead-out (только DVD+RW; скопировать содержимое выходной зоны сразу за
последним использованным сектором, это делает устройства DVD-ROM
счастливее)
- -{format|force}[=full] (форматирование не стирает данные; рекомендуется
делать "growisofs -Z /dev/dvd=/dev/zero")
- -blank[=full] (только DVD-RW, переводит из режима перезаписи
в режим DAO или последовательной записи)
- -ssa[=none|default|max|размер] (размер резервной области (Supplementary Spare Area);
только DVD-RAM и Blu-Ray)
- -gui
Утилита dvd+rw-mediainfo рассказывает всё что знает
о диске, установленном в указанное устройство: название устройства, тип
болванки, набор скоростей записи, текущая скорость записи, состояние диска,
число сессий и состояние последней, число дорожек (зон?) и состояние последней.
Утилита dvd+rw-booktype позволяет прочитать (-inq) или
установить (-media) тип носителя (Book Type) в зоне данных управления:
-dvd-rom, -dvd-rw, -dvd-r, -dvd+rw или -dvd+r. Некоторые DVD-проигрыватели
отказываются работать, если там не установлен тип DVD-ROM.
Для некоторых (не моих, по слухам, NEC позволяет устанавливать
тип носителя только для DVD+R9) устройств можно запрограммировать, что они будут
заносить в это поле при записи DVD+R (-unit+r) или DVD+RW (-unit+rw).
Утилита dvd-ram-control позволяет переводить диск на
указанном устройстве в режим "только чтение" и обратно (-rdonly, -rdwr).
Разбор имён ключей (в некоторых местах по первой букве,
в некоторых по третьей ;) вызывает опасение. Тщательн'ей набирайте
текст команд! Автоматический выбор скороси работает не всегда, а паузы
перед записью нет, так что увидев как 16х диск собирается заисываться
на скорости 2.4х, сделать уже ничего не можете.
GUI:
- k3b 1.0.5 (KDE, dvd+rw-tools), k3b-libs, k3b-extras-freeworld, k3b-devel;
использует cdrdao, cdrecord (wodim), dvd+rw-format, eMovix (не найдена),
growisofs, mkisofs (genisoimage), normalize, readcd (readom), sox,
transcode, vcdxbuild, vcdxminfo, vcdxrip;
позволяет записывать CD/DVD с данными, Video CD, SVCD, DVD-Video, CD-DA (с преобразованием на лету),
копировать CD/DVD, записать подготовленный ранее образ CD/DVD (.iso, .cue),
форматировать DVD+RW/DVD-RW, очистить CD-RW, CD-DA, смешанный CD,
умеет работать с многосессионными дисками;
в качестве бонуса умеет конвертировать CD-DA, Video-CD и DVD-Video;
зациклился при попытке очистить проект
- nautilus-cd-burner 2.24.0 (Gnome, dvd+rw-tools) - создание виртуального каталога,
в который можно натаскать файлов и записать на CD/DVD)
- brasero 0.8.4 (Gnome), запись CD-DA, данных на CD и DVD, DVD-Video (подозрительно - принял за аудио!),
SVCD, VCD, копирование диска (.iso, .raw, .cue, .toc),
создание обложки (текст и вставка картинок),
подсчёт и проверка контрольных сумм (MD5, SHA1, SHA256);
для работы с видео требуются GStreamer, ffmpeg, vcdimager и dvdauthor;
- gnomebaker 0.6.4 (Gnome, cdrecord), запись CD-DA, данных на CD и DVD,
очистка и форматирование, падуч
- gcombust 0.1.55 (Gnome, древнее (GTK1?), падучее, удалить)
- X-CD-Roast - интерфейс к mkisofs и cdrecord, очень древнее, безумный интерфейс, не стал ставить
- BurnIT - интерфейс (Java)
к mkisofs, cdrecord и cdda2wav
- XDaodio - интерфейс
(Tcl/Tk) к cdrdao для копирования audio CD 1:1
- koncd (KDE)
Преобразование образов из формата Alcohol в ISO:
mdf2iso исходный-образ результат
Преобразование образов из формата Nero в ISO:
nrg2iso исходный-образ результат
Эти утилиты преобразования и множество других собраны в пакете
AcetoneISO и AcetoneISO2
(подкачивает и запускает бинарник PowerISO, в общем выглядит подозрительно и
требует 32-битных библиотек!), оболочка лицензирована GPL3.
Позволяет монтировать (с помощью FUSE и fuseiso) и
преобразовывать образы ISO, NRG, MDF, IMG, CCD, DMG, некоторые консольные игры.
В наличии можество бонусов: возможность работы с образом как с архивом,
база образов, просмотр фильма, подсчёт MD5, разбиение образа на части, шифрование,
сжатие, конвертирование видео, загрузка с Youtube/Pornotube, извлечение звука из DVD-Video.
И кнопочка PayPal для пожертвований - настоящее Shareware ;)
Графическая программа isomaster
позволяет работать с образами ISO 9660 как с архивами. Также читает (но не пишет) NRG
и некоторые MDF.
Утилита fuseiso
позволяет монтировать (с помощью FUSE)
образы ISO (включая zisofs), BIN, NRG, некоторые IMG (CloneCD), некторые MDF (Alcohol 120%).
При монтировании необходимо указать имя файла с образом и каталог точки монтирования.
Ключи:
- -u точка-монтирования (размонтировать)
- -p (при необходимости создать каталог точки монтирования и удалить за собой)
- -c кодировка-имён-файлов (?!)
- -n (не редактировать ~/.mtab.fuseiso)
-
Утилита daa2iso
преобразует файлы из формата DAA (Direct Access Archive, PowerISO) в формат ISO.
Утилиты под Linux (не пробовал)
QPxTool позволяет контролировать качество записи
на CD/DVD носители (по мотивам Plextor Tool, позволяет использовать дополнительные возможности устройств
этой фирмы).
|
Bog BOS: Использование CD-ROM/-R/-RW и DVD-ROM/-R/-RW/+R/+RW в Linux
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru