Дао CD-R.

Рано или поздно у любого владельца домашнего компьютера появляется желание «сотворить» что-то своё — разместить домашнюю страничку в Internet, перевести в «цифру» семейный фотоархив или снятый видеофильм, записать свой музыкальный альбом и т. д. — всё зависит от собственных интересов и фантазии.

Несмотря на сильно подросшие в последние годы ёмкости жёстких дисков, хранить всё это хозяйство на винчестере — не самая лучшая идея. Естественным образом возникший вопрос об использовании внешних носителей в настоящее время решается, как правило, покупкой CD-RW привода («резака» в просторечии), поскольку все другие варианты заметно уступают этому в соотношении возможности/цена. Носители (почему-то назывемые нашим компьютерным людом «болванками») также более чем доступны по цене.

Итак, решено — привод куплен и установлен, «болванки» разного вида припасены в необходимом количестве. Что дальше?

Прежде всего, необходимо, чтобы ОС могла с приводом работать. Будем исходить из того, что он имеет ATAPI интерфейс, т. к. сейчас такие наиболее распространены. Следует отметить, что никакие программы для записи CD ничего не знают про этот интерфейс, они общаются с резаком на языке SCSI команд, поэтому их взаимодействие реализуется с помощью специальных драйверов, позволяющих «прикинуться» такому приводу добропорядочным SCSI-устройством. В открытых системах, таких как Linux, это реализуется на уровне ядра, в Windows необходимо устанавливать ASPI (Advanced SCSI Programmer's Interface) драйверы, найти которые можно с помощью любого поисковика. Для работы в Linux ядро должно быть сконфигурировано с опциями SCSI emulation support, SCSI support, SCSI generic support (при установке современного дистрибутива вы это всё, скорее всего, получите в идущем в поставке ядре). Необходимо также сообщить загрузчику системы, что нужно использовать эмуляцию SCSI для привода  [1]. В моём компьютере резак установлен «мастером» на втором IDE-канале, поэтому в настройках GRUB-а, который используется у меня в качестве загрузчика, добавлена опция hdc=ide-scsi:

title linux-up
kernel (hd0,3)/boot/vmlinuz-up root=/dev/hda4 hdc=ide-scsi
initrd (hd0,3)/boot/initrd-up.img

(приведена часть файла /boot/grub/menu.lst). Если используется LILO, то в соответствующем разделе его настроек необходимо добавить

append="hdc=ide-scsi"

и не забыть запустить LILO. Этого достаточно для наиболее сейчас распространённых линуксовых ядер серии 2.4.x. При установке современных дистрибутивов Linux необходимые настройки могут быть созданы и инсталлятором.

Запишем также полезные опции монтирования дисков для «читалки» и «писалки» в /etc/fstab:

/dev/cdrom /mnt/cdrom auto user,mode=0444,ro,noauto 0 0
/dev/cdrom2 /mnt/cdrom2 auto user,mode=0444,ro,noauto 0 0

Здесь /dev/cdrom и /dev/cdrom2 — всего лишь ссылки:

[ziga@localhost tmp]$ ls -l /dev/cdrom2
lrwxrwxrwx    1 root     root            9 Июн 27 21:56 /dev/cdrom2 -> /dev/scd0
[ziga@localhost tmp]$ ls -l /dev/scd0
brw-rw----    1 root     cdwriter  11,   0 Апр  8  2002 /dev/scd0

Следует обратить внимание на права, владельца и группу /dev/scd0, а также ряда основных программ, использование которых мы и будем рассматривать:

[ziga@localhost ziga]$ ls -l /usr/bin/cdrecord
-rws--x---    1 root     cdwriter   228840 Май 14 08:22 /usr/bin/cdrecord
[ziga@localhost ziga]$ ls -l /usr/bin/readcd
-rws--x---    1 root     cdwriter   129064 Май 14 08:22 /usr/bin/readcd

Чтобы иметь возможность писать диски, работая обычным пользователем, необходимо предоставить себе соответствующие права. Посмотрим, к каким группам принадлежит пользователь ziga:

[root@localhost root]# groups ziga
ziga : ziga

Добавим себя в группу cdwriter…

[root@localhost root]# usermod -G ziga,cdwriter ziga

и убедимся, что теперь всё в порядке:

[root@localhost root]# groups ziga
ziga : ziga cdwriter

Записывать диски мы будем с помощью следующих пакетов программ:

Все они являются свободными и кроссплатформенными  [2].

В пакет Cdrtools входят следующие утилиты:

Cdrdao пишет аудио-диски и диски с данными в режиме DAO на основе созданного по специальным правилам текстового файла с описанием содержания (toc-файл). Этой программой можно очень удобно скопировать CD разного типа (CR-ROM, audio, CD-Text).

CDParanoia предназначена для копирования трэков с аудио-компактов с бескомпромиссным качеством. Копирование производится чисто в цифровом виде, без каких либо аналого-цифровых преобразований (в частности, при этом никак не задействуется звуковая плата и аудиокабель, соединяющий её с приводом, т. к. данные передаются по интерфейсному шлейфу); скорость копирования приносится в жертву качеству; проблемные участки перечитываются неоднократно; при копировании сильно повреждённых дисков — например, поцарапанных — делается попытка (более или менее успешная) восстановления утраченного интерполяционными методами. Название программы, впрочем, достаточно красноречиво само по себе.

Установка этих пакетов в свободных ОС не должна представлять сложностей, поскольку они включаются в состав дистрибутивов этих систем — можно воспользоваться для этого соответствующими штатными средствами. В дистрибутивах Linux Debian и от ALT Linux Team сделать это наиболее просто:

[root@localhost root]# apt-get install cdrtools cdrdao cdparanoia

Желающие могут, конечно, поставить всё это из исходных текстов, а пользователям Windows придётся скачать бинарники с сайтов разработчиков.

Пришло время проверить, как это работает. Воспользуемся программой cdrecord, имеющей следующий формат:

cdrecord [общие опции] dev=device [опции для трэка] track1...trackn

Среди общих опций -v и -dummy — наши лучшие друзья; первая заставляет программу быть сильно «разговорчивее», следовательно, позволяет быстрее разобраться с возможными ошибками; вторая реализует имитацию записи, что поможет вам обойти какие-либо «подводные камни», проведя предварительную репетицию — полезная вещь, если вы никогда раньше не писали диски.

Дадим команду

[ziga@localhost tmp]$ cdrecord -scanbus

которая сканирует все SCSI устройства на всех SCSI шинах и выводит результат поиска; в нём следует найти строчку примерно такого вида:

	0,0,0	  0) 'RICOH   ' 'CD-R/RW MP7200A ' '1.30' Removable CD-ROM

где dev=0,0,0 — это как раз то, что нам нужно будет указывать в опции dev=device (SCSI адрес привода в формате scsibus,target,lun).

Если привод достаточно новый, то он, скорее всего, является SCSI-3/MMC-совместимым  [3], в этом случае можно воспользоваться опцией -prcap, чтобы узнать его возможности. Команда

[ziga@localhost tmp]$ cdrecord -v -prcap dev=0,0,0

выведет длиннющий список того, что может и что не может делать ваш резак (естественно, в этом примере и во всех дальнейших нужно, в случае необходимости, заменять в опции dev=0,0,0 SCSI адрес тем, что вы обнаружите в выводе предыдущей команды). Советую его внимательно изучить — некоторые сведения обычно не приводятся в документации, а если её вообще нет (типично для OEM поставок) — тем более полезно. Является ли привод SCSI-3/MMC-совместимым, и какой драйвер для него используется, можно узнать командой

[ziga@localhost tmp]$ cdrecord -v -checkdrive dev=0,0,0

Если в выводе найдены строки вида

Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).

то это как раз такой привод. Cdrecord поддерживает многие опции, специфичные для устройств некоторых производителей — VariRec (Plextor), Audio Master и DiskT@2 (Yamaha), различные варианты защиты от опустошения буфера — Burn-Proof (Sanyo), Just Link (Ricoh) и т. п. Команда

[ziga@localhost tmp]$ cdrecord -v -checkdrive driveropts=help dev=0,0,0

поможет узнать, какие именно опции такого рода поддерживаются для вашего привода.

Начнём с чего-нибудь простенького — вставим в привод любую чистую болванку и узнаем её характеристики, считав ATIP:

[ziga@localhost tmp]$ cdrecord -v -atip dev=0,0,0

ATIP (Absolute Time In Pregroove, т. е. абсолютная длительность ведущей дорожки) — это предварительно записанный раздел диска, в котором содержатся такие его характеристики, как размер блока, число блоков на диске (можно, следовательно, узнать ёмкость диска), является ли он перезаписывемым, имя изготовителя (не то, что указано на обложке — это всего лишь лейбл, под которым диск продаётся) и другие данные.

Попробуем почистить «эрвэшку» (CD-RW). Кладём её в привод и набираем команду

[ziga@localhost tmp]$ cdrecord -v speed=10 blank=fast dev=0,0,0

