Создание CD-R

 

"If to smoke you turn I shall not cease to fiddle while you burn." ( Римский император Нейрон о рождении его собственных классических-CD, AD64. Он не понимал это полностью и сжег Рим.)

Обычно запись CD под Linux выполняется в 2 шага:

Эта глава описывает шаги для CD с данными и аудио-CD более детально.

Запись CD-ROM (чистые данные)

Заметьте, что сбор данных для CD обычно занимает больше времени, чем ожидается. Не забудьте, что отсутствующие файлы не могут быть добавлены, как только CD записан и зафиксирован. Это справедливо и для CD-RW, которые в настоящее время могут быть перезаписаны только целиком. Использование мульти-сессионных дисков не решение для отдельных файлов, так как Вы теряете пространство на новую таблицу содержимого (TOC). UDF пока не готов для Linux.

Также заметьте, что некоторое количество дискового пространства CD используется для помещения информации о ISO-9660 файловой системе (обычно несколько мегабайт). 620Мб данных всегда поместится на 650Мб CD-R.

Создание образа последующего CD-ROM

Перед использованием любого носителя (например, гибкого диска, жесткого диска или CD) надо создать файловую систему (DOS формулировка: отформатировать). Эта файловая система ответственна за организацию и объединение файлов, которые должны быть сохранены на носителе.

Обычно утилиты создания файловой системы записывают пустую файловую систему на раздел жесткого диска, которая затем монтируется и заполняется фалами, как нужно пользователю. Записываемый CD можно записать только один раз, так если бы мы записали пустую файловую систему, он станет форматированным - но останется полностью пустым навсегда. Это также справедливо для перезаписываемых носителей, т.к. Вы не можете произвольно изменять сектора, но Вы можете стереть все содержимое.

Таким образом, Вам нужен инструмент создания файловой системы в процессе копирования файлов на CD. Этот инструмент называется mkisofs. Типичное использование выглядит так:

mkisofs  -r   -o cd_image   private_collection/
              `---------'   `-----------------'
                   |               |
          записать выход в   взять каталог как вход

Опция '-r ' устанавливает права всех файлов CD на чтение всеми и включает расширение Rock Ridge. Вам следует использовать эту опцию, пока Вы не поймете, что Вы делаете (подсказка: без '-r ' точка монтирования получает права доступа private_collection!).

mkisofs пробует отобразить все имена файлов в формате 8.3, используемом DOS, чтобы гарантировать самую высокую возможную совместимость. В случае конфликтов имен (различные файлы имеют то же самое 8.3 имя), в именах файлов используются числа, и информация относительно выбранного имени файла печатается в STDERR (обычно экран). Не паникуйте: Под Linux Вы никогда не будете видеть эти 8.3 имена файлов, потому что Linux использует RockRidge расширение, которое содержит первоначальную информацию о файле (разрешения, имя файла, и т.д.).

Помните о необходимости использовать опцию -J (MS Joliet расширение) или использовать mkhybrid, если Вы хотите создать более дружественный с Windows CD-ROM. О создании HFS CD-ROM-ов, используемых на Macintosh, и больших подробностей об опциях, вам лучше прочесть man-страницу старшей сестры mkisofs - mkhybrid.

Сейчас Вы можете удивиться, почему выход mkisofs не послан непосредственно на устройство записи CD. Этому есть три причины:

  • mkisofs ничего не знает об устройствах записи CD.

  • Вы можете захотеть протестировать образ перед записью.

  • На медленных машинах это было бы не надежно (см. секцию 4.)

Метод записи CD-R за один проход описан ниже.

Можно предусмотреть создание дополнительного раздела и записывать образы CD на этот раздел, а не в файл. Я против такой стратегии, потому что, если Вы записываете на неправильный раздел (из-за ошибки при наборе команды), Вы можете полностью потерять Linux-систему (читайте: это уже со мной случалось). Кроме того, это - трата дискового пространства, потому что образ CD - временные данные, которые могут быть удалены после записи CD. Однако использование отдельного раздела сохраняет время при удалении файла размером 650Мб.

Проверка образа CD

Linux может монтировать файлы, как разделы диска. Этот свойство полезно для проверки расположения каталогов образа CD и прав доступа к файлам на CD. В то же время носители сейчас очень дешевы, а процесс записи продолжителен, и Вы, по крайней мере, можете захотеть сохранить время быстрым тестированием.

Чтобы смонтировать файл cd_image созданный ранее в каталог /cdrom, дайте команду

mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom

Теперь Вы можете проверить файлы в /cdrom, они выглядят точно так, как они будут выглядеть на реальном CD. Для де-монтирования CD-изображения просто umount /cdrom. (Предупреждение: в ядрах Linux до 2.0.31 последний файл на /cdrom не может быть считан. Пожалуйста, используйте более позднее ядро, например 2.0.36. Опция -pad для cdrecord применима только к аудио CD дискам, а опция -pad для mkisofs требует заплаты, которую труднее применить, чем обновить ядро на свободное от ошибок).

Обратите внимание:

Некоторые древние версии mount не способны работать с петлевыми устройствами. Если у Вас такая старая версия mount, это - повод обновить вашу Linux-систему. Несколько людей уже предложили помещать в это HOWTO информацию относительно того, как получить самые новые утилиты монтирования. Я всегда отказываюсь от этого. Если Ваш дистрибутив Linux поставляется с древним mount, воспринимайте это как ошибку. Если Ваш дистрибутив Linux трудно обновляем: воспринимайте это как ошибку. Если бы я включил всю необходимую информацию о работе с ошибками плохих дистрибутивов Linux, этот HOWTO был бы намного больше и тяжелее для чтения.

Запись CD образа на CD

Эта секция охватывает запись только данных на CD в TAO режиме, так как это наиболее часто используемый режим записи данных. Подробнее о различии между DAO и TAO смотрите в главе об аудио CD. Если Вы используете DAO режим с утилитой cdrdao, не забудьте добавить фиктивную аудио дорожку в конец TOC файла (см. README).

Больше нечего делать. Если Вы не устали, лучшее время для команды

cdrecord -scanbus

Она должна сказать Вам к какому SCSI-устройству подсоединен Ваш CD-writer. Все прочие методы догадок об информации так любезно выводимой cdrecord-ом удалены из HOWTO.

Перед тем, как показать последнюю команду, позвольте предупредить Вас, что устройства записи CD должны обеспечиваться постоянным потоком данных. Таким образом, процесс записи образа CD не должен прерываться, или в результате CD будет испорчен. Достаточно просто прервать поток данных, удаляя большой файл. Например: если Вы удаляете предыдущий образ размером 650Мб, ядро должно обновить информацию о 650000 блоках на жестком диске (предполагается размер блока 1кб на Вашей файловой системе). Это требует некоторого времени и очень похоже на замедление дисковой активности, достаточной для остановки потока данных на несколько секунд. Однако, чтение почты, просмотр web или даже компиляция ядра обычно не сказывается на процессе записи на современных машинах.

Пожалуйста, обратите внимание, что нет устройства записи, которое может после сбоя снова установить лазер и продолжить запись с того же места на CD. Следовательно, любые сильные колебания или механический удар, вероятно, уничтожит CD, который Вы пишете.

Если Вы мысленно подготовлены, оденьте черный халат, умножьте SCSI-id устройства CD на номер версии SCSI и зажгите столько же свечей, произнесите две главы ASR-FAQ (группа новостей alt.sysadmin.recovery) и в конце наберите: (прим. пер.: вовсе не обязательно выполнять все эти религиозные обряды :)

shell> SCSI_BUS=0   # taken from listing 1 "scsibus0:"
shell> SCSI_ID=6    # taken from listing 1 "TOSHIBA XM-3401"
shell> SCSI_LUN=0
shell> cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
                   -data  cd_image

# то же, что и выше, но короче:
shell> cdrecord -v speed=2 dev=0,6,0  -data  cd_image

Для лучшей читаемости, координаты устройства записи помещены в три переменные окружения с именами: SCSI_BUS, SCSI_ID, SCSI_LUN

Если Вы используете cdrecord для перезаписи CD-RW, чтобы стереть старое содержимое Вы должны добавить опцию "blank=...". Чтобы больше узнать о различных методах очистки содержимого CD-RW прочтите man-страницу.

В то время, когда каждый, исключая меня, имеет 400МГц машину, люди направляют выход mkisofs прямо на cdrecord:

shell> IMG_SIZE=`mkisofs -R -q -print-size private_collection/  2>&1 \
| sed -e "s/.* = //"`
shell> echo $IMG_SIZE
shell> [ "0$IMG_SIZE" -ne 0 ] && mkisofs -r  private_collection/  \
|cdrecord  speed=2  dev=0,6,0
            tsize=${IMG_SIZE}s  -data  -
#            не забудьте s --^     ^-- чтение данных с STDIN

Первая команда запускается для определения размера образа (для этого Вам нужен mkisofs из дистрибутива cdrecord). Вы должны указать все параметры, которые будете использовать при окончательном запуске (такие как -J или -hfs). Возможно, Ваш writer не требует указания размера образа, тогда Вы можете это пропустить. Полученный размер должен быть подставлен как tsize-параметр для cdrecord (он помещается в переменную окружения IMG_SIZE). Вторая команда - последовательность соединенных в поток mkisofs и cdrecord.

