# Запись cd/dvd дисков в Linux

Долгое время утилиты записи на CD/DVD выпускались в пакете cdrtools, разрабатываемом Йоргом Шиллингом (Joerg Schilling). В 2006 году Шиллинг решил сменить лицензию с GPL на CDDL (Common Development and Distribution License), несовместимую с GPL. Точнее, сначала была изменена лицензия нескольких make-файлов. И этим сразу озаботились люди из Debian, которые не могли создавать пакеты, где GPL-код зависим от не-GPL-кода. И люди из Debian после долгих дебатов с Шиллингом (насколько я знаю, во время которых код cdrtools стал уже на 80 процентов под CDDL), сделали ответвление от оригинального проекта и назвали его cdrkit. Утилиты, входящие в его состав, получили другие названия, однако параметры командных строк сохранились прежними. Так, программа cdrecord стала именоваться wodim (сокращение от «write optical disk media»), cdda2wav превратилась в icedax («incredible digital audio extractor»), а mkisofs переименовали в genisoimage («generate ISO image»).

## Создание образа

Чтобы записать информацию на болванку, нужно сначала создать образ записываемого диска. Есть несколько способов сделать это. Первый применим, когда вы хотите скопировать существующий диск. Поместите диск в привод, смонтируйте диск, перейдите в каталог, где намереваетесь создать образ, и дайте там примерно такую команду:\


```
$ dd if=/dev/cdrom of=mycd.iso
```

Используемое здесь dd — это название стандартной программы, которая найдется в любом дистрибутиве Linux. Она копирует содержимое одного файла в другой, а поскольку в UNIX любое устройство есть файл, то dd можно использовать для создания образов любых дисков: от доисторических дискет до DVD (и более того, dd способна записать образ на тот же флоппи).

Разберем параметры: if означает input file, т.е. «входной файл», а of — output file («выходной файл»). /dev/cdrom — это стандартная ссылка на устройство CD/DVD-привода, вместо нее можно подставить и настоящее имя устройства (например, /dev/hdd). В параметре of указывается имя файла, под которым будет создан образ с помещенного в привод диска. Расширение iso — дань традиции. По умолчанию dd читает с устройства блоками по 512 байт. Это значение можно изменить параметром bs (например, bs=1024). Для принудительного копирования даже после ошибок чтения можно добавить ключ noerror. Создание копии при помощи dd может не сработать при использовании двухслойных DVD. В остальных случаях обычно работает.

В результате, на выходе получается точная копия диска. Но таким образом не получится скопировать ни аудиодиск, ни какой-нибудь защищенный диск с игрой (последний перепишется, но распознаваться как «правильный», лицензионный, не будет). Кроме того, dd не показывает данные о процессе выполняемого копирования — для этого можно лишь наблюдать за светодиодом привода и слушать гудение вращающегося диска _(Прим. ред.: Или проверять изменения в размере записываемого файла-образа.)_.

Есть и другой способ создания образа диска. Он особенно актуален для случаев, когда нужно записать на диск каталог с файлами или множество таких каталогов. Поможет замечательная программа genisoimage. Она умеет делать образ диска из директории вот так:\


```
$ genisoimage -f -v -J -o mycd.iso /mnt/somedisk/temp
```

В этом примере в текущем каталоге создается образ каталога /mnt/somedisk/temp и записывается в файл mycd.iso. Параметр -v указывает, что genisoimage должна информировать о ходе процесса в консоль, -J задает формат файловой системы (Joliet), а -f указывает genisoimage следовать по символическим ссылкам, помещенным в копируемый каталог.

Итак, чтобы сделать «виртуальный проект» диска, надо создать некий временный каталог и поместить в него символические ссылки на директории или файлы, которые вы желаете видеть в своем проекте. В чистой консоли это делать весьма скучно, поэтому воспользуемся для создания этих ссылок консольным файловым менеджером Midnight Commander. Запустим mc, на одной панели перейдем в каталог, где «проектируем» диск, а на другой панели — туда, где находится файл или каталог, символическую ссылку на который вы хотите добавить в проект. Помещаем курсор на этот файл или каталог, нажимаем Ctrl-X, отпускаем. Теперь нажимаем клавишу S. Появляется диалоговое окно с уже заполненными полями (на что делать ссылку и куда ее помещать). Подтверждаем нажатием на Enter. Всё, готово. Таким образом наполняем проект файлами и каталогами. Ничуть не медленнее, чем в k3b.