Здесь опция speed=10, как нетрудно догадаться, означает скорость записи, а blank=fast — тип очистки, в данном примере fast говорит о том, что чистятся только служебные области диска — TOC (Table Of Contents — таблица содержания), PMA (Program Memory Area) и pregap — специальный промежуток перед первым трэком, сами данные остаются нетронутыми. Можно почистить диск полностью, указав blank=all; имеются и другие варианты чистки. Кому доводилось форматировать в разных режимах дискеты — легко увидит здесь некую аналогию. Чистить CD-RW надо каждый раз, когда мы хотим записать на ранее использованный диск что-то новое.

То, какие данные и каким образом могут быть размещены на CD, определяется рядом стандартов, созданных как международными организациями, так и отдельными фирмами. В частности, формат аудио CD описывается в так называемой «Красной Книге» (Red Book), дисков с различными цифровыми данными — в «Жёлтой Книге» (Yellow Book), записываемых CD — в «Оранжевой Книге» (Orange Book) и т. д.

CD-R или CD-RW может быть записан как в один присест — это запись в режиме DAO (Disc-At-Once, т. е. диск-за-раз), так и за несколько подходов — в режиме TAO (Track-At-Once, т. е. трэк-за-раз). Вариацией DAO является режим SAO (Session-At-Once — сессия-за-раз), он позволяет пользоваться возможностями DAO, но при этом можно писать несколько сессий. Сессия — это отдельный сегмент, который может содержать несколько трэков, причём любого вида. Чтобы обычный бытовой аудиоплеер или CD-ROM привод могли прочитать диск, последняя сессия на нём должна быть «закрытой». Если пишется мультисессионный диск (т. е. содержащий несколько сессий), то после окончания записи и закрытия текущей сессии, должна быть открыта следующая, иначе диск окажется «закрытым», и на него ничего нельзя будет дописать, даже при наличии на нём свободного места. Диск, записанный в одну сессию, имеет три основных области — lead-in (вводную, где размещается, в частности, TOC, в которой указывается, где и какие данные размещены), область с собственно данными и lead-out (выводную). Первая и последняя играют чисто служебную роль, на «открытом» диске, если он пишется не в режиме DAO, они ещё не записаны, такой диск, следовательно, не имеет TOC (она в это время помещается в PMA), поэтому на обычных приводах они и не могут быть прочитаны. При записи в режиме DAO lead-in пишется сразу, поскольку содержание диска известно заранее. Несколько сессий могут быть связаны в последовательную «цепочку», в которой TOC предыдущей сессии указывает на TOC следующей, поэтому привод CD-ROM сможет «увидеть» данные, записанные во всех сессиях; бытовые аудиоплееры такой возможности лишены — они распознают только первую сессию, впрочем, это как раз позволяет создавать «смешанные» диски — такие, как CD-Extra.

Файловая система, в которой пишутся диски с данными, определена стандартом ISO-9660. Существует несколько уровней этого стандарта. Для всех уровней имена файлов и каталогов ограничены 31 символом, максимальная глубина вложенности каталогов — 8, общая длина пути не должна превышать 255 символов. Имена не должны содержать никаких символов, кроме латинских букв в верхнем регистре (A..Z), цифр, точки и знака подчёркивания. Первый уровень накладывает ещё большие ограничения — имена должны быть в формате 8+3 (имя + точка + расширение) для максимальной совместимости со всеми операционками, фактически — с MS DOS и её клонами; в уровнях есть и другие различия. Если такая широкая совместимость не нужна, можно смело использовать третий уровень.

Rock Ridge является расширением ISO-9660, позволяя использовать в именах те же символы, что используются в вашей локальной файловой системе, в частности, буквы могут быть и в нижнем регистре и даже не из латинского алфавита — например, русскими; поддерживаются такие специфичные для файловых систем *nix вещи как ссылки и права доступа; глубина вложения каталогов может быть любой (применяется система переадресации); кроме того, Rock Ridge — расширяемый стандарт. Операционки от Microsoft его не поддерживают, но поскольку он является всего лишь расширением ISO-9660, то диск, записанный с использованием Rock Ridge, можно в них прочитать, только длинные имена файлов не будут доступны.

В Microsoft, в свою очередь, придумали ни с чем не совместимый «стандарт» — Joliet. В нём имена файлов и каталогов хранятся в юникоде, точнее говоря, в UTF-16, и имеют ограничение на длину в 64 символа.

В мире Макинтошей, где, как всегда, «think different», используется повсеместно, в том числе и на CD, файловая система HFS (Hierarchical File System), хотя на Маках можно использовать и ISO-9660 и некоторые её расширения, сделанные в Apple, поддерживается и Joliet.

