"If to smoke you turn I shall not cease to fiddle while you burn." (Император Нерон о рождении его собственных классических-CD AD64. Он не понимал это полностью.)
Обычно запись CD под Linux выполняется в 2 шага:
cdrecord
Эта глава описывает шаги для data-CD и audio-CD более детально.
Обычно это занимает больше времени, чем Вы ожидаете. Не забудьте, что отсутствующие файлы не могут быть добавлены, как только CD записан и зафискирован.
Также напомните, что некоторое количество дискового пространства CD используется для помещения информации о ISO-9660 файловой системе (обычно несколько мегабайт). 620Мб данных всегда поместится на 650Мб CD-R.
Перед использованием любого носителя (например гибкого диска, жесткого диска или 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Метод записи CD-R за один проход описан ниже.
Можно было подумать о создании дополнительного раздела для этого и записывать изображения на тот раздел взамен файла. Я против такой стратегии, потому что, если Вы записываете на неправильный раздел (из-за ошибки при наборе команды), Вы можете полностью потерять Linux-систему (читайте: это уже со мной случалось). Кроме того, это - трата дискового пространства, потому что CD-изображение - временные данные, которые могут быть удалены после записи CD. Однако использование сырого раздела сохраняет время при удалении файла размером 650Мб (Если у Вас достаточно дискового пространства, дополнительный раздел может сохранить Вам время на удаление образа).
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 был бы намного больше и тяжелее для чтения.
Больше ничего не осталось делать. Если Вы не устали, лучшее время для команды
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 non-mandatory но это дает создать командную строку подобную той, которая используется для записи 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, соединенные в поток.
Запись 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, которые имеют двухсекундные паузы между треками.
Если Вы хотите избежать пауз между звуковыми треками, вы должны использовать disk-at-once (DAO) вместо track-at-once (TAO) записи описанной выше. В настоящее время DAO поддерживается в основном в cdrdao. Пожалуйста смотрите ее домашнюю страницу для подробностей.
Используя параметр read-cd, Вы также можете создавать 1:1 копии audio-CD.
Осталось немного сказать. Просто укажите типы (последовательно) образов с опцией -data и -audio. Пример:
cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr