Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Next Previous Contents

3. Создание CD

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

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

  • упаковка желаемых данных (файлы, музыка или и то, и другое) в файлы в специальном формате
  • запись файлов на CD-R с помощью cdrecord

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

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

Обычно это занимает больше времени, чем Вы ожидаете. Не забудьте, что отсутствующие файлы не могут быть добавлены, как только CD записан и зафиксирован.

Также напомните, что некоторое количество дискового пространства 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 расширение, которое содержит первоначальную информацию файла (разрешения, имя файла, и т.д.).

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

  • mkisofs ничего не знает о устройствах записи CD
  • Вы можете захотеть протестировать образ перед записью.
  • На медленных машинах это было бы не надежно (см. секцию 4.)

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

Можно было подумать о создании дополнительного раздела для этого и записывать изображения на тот раздел взамен файла. Я против такой стратегии, потому что, если Вы записываете на неправильный раздел (из-за ошибки при наборе команды), Вы можете полностью потерять 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 (Предупреждение: Если Вы не использовали опцию '-K ' для mkisofs, тогда последний файл на /cdrom не может быть полностью читаемым. Пожалуйста, используйте более позднее ядро, такое ка 2.0.36. опция -pad для mkisofs применяется только для audio-CD и необязательная опция -pad для mkisofs требует заплаты, которую труднее применить, чем обновить ядро на свободное от ошибок).

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

Некоторые древние версии mount не способны работать с петлевыми устройствами. Если у Вас такая старая версия mount, это - повод, чтобы обновить вашу Linux-систему.

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

Если бы я включил всю необходимую информацию при работе с ошибками плохих дистрибутивов Linux, этот HOWTO был бы намного больше и тяжелее для чтения.

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

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

cdrecord -scanbus

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

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

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

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

shell> SCSI_BUS=0   # взято из листинга  1 "scsibus0:"
shell> SCSI_ID=6    # взято из листинга  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. Опция -data не обязательна, но это дает создать командную строку подобную той, которая используется для записи audio-CD.

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

В то время, когда каждый, исключая меня, имеет 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). Может быть Ваш writer не требует указания размера образа, тогда Вы можете это пропустить. Полученный размер должен быть подставлен как tsize-параметр для cdrecord (он помещается в переменную окружения IMG_SIZE). Вторая команда - последовательность mkisofs и cdrecord, соединенные в поток.

3.2 Запись audio-CD

Запись audio-CD очень похожа на шаги описанные выше. Есть два главных отличия: audio-CD состоит из аудио треков, которые организованы как отдельные образы. Т.о. если Вы хотите создать 10 треков на Вашем CD, Вы должны создать десять образов. Второе отличие - формат образов не ISO9660 (или подготовленной файловой системы), а "16 бит стерео выборки в PCM кодировании на 44100 выборок/секунду (44.1кГц)".

Одна из утилит для конвертирования звуковых файлов в требуемый формат - 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 кГц), Вы можете использовать их как образы без ручного преобразования.

cdrecord записывает образы как audio-треки, если указана опция -audio. Другие опции идентичны используемым при записи 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...

Специальный случай MPEG-3 файлы, которые могут быть конвертированы в требуемый формат командой "mpg123 -s track1.mp3>track.cdr". (Предостережение: это создает файлы в байтовом порядке, что требует обращения используя опцию -swap в cdrecord). Другие направления могут быть сделаны с "8bz-mp3" для WAV файлов (извлечь трек с cdda2wav с CD и закодировать в MP# с 8Hz-mp3). Для создания CD_R из кучи MP3 файлов, Вы можете использовать следующую командную последовательность:

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

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

DAO

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

Используя параметр read-cd, Вы также можете создавать 1:1 копии audio-CD.

3.3 Mixed mode CD-ROM

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

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


Next Previous Contents