Имеется также файловая система UDF (Universal Disk Format), основанная на стандарте ISO/IEC 13346 (ECMA-167), она используется для так называемой пакетной записи — диск (обычно CD-RW) форматируется специальным образом, при этом теряется часть его ёмкости на размещение служебной информации, но после такой процедуры он превращается в своего рода «большую дискету», на которую можно писать файлы, стирать их и т. д.

В Linux можно и писать и тем более читать диски в любой из этих файловых систем, в частности, можно записывать «гибридные» диски, содержащие в оглавлении деревья Rock Ridge, Joliet и HFS, ссылающиеся при этом на одни и те же файлы; поддержка UDF, правда, имеется в Cdrtools пока только на экспериментальном уровне (есть также неофициальный патч ядра), но читаются UDF-диски в Linux без проблем  [4].

Попробуем сейчас создать копию какого-либо CD-ROM, например, вашего дистрибутива Linux (подарите её потом вашему другу, это абсолютно законно, в отличие от копий любых проприетарных систем). Создадим для этого файл с «образом» этого CD. В просторечии «образ» диска часто называется «изошкой», из-за обыкновения присваивать файлам с такими образами расширения iso, в частности, это относится и к размещаемым на ftp серверах файлам с образами дистрибутивных дисков Linux, FreeBSD и т. п. Можно воспользоваться стандартной утилитой dd, но лучше применить специально для этого предназначенную программу readcd из пакета Cdrtools:

[ziga@localhost tmp]$ readcd dev=0,0,0 -v f=cd.iso

Опция f=cd.iso означает, что мы хотим присвоить файлу образа имя cd.iso (и он будет размещён в текущем каталоге; в противном случае следует указать путь к файлу). Если всё прочиталось нормально — пишем созданный «образ» на CD:

[ziga@localhost tmp]$ cdrecord -v -dao dev=0,0,0 speed=20 -data cd.iso

Здесь опция -dao означает, что диск будет записываться в DAO режиме. Точнее говоря, cdrecord запишет его в SAO, если привод это поддерживает, в частности, диск будет закрыт по окончании записи данных. Опция -data говорит о том, что мы пишем диск с данными, а не аудио-компакт (можно не указывать, т. к. применяется по умолчанию для всех файлов, кроме тех, что оканчиваются на .au или .wav — для последних опция по умолчанию -audio). Перед записью можно сделать проверку «образа» — например, смонтировать его:

[root@localhost root]# mount -o loop -t iso9660 /tmp/cd.iso /mnt/disk

и посмотреть его содержимое:

[ziga@localhost tmp]$ ls -R /mnt/disk

или сделать куда более надёжный контроль читаемости всех файлов:

[ziga@localhost tmp]$ tar cvf /dev/null /mnt/disk

Можно воспользоваться также специальной утилитой проверки «образа» isovfy:

[ziga@localhost tmp]$ isovfy cd.iso

После записи диск тоже неплохо проверить на отсутствие ошибок чтения. Пофайловую проверку можно сделать, например, с помощью tar, как было описано выше — смонтировав диск и «заархивировав» его содержимое в /dev/null. Можно проверить его поблочную читаемость:

[ziga@localhost tmp]$ readcd -v dev=0,0,0 f=/dev/null

Cdrdao также прекрасно справится с копированием диска, особенно удобно ей пользоваться при наличии двух приводов — CD-ROM и CD-RW. Её формат:

cdrdao команда [опции] toc-file

Кладём CD-ROM в «читалку», а болванку — в резак и даём команду:

[ziga@localhost tmp]$ cdrdao copy --source-device 0,1,0 --device 0,0,0 --source-driver generic-mmc --driver generic-mmc
data.toc

Команда copy сама совершит все шаги по копированию — будет создан временный файл с образом диска (его имя и путь можно задать самому опцией --datafile), который после копирования на болванку будет удалён. Опции --source-device и --device задают адреса «читалки» и «писалки» соответственно, а опции --source-driver и --driver — применяемые для них драйверы. Опцией --on-the-fly можно провести копирование «на лету», т. е. без создания временного «образа» диска. Если есть только один привод, то «на лету» копировать, конечно, не получится, при этом опции --source-device и --source-driver указывать не надо, и cdrdao сама запросит у вас болванку после создания файла «образа». Точно так же можно использовать эту команду для копирования аудио-компакта. После создания копии можно с сервера CDDB запросить информацию для последующей передачи её вашему любимому CD-плееру:

[ziga@localhost tmp]$ cdrdao read-cddb --cddb-directory /home/ziga/.cddb data.toc