Теперь остается передать каталог проекта упомянутой утилите genisoimage и создать образ. Но хватит ли приведенных мною выше параметров на все случаи жизни? Конечно же, нет. Вникнем в некоторые тонкости. Linux может откровенно плохо читать с носителя большие видеофайлы, если на диске нет файловой системы UDF (Universal Disc Format). Напомню, что на болванке могут соседствовать разные файловые системы. По умолчанию это ISO-9660: она понимается даже в MS-DOS и «железные» DVD-плееры ее тоже очень любят. Есть также Joliet — надстройка над ISO-9660, разрешающая длинные имена файлов, причем даже в юникоде. И Linux, и Windows хорошо понимают эту файловую систему, и многие «железные» плееры тоже.

Но вернемся к UDF: ее поддержку надо обязательно включать, если вы записываете «стандартный» DVD с видео, т.е. с четкой структурой каталогов VIDEO\_TS (с фильмом, состоящем из VOB-файлов) и иногда AUDIO\_TS. Впрочем, лично я использую UDF при записи любых DVD. Есть два способа включить UDF для образа диска. Первый — использовать ключ -udf, а второй — это «ориентированный» на DVD Video параметр -dvd-video. В последнем случае надо, чтобы имена файлов и каталогов (VIDEO\_TS и прочих) были в верхнем регистре. При создании образа файлы (их содержимое) будут отсортированы и расположены в образе диска. Сортировка не произойдет, если все названия не в верхнем регистре. Всё это должно «способствовать» чтению получаемых дисков на всех «железных» DVD-плеерах. Однако я эту сортировку не включаю, и по имеющейся у меня информации записанные без нее диски с DVD Video все равно нормально читаются на «железных» плеерах.

Другое расширение к ISO-9660 — это Rock Ridge. Оно по умолчанию включено в k3b и дает возможность использовать более длинные, чем в Joliet, имена файлов, а также &#x431;_&#x43E;_&#x43B;ьшую глубину вложенности каталогов и атрибуты файлов UNIX (обратите на это особое внимание). Rock Ridge включается параметром -r, а название этого расширения взято из фильма Мэла Брукса «Сверкающие седла» (там был городок Рок Ридж). Особой нужды во включении Rock Ridge я не вижу. К слову, записанные мною в k3b (с включенным Rock Ridge) диски с DVD Video читаются только с правами пользователя root.

## Запись образа

Когда образ подготовлен, надо его записать на болванку. Здесь поможет программа wodim. В простейшем случае ее запуск выглядит так:\


```
# wodim dev=/dev/hdc -eject -v mycd.iso
```

Очевидно, что вместо /dev/hdc вы можете подставить другое устройство, а mycd.iso — это название файла с образом. Параметр -eject выдвигает каретку привода после окончания записи. У wodim есть ряд других интересных параметров:\


* -dummy — симуляция прожига с выключенным лазером. Полезно, чтобы определить, сколько времени может занять запись.
* -multi — многосессионный диск.
* -fix — фиксация диска (без записи).
* speed=значение — задает скорость записи.
* blank=режим — очистка содержимого CD-RW. Доступные режимы: all (полная очистка, долго), fast (быстро), session (очистить последнюю сессию).
* -format — форматировать болванку CD/DVD-RW.
* -overburn — включить возможность записи больше, чем стандартный объем диска. В этом случае, как правило, необходимо также использовать режим записи SAO (-sao).

На этом можно было бы и закончить статью, но я не коснулся еще одной важной темы — записи обычных звуковых CD.

## Запись музыкальных дисков