Запись аудио-CD

Запись аудио-CD очень похожа на шаги, описанные выше для CD с данными. Вы можете выбрать между двумя методами: DAO и TAO. TAO (дорожка за раз) - менее подходит для музыки, так как вы будете слышать щелчок между отдельными дорожками. Все равно он описан первым, так как с ним немного проще работать, а DAO поддерживается не всеми устройствами.

Главное отличие по сравнению с CD с данными в формате образов. ISO-9660 (или любая предпочитаемая файловая система) не подойдет, так как проигрыватель аудио CD не умеет обращаться с файловыми системами. Вместо этого аудио данные должны быть записаны как 16-битные стерео сэмплы в PCM кодировке с 44100 сэмплов/секунду (44.1 kHz).

Одна из утилит для преобразования звуковых файлов в требуемый формат - sox. Использовать ее просто:

shell> sox  killing-my-software.wav  killing-my-software.cdr

Эта команда должна преобразовать песню killing-my-software из WAV-формата в CDR-формат. См. man-страницу sox для подробностей о форматах и расширениях файлов, которые распознает sox. Т.к. преобразование требует много дискового пространства, в cdrecord была встроена функция преобразования из WAV и AU. Теперь, если Ваши файлы имеют расширение .wav или .au (и формат стерео 16 бит 44.1 кГц), Вы можете использовать их как образы без ручного преобразования в CDR-формат. Однако cdrecord требует, чтобы размер звуковых данных было целое, умноженное на 2352 и не более чем 705,600 байт, что не так для некоторых WAV файлов. В таких файлах, используя sox, нужно дополнить аудио данные до 2352 байт.

Запись аудио CD (TAO)

Аудио CD состоит из аудио дорожек, которые организованы как отдельные образы при использовании TAO режима. Поэтому если вы хотите 10 дорожек на Вашем CD, вы должны сделать десять образов.

Если указана опция -audio, то cdrecord записывает образы как аудио дорожки. Другие опции идентичны используемым при записи CD с данными (если у Вас не очень особые требования). Эти три примера делают одно и то же, но читают дорожки различных форматов звуковых файлов:

shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.cdr track2.cdr...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.wav track2.wav...
shell> cdrecord -v speed=2 dev=0,6,0  -audio  track1.au  track2.au...

Если Вы так сделаете, вы получите аудио CD с 2-х секундными паузами между дорожками. Один известный формат не поддерживаемый cdrecord - MPEG Layer 3. Для конвертирования файлов этого формата в CDR-формат, Вы можете использовать команду "mpg123 --cdr - track1.mp3 > track1.cdr". Опция --cdr гарантирует, что дорожка кодируется в требуемый формат (см. выше). Старые версии mpg123 для вывода на stdout требуют -s вместо простого -. Обратно (конвертировать из WAV в MPEG) можно с LAME для WAV-файлов (извлеките дорожку с аудио CD с помощью cdda2wav и закодируйте ее в MP3 с помощью LAME).

Для создания CD_R из кучи MP3 файлов, Вы можете использовать следующую командную последовательность:

for I in *.mp3
do
    mpg123 --cdr - "$I" | cdrecord -audio -pad -nofix -
done
cdrecord -fix

В зависимости от скорости Вашей машины, Вы можете снизить скорость записи до "speed=1" (опция cdrecord). Если вы используете "speed=4", Ваша машина должна быть способна проигрывать MP3 файлы с учетверенной скоростью. mpg123 требует много процессорного времени! Если Вы волнуетесь, попробуйте просто с опцией -dummy (оставит лазер выключенным).

DAO

Если Вы хотите избежать пауз между звуковыми треками, вы должны использовать disk-at-once (DAO) вместо описанной выше записи track-at-once (TAO). В настоящее время DAO поддерживается в основном в cdrdao. Более подробно на ее домашней странице.

Если вы изготавливаете CD в DAO режиме, Вы должны использовать монолитный образ (звуковой файл) и задать информацию о дорожках в конфигурационном файле.

CD_DA
TRACK AUDIO
FILE "live.wav" 0 5:0:0
INDEX 3:0:0
TRACK AUDIO
FILE "live.wav" 5:0:0 5:0:0
TRACK AUDIO
FILE "live.wav" 10:0:0 5:0:0
INDEX 2:0:0

Смешанные CD-ROM-ы

Здесь не нужно много говорить. Просто укажите типы (последовательно) образов с опцией -data и -audio. Пример:

cdrecord  -v dev=0,6,0  -data  cd_image  -audio  track*.cdr