Команда read-cddb осуществляет этот запрос, опция --cddb-directory позволяет сохранить полученную информацию в вашем домашнем каталоге. Если не устраивает то, какие серверы опрашиваются по умолчанию (ряд зеркал freedb), можно задать их список самому опцией --cddb-servers; запрос можно также сделать уже во время копирования, используя опцию --with-cddb. С копированием аудио «на лету» советую быть осторожнее — cdrdao использует для копирования аудио-трэков paranoia, причём по умолчанию — в самом «строгом» режиме, так что если диск читается не идеально, то запись может сорваться; лучше скопировать в «образ», а потом «прожечь» болванку:

[ziga@localhost tmp]$ cdrdao read-cd --device 0,0,0 --driver generic-mmc data.toc
[ziga@localhost tmp]$ cdrdao write --speed 20 --device 0,0,0 --driver generic-mmc data.toc

Назначение команд read-cd и write, а также опции --speed полагаю, ясно без пояснений, файл «образа» по умолчанию получает имя data.bin.

Копировать аудио-трэки можно также программами cdda2wav из Cdrtools и CDParanoia. Формат cdda2wav:

cdda2wav [опции] имя (имена) файла (файлов)/каталогов

Попробуем сделать не просто копию аудио-компакта, а превратим её в CD-Text диск. CD-Text — формат, созданный фирмой Philips для кодирования информации об исполнителе и композициях на аудио CD. Команда

[ziga@localhost tmp]$ cdda2wav -v255 -D0,0,0 -B -Owav -paranoia -L0

скопирует трэки с диска. Опция -D указывает на адрес привода, -B — на то, что каждый трэк должен быть сохранён в отдельный файл. -O определяет формат файла, возможные значения — wav (по умолчанию), aiff, aiffc, au, sun, cdr, raw. Трэки на аудио CD — это 16-битный стереозвук с частотой дискретизации 44100 Гц, закодированный в линейной PCM (Pulse Сode Modulation). В том же формате окажутся и их копии на диске, только при выборе в опции -O значения wav (или если она опущена), в начало всех файлов будут добавлены специальные заголовки, которые позволяют проигрывателям аудио-файлов узнавать их формат. Опция -paranoia заставит cdda2wav использовать для чтения соответствующую библиотеку, а -L устанавливает режим опроса cddb серверов — возможные значения 0 (интерактивный режим) и 1 (используется первая найденная запись). Для всех трэков, копии которых сохраняются в файлах audio_nn.wav, создаются также текстовые файлы audio_nn.inf, содержащие информацию о трэке, в том числе, вытянутую с cddb; формат такого файла достаточно прозрачный, так что в дальнейшем вы при желании сможете писать по его образцу inf-файлы сами, например, для создания своего аудио CD. Интересная деталь — если подсчитать суммарный объём полученных wav-файлов, то он может показаться что-то уж очень большим. Например, 70-минутный альбом Queen «Made In Heaven» даёт в итоге 712 MB копий его 13 трэков. Болванки производятся, в основном, двух видов — на 650 MB (74 мин. аудио) и 700 MB (80 мин. аудио). Возникает резонно вопрос — как столько поместилось на стандартный компакт и как теперь это записать? Объяснение «феномена» простое — секторы на аудио-диске имеют длину 2352 байта, а на диске с данными — 2048 байтов, разница используется для контроля и исправления ошибок — для данных это критично, для аудио — нет (поменяйте, например, в созданном вами архиве 1 бит и вы больше не сможете его открыть, а то же самое в аудиотрэке не почувствуете на слух совершенно точно).

Теперь «прожигаем» болванку:

[ziga@localhost tmp]$ cdrecord -v dev=0,0,0 speed=20 -dao -text -audio -useinfo *.wav

Опция -text использована здесь как раз для создания CD-Text, её надо применять совместно с -useinfo, чтобы сказать cdrecord использовать inf-файлы. Посмотрим, что мы получили в итоге:

[ziga@localhost tmp]$ cdda2wav -D0,0,0 -H -J

Опция -J — не записывать трэки, только получить информацию о диске, -H — не создавать inf-файлы. Если будут выданы название альбома, имя (название) исполнителя и т. д. — всё в порядке. В настоящее время всё, что записывается в CD-Text, может быть только в ISO-8859-1 кодировке, поддержка других наборов символов пока в Cdrtools отсутствует.