Перед записью аудиодиска необходимо подготовить звуковые дорожки. Это обычные WAV-файлы с определенными параметрами: два канала (стерео), знаковый integer — 16 бит, частота оцифровки — 44100 герц, PCM (Pulse-code modulation). Грубо говоря, это самый стандартный WAV-файл, который можно себе представить. Поскольку зачастую такие файлы и появляются в результате их копирования с аудиодисков, сначала рассмотрю эту, «обратную» записи, операцию. Если вы хотите скопировать audioCD, получив музыкальные файлы с оригинальным качеством, вам поможет утилита cdparanoia. Вообще она знаменита своим умением считывать музыку даже с крайне поцарапанных дисков. Это умение занимает очень много времени, поэтому его можно отключать ключом Z. Тогда запуск программы выглядит примерно так:\


```
$ cdparanoia -BZ
```

Второй используемый здесь параметр — B — указывает, что каждую дорожку надо сохранять в отдельный файл. Все эти файлы сохраняются в текущий каталог. Если вы желаете скопировать только некоторые дорожки, их диапазон можно задать следующим образом:\


```
$ cdparanoia 2-6 -BZ
```

(В примере копируются звуковые дорожки со второй по шестую включительно.)

Теперь — вновь к записи аудиодисков. Звуковой CD можно записать в двух режимах: **TAO (track at once)** и **DAO (disk at once)**. TAO добавляет между дорожками паузы длиной в 2 секунды, а кроме того, после записи каждой дорожки выключает лазер. DAO — более новый и гибкий режим. В нем между дорожками можно записывать что угодно (не только паузы, но и, например, звуковые заметки), благодаря чему становится возможной даже запись дорожки, которая будет доступна к воспроизведению, однако не пронумерована — слушатель найдет ее только перемоткой _(Прим. ред.: Это и есть так называемые «hidden tracks», зачастую помещаемые музыкальными исполнителями в конец альбома.)_. В такие диски можно внедрять и текст (CD-Text). Кроме того, DAO-режим — единственный способ записать диск без пауз между песнями. Еще один режим, SAO (session at once), напоминает DAO, но поддерживает многосессионность. Для выбора режима записи в wodim существуют переключатели:\


```
-tao
-dao
-sao
```

Чтобы записать WAV-файлы на болванку, нужно выполнить примерно такую команду (из каталога, где они находятся):\


```
# wodim dev=/dev/hdc -tao -eject speed=4 -pad -audio *.wav
```

Рассмотрим параметры. Новых для нас — всего два:\


* -pad. Размер дорожки (а значит — и исходного звукового файла) должен быть кратен 2352 байтам. Иначе wodim откажется его записывать. Этот параметр (-pad) заставляет wodim автоматически дополнять нулями размер/длину дорожки до кратности 2352.
* -audio — указывает, что диск записывается в формате CD-DA (Red Book).

## Заключение (про growisofs)

Многие задачи, описанные в этой статье, решаются и другими способами. Например, для копирования музыкального диска в WAV-файлы есть утилита icedax, а копировать диск с данными можно командой readom. Совершенно за бортом остался консольная утилита growisofs, служащая для записи данных на DVD, поэтому концовку я решил посвятить именно ей. growisofs — это подобие надстройки над wodim и genisoimage. Программа понимает параметры от genisoimage. Вот как с ее помощью можно записать диск:\


```
# growisofs -Z /dev/dvd -J -f -udf /foo/bar
```

«Родной» параметр тут один — -Z, который указывает, что записывается первая сессия. Для следующей надо указывать ключ -M. Других собственных параметров у growisofs немного. Из основных назову лишь -overburn, -speed=скорость и -dvd-compat (закрывает диск DVD+R и DVD-R: его нельзя будет дополнить, зато он хорошо читается на «железных» плеерах).

Финализация многосессионного диска с growisofs:\


```
# growisofs -M /dev/dvd=/dev/zero
```

Запись подготовленного ранее образа диска:\


```
# growisofs -dvd-compat -Z /dev/dvd=mycd.iso
```

В ходе работы growisofs образ диска создается на лету и через канал (pipe) отправляется на программу записи.

В завершение дам совет, значение которого трудно недооценить: Работая с genisoimage и growisofs, не забывайте о параметре -f!