Создадим теперь свой диск с данными. Подготовим то, что хотим на него записать — удобнее будет, если всё это собрать в одном каталоге, но можно использовать и любое число каталогов или создать нужные ссылки, чтобы не пришлось писать слишком длинную команду. Программа mkisofs подготовит нам «изошник» для последующей записи, её формат:

mkisofs [опции] [-o имя файла] путь_к_данным

Даём команду:

[ziga@localhost tmp]$ mkisofs -r -J -o cd.iso ~/my_data/

которая всё, что находится в каталоге ~/my_data, запишет в «образ» с именем cd.iso. Опции -r и -J нужны для того, чтобы mkisofs создала в дополнение к ISO-9660 дереву в TOC ещё и Rock Ridge и Joliet деревья соответственно. Если используются русские имена в названиях файлов/каталогов, то для корректного их отображения на диске следует предпринять дополнительные действия: опции -input-charset и -output-charset определяют наборы символов, используемые в локальной файловой системе и в Rock Ridge именах файлов на диске соответственно (в России традиционно используется в *nix koi8-r, но в последнее время появились альтернативы). С Rock Ridge проблем никаких не будет, если использовать диск при той же локали, в которой он будет записан, а для Joliet необходимо указать обязательно -input-charset, можно и совместить эти две опции:

[ziga@localhost tmp]$ mkisofs -v -r -jcharset koi8-r -o cd.iso ~/my_data/

Если в ~/my_data есть ссылки, то надо использовать опцию -f, чтобы в созданном mkisofs «образе» появились файлы/каталоги, на которые эти ссылки указывают (разумеется, если это нужно).

Как узнать заранее, сколько места займут наши данные на CD? Можно использовать и стандартную утилиту du, но наиболее точно подсчитает размер сама mkisofs:

[ziga@localhost tmp]$ mkisofs -q -r -J -print-size ~/my_data/

Размер будет выдан в секторах, поделив его на 512, получим результат в более привычных мегабайтах. Важно использовать при этом те же опции, что будут применены для создания «образа» диска (кроме -v/-q; последняя здесь была использована для пресечения ненужной в данный момент «болтливости», поскольку интересовал только размер файла). Это поможет избежать ситуации, когда созданный mkisofs «образ» диска не помещается на болванку.

Можно писать диски «на лету», используя каналы:

[ziga@localhost tmp]$ mkisofs -r -J ~/my_data | cdrecord -v dev=0,0,0 fs=32m speed=20 -

Диск будет записан без создания его «образа». Здесь применена опция fs, в которой указывается cdrecord объём оперативной памяти под буфер. В документации рекомендуется выбирать в пределах 4-32 MB, но не более половины доступной RAM (4 MB — значение по умолчанию). Оптимальный его размер зависит от вашего железа и других параметров; если не получается нормально записать диск без указания этой опции, следует поэкспериментировать.

Запишем теперь CD-Extra в качестве примера мультисессионного диска. CD-Extra (в девичестве CD-Plus) — формат двухсессионного компакта, первая сессия которого — CD-DA, т. е. аудио-трэки, а вторая сессия — данные. Аудио-трэки пишем именно в первой сессии, чтобы можно было послушать такой диск на бытовом плеере. На мультисессионных CD много места расходуется при открытии сессий на служебную информацию — 23 MB для первой сессии, 14 MB — для каждой последующей, учтите это при подсчётах.

Скопируем трэки аудио CD программой CDParanoia. Формат команды:

cdparanoia [опции] span [файл]

Копируем:

[ziga@localhost tmp]$ cdparanoia -v -d /dev/cdrom2 -B "1-"

Опция -d определяет устройство, с которого будут копироваться трэки (по умолчанию это /dev/cdrom), -B указывает копировать каждый трэк в отдельный файл (их имена при этом имеют вид track01.cdda.wav и т. п.), аргумент "1-" — то, что копирование должно быть с первого трэка до конца диска. Вывод программы очень нагляден — есть индикатор прогресса, процесс копирования иллюстрируется смайликами — в зависимости от успешности процедуры. Запишем теперь полученные трэки:

[ziga@localhost tmp]$ cdrecord -v -dao -multi -audio *.wav

Назначение опции -multi очевидно. Получим информацию для создания «образа» второй сессии:

[ziga@localhost tmp]$ cdrecord -v dev=0,0,0 -msinfo

С опцией -msinfo cdrecord даст нам информацию в виде, например,

0,179360

Здесь первое число — номер первого сектора первого трэка последней сессии — т. е. её начало, второе число — начало новой сессии. Создаём теперь «образ» для второй сессии:

[ziga@localhost tmp]$ mkisofs -r -J -C 0,179360 -o cdextra.iso ~/my_data/

Опция -C предназначена для указания места, где дожны располагаться на CD наши данные (числа, как нетрудно заметить, взяты из вывода предыдущей команды). Записываем вторую сессию:

[ziga@localhost tmp]$ cdrecord -v dev=0,0,0 -data speed=20 cdextra.iso

Это всё. А как записать «обычный» мультисессионный диск?

[ziga@localhost tmp]$ mkisofs -r -J -o multi.iso ~/my_data/
[ziga@localhost tmp]$ cdrecord -v speed=20 -multi -eject multi.iso

Добавим теперь в каталог ~/my_data ещё файлов/каталогов.

[ziga@localhost tmp]$ cdrecord dev=0,0,0 -msinfo
0,18666
[ziga@localhost tmp]$ mkisofs -o multi2.iso -r -J -C 0,18666 -M /dev/cdrom2 ~/my_data/

Опция -M служит для слияния уже существующих данных на CD с новым «образом» multi2.iso, должна использоваться совместно с -C.

[ziga@localhost tmp]$ cdrecord -v speed=20 -multi -eject multi2.iso
[ziga@localhost tmp]$ cdrecord dev=0,0,0 -msinfo
18666,27958

Добавим ещё что-нибудь в ~/my_data и продолжим:

[ziga@localhost tmp]$ mkisofs -o multi3.iso -r -J -C 18666,27958 -M /dev/cdrom2 ~/my_data/
[ziga@localhost tmp]$ cdrecord -v speed=20 -eject multi3.iso

Теперь всё — диск, содержащий 3 сессии, записан полностью, закрыт и даже «выехал» из привода (-eject). На нём доступны все данные, содержащиеся сейчас в каталоге ~/my_data.

Программа mkisofs обладает рядом уникальных возможностей. Одна из них — создание образа диска, в котором файлы расположены в заданном вами порядке — полезная штука при записи компактов с музыкой в OGG Vorbis или mp3. Если писать диск обычным образом, то в соответствии со стандартом ISO-9660, файлы и каталоги будут на нём расположены в алфавитном порядке, мы же хотим, чтобы они оказались записаны в порядке следования композиций. Поэтому, если давать файлам осмысленные имена, а не просто track01.ogg и т. п., то чтобы диск проигрывателем не дёргался постоянно в поисках следующей композиции, надо подготовить специальный файл, который будет передан mkisofs в качестве аргумента опции -sort. Создадим тестовый каталог test с тремя каталогами в нём, в каждом из которых будет несколько файлов, например, так:

[ziga@localhost tmp]$ ls -R test
test:
dir_1
dir_2
dir_3

test/dir_1:
file_a
file_b
file_c

test/dir_2:
file_k
file_l

test/dir_3:
file_x
file_y
file_z

Делаем файл file_sort:

test/dir_3 5000
test/dir_3/file_y 6000
test/dir_2/file_l 8000
test/dir_1/file_c 1000

В этом файле каталогам/файлам присваиваются веса — в начале идёт имя файла/каталога, а затем через ровно один пробел или символ табуляции — вес. По умолчанию все веса имеют нулевое значение, их можно задать как положительными, так и отрицательными. В первой строке всем файлам из каталога dir_3 мы присвоили вес 5000, но в следующей строке конкретному файлу file_y из этого каталога — больший вес, 6000. На диске файлы будут расположены в порядке уменьшения весов. Каталоги при этом не сортируются, они остаются расположенными в алфавитном порядке. Делаем теперь «образ» диска:

[ziga@localhost tmp]$ mkisofs -r -J -sort file_sort -o cdsort.iso test

и смотрим, что получилось, командой:

[ziga@localhost tmp]$ isoinfo -l -R -i cdsort.iso

Аргумент опции -i указывает на имя файла, -R — то, что информацию надо дать по дереву Rock Ridge, -l — вывод сформатировать в стиле команды ls. В выводе мы получим то, в каких секторах какие файлы расположены. Сделайте «образ» диска без опции -sort и сравните. Несколько замечаний:

  1. В TOC файлы и каталоги не сортируются, поэтому и приходится смотреть результат программой isoinfo — ls тут не поможет.
  2. С именами по-русски, к сожалению, всё это не работает.
  3. Пустые файлы, т. е. имеющие нулевую длину, не сортируются.
  4. Пути в файле file_sort должны быть такими, как их видит mkisofs.

Разумеется, я не описал и десятой доли возможностей рассматриваемых здесь программ. Остальное вы сможете найти в их документации.

Работа в консоли приятна и удобна, но можно сделать её ещё удобнее — почти все упомянутые здесь программы используют специальные переменные окружения и настроечные файлы. Например, cdrecord использует настройки, сделанные в файле /etc/default/cdrecord (в некоторых дистрибутивах /etc/cdrecord.conf). Мой файл /etc/default/cdrecord:

CDR_DEVICE=ricoh
CDR_SPEED=20
CDR_FIFOSIZE=4m
# drive name    device  speed   fifosize driveropts
ricoh=          0,0,0   -1      -1       ""
rw=             0,0,0   10      -1       ""
fly=            0,0,0   -1      8m       ""

Теперь по умолчанию dev=0,0,0, speed=20, fs=4m, записать болванку из «образа» cd.iso в режиме DAO можно командой

[ziga@localhost tmp]$ cdrecord -v -dao cd.iso

Можно поместить в /etc/profile

CDDA_DEVICE=0,0,0
export CDDA_DEVICE

и опускать в команде cdda2wav опцию -D0,0,0. Записав в ~/.bashrc

alias fblank='cdrecord -v dev=rw blank=fast'

делаем быструю очистку Hi-Speed CD-RW командой:

[ziga@localhost tmp]$ fblank

mkisofs может использовать информацию из файла .mkisofsrc, который она ищет последовательно в текущем каталоге, домашнем и каталоге с её бинарником. Запишем в такой файл

VOLI=Vasya Pupkin cOOL CD

и получим диск с соответствующим идентификатором тома (это то, что пользователи Windows и Mac OS видят как название вставленного в привод CD). Cdrdao смотрит настройки в файлах /etc/cdrdao.conf, /etc/default/cdrdao, $HOME/.cdrdao. Мой .cdrdao:

write_device   : "0,0,0"
write_driver   : "generic-mmc"
write_speed    : 20
read_device    : "0,1,0"
read_driver    : "generic-mmc"
cddb_directory : ".cddb"

Можно теперь скопировать диск командой:

[ziga@localhost tmp]$ cdrdao copy data.toc

Во всех программах введённые в командной сроке опции изменяют соответствующие значения из настроечных файлов и переменных окружения.

Те, кто предпочитают работать с GUI-программами, могут попробовать различные графические оболочки над утилитами, которые мы рассматривали выше. Их очень много — достаточно взглянуть, например, на список из соответствующего раздела сайта Linuxlinks. Одна из таких программ — Gnome CD Master — входит в пакет Cdrdao. Из других популярностью пользуются (среди многих прочих) X-CD-Roast, Gnome Toaster, CD Bake Oven, ECLiPt Roaster, gcombust. Отличаются они своими возможностями, краткая сводка которых помещена в таблицу. Попробуйте сами все эти программы и выберите ту, что вам больше понравится. Удачной записи!

Графические оболочки

  X-CD-Roast Gnome Toaster CD Bake Oven ECLiPt Roaster gcombust
Интерфейс gtk+ Gnome/gtk+ KDE/QT Gnome/python gtk+
drag'n'drop - + + + +
Поддержка программ:
Cdrtools + + + + +
Cdrdao - + - - -
CDParanoia - + + - +
Поддержка записи:
данные + + + + +
аудио + + + + +
CD-Text + + - - -
смешанные + + + - +
мультисессионные + + + + +
загрузочные + + + + +
гибридные - - - - +
«на лету» + + + + +
прямое копирование CD + + + + +
Прочее:
поддержка CDDB + - - - -
mp3 → wav - + * + + -
wav → mp3 + + * + + +

* Практически любые аудио-файлы.


[1] Некоторые программы (Cdrdao, X-CD-Roast) требуют эмуляции SCSI и для «читалки» тоже, поэтому, если в системе есть два привода — CD-ROM и CD-RW, то для использования этих программ эмуляцию SCSI надо делать для обоих. [вернуться]

[2] CDParanoia пока работает только в Linux, но она делит код с одноимённой кроссплатформенной библиотекой, которую используют другие приложения, в частности, Cdda2wav и Cdrdao. [вернуться]

[3] Такие приводы (MMC — от Multi Media Command) используют общий набор SCSI команд, что позволяет программе записи поддержать все эти устройства скопом. [вернуться]

[4] Фирма Philips создала новый (открытый) формат Mount Rainier (CD-MRW), которому, по-видимому, предстоит скоро стать новым стандартом для записи CD/DVD. В частности, этот формат позволяет создать на компакт-диске любую файловую систему, например, ext2, и пользоваться таким компактом так же как обычной, но очень большой и быстрой дискетой. При покупке нового привода CD-R/RW советую интересоваться поддержкой этого формата. [вернуться]