Запись CD в Linux.

X-Stranger

"Испорченный СD-ROM может быть хорошей подставкой."
Народная мудрость.

Нарадовавшись, наконец, вашему Линуксу, нагулявшись с его программками и оболочками, в один прекрасный момент вам вдруг понадобилось записать CD из-под Linux, и вы с горечью обнаруживаете, что ничего об этом не знаете. Что же делать? Как это осуществить, призвана ответить данная статья.

Стоит отметить, что писать CD в Linux не сложнее, чем, скажем, в Windows. Есть набор специальных утилит, которые позволяют записать CD без особых проблем. Здесь стоит упомянуть, что для успешной работы ядро вашей системы должно быть скомпилировано с поддержкой вашего устройства, если это требуется.

Для записи CD в Линуксе используются следующие программы.

Консольные:
a) Пакеты для создания образов CD-R:
≈ mkisofs (ftp://tsx-11.mit.edu/pub/ linux/packages/mkisofs/);
≈ mkhybrid (ftp://ftp.ge.ucl.ac.uk/ pub/mkhfs).
b) Пакеты для записи образов на CD-R:
≈ cdrecord (ftp://ftp.fokus.gmd.de/ pub/unix/cdrecord/);
≈ cdrdao (http://www.ping.de/ sites/daneb/cdrdao.html)

Графические оболочки для консольных пакетов (для тех, кому требуется красивый интерфейс):
≈ X-CD-Roast ≈ программный пакет, посвященный простому созданию CD под Linux. Оболочка объединяет инструменты командной строки, такие как cdrecord и mkisofs, в хороший графический интерфейс. Взять ее можно по адресу: http://www.fh-muenchen.de/ho-me/ze/rz/services/projects/xcdroast/ e_overview.html.
≈ BurnIT ≈ оболочка на Java к cdrecord, mkisofs и cdda2wav. Доступна по адресу http://sunsite.auc.dk/BurnIT/.
≈ Xdaodio ≈ графическая оболочка к cdrdao. Главная ее цель ≈ работа с Audio-CD. Доступна по адресу http://www.lrz-muenchen.de/~MarkusTschan/.

Теперь перейдем непосредственно к процессу. Обычно, запись CD выполняется в два этапа:
1. упаковка желаемых данных (файлы, музыка или и то, и другое) в специальный формат;
2. запись файлов на CD-R с помощью утилиты cdrecord.
Как известно, существуют компакт-диски с данными (Data-CD), с музыкой (Audio-CD), а также и с тем, и с другим. Рассмотрим запись Data-CD.

Создание образа будущего CD-ROMа. Как известно, перед использованием любого носителя (будь то флоппик, жесткий диск или CD) надо создать файловую систему (отформатировать). Именно файловая система ответственна за организацию и доступ к файлам, которые будут записаны на носителе. Обычно, утилиты для создания файловой системы записывают на носители пустую файловую систему, которая затем монтируется и заполняется файлами пользователя. Но содержимое CD записывается только один раз и не подлежит изменению. Значит, нам нужен инструмент для создания готовой для записи на CD файловой системы, уже содержащей файлы, то есть так называемого образа компакт-диска. Этот инструмент называется mkisofs. Используется следующим образом: mkisofs -r -o cd_image path

Здесь:
≈ cd_image ≈ имя файла образа CD, который нужно создать;
≈ path ≈ путь, где лежат файлы, которые нужно записать на CD. Стоит отметить, что их суммарный размер не должен превышать емкость компакт-диска;
≈ опция '-r' устанавливает на все файлы права на чтение для всех пользователей. Если это не сделать, то будут записаны те права доступа, которые имели эти файлы у вас на винчестере.

Утилита mkisofs пробует отобразить все имена файлов в формате 8.3, который использует DOS. Это делается для того, чтобы гарантировать высокую совместимость.

Вы, конечно, спросите, а почему бы не дать утилите команду писать сразу на CD-writer? Этому есть три причины:
≈ mkisofs ничего не знает об устройствах записи CD;
≈ вы можете захотеть протестировать образ перед записью;
≈ на медленных машинах вы всего лишь испортите болванку.

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

Чтобы смонтировать файл cd_image, созданный выше, в каталог /cdrom, дайте следующую команду:
mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom

Теперь вы можете зайти в /cdrom и посмотреть на структуру вашего будущего CD. Для отмонтирования CD-образа дайте команду:
umount /cdrom

Запись CD-образа на CD. Подготовительные операции завершены. Для записи образа на компакт-диск дайте следующую команду:
cdrecord -v dev=your_device speed=4 -data cd_image

Параметр dev ≈ это идентификатор вашего устройства для записи компакт-дисков. Если вы не знаете, какому устройству соответствует ваш CD-Recorder, то дайте команду
cdrecord -scanbus

При этом утилита просканирует вашу систему и выдаст список найденных устройств, среди которых наверняка будет ваше. Параметр speed указывает скорость записи. Опция data говорит утилите о том, что будет создан data-CD. Последним параметром идет имя файла образа. Если вы используете cdrecord для перезаписываемых компакт-дисков (CD-RW), вы должны добавить опцию "blank=fast" (без кавычек) для стирания старого содержимого. Для получения более полной информации по cdrecord читайте man cdrecord, а также документацию к ней в /usr/doc/ (/usr/share/doc/).

Перед тем, как дать команду записи, стоит учесть следующее: устройства записи CD должны обеспечиваться постоянным потоком данных, так как у них зачастую маленький объем буфера. Т.е. процесс записи образа CD не должен прерываться, иначе в результате CD будет испорчен. Можно прервать поток данных, просто удаляя большой файл. Но в то же время, чтение почты, просмотр Сети или компиляция программы обычно не сказываются на процессе записи.

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

Теперь рассмотрим запись Audio-CD. Запись Audio-CD очень похожа на шаги, описанные выше. Есть два главных отличия:
1. Audio-CD состоит из аудио-треков, которые организованы как отдельные образы. Т.е. если вы хотите создать 10 треков на вашем CD, то вы должны создать десять образов.
2. Второе отличие ≈ формат образов не является форматом ISO9660, треки должны быть в формате стерео, 16-бит, PCM, 44.1КГц.

Одна из утилит для конвертирования звуковых файлов в требуемый формат это sox. Формат ее использования следующий:
sox linux_forever.wav linux_forever.cdr

Эта команда преобразовывает песню linux_forever из wav-формата в CDR-формат. Для более подробной информации по sox читайте man sox.

Но есть способ и лучше. Для удобства конечного пользователя в cdrecord была встроена функция преобразования из WAV и AU. То есть, если ваши файлы имеют расширение .wav или .au и формат стерео 16 бит 44.1 КГц, вы можете использовать их как образы без преобразования. cdrecord записывает образы как audio-треки, если указана опция -audio. Другие опции идентичны используемым при записи CD с данными. Следующие примеры демонстрируют запись Audio-CD с разными форматами звуковых файлов: cdrecord -v speed=4 dev=0,4,0 -audio track1.cdr track2.cdr...
cdrecord -v speed=4 dev=0,4,0 -audio track1.wav track2.wav...
cdrecord -v speed=4 dev=0,4,0 -audio track1.au track2.au...

Здесь вы можете задать справедливый вопрос: а если у меня есть любимые mp3шки и я хочу записать их на Audio-CD, то что же мне тогда делать? MPEG-3 файлы могут быть конвертированы в требуемый формат командой "mpg123 -s Bon_Jovi.mp3 > track.cdr". Здесь же стоит отметить, что эта команда создает файлы в специальном виде (byte-swapped), что требует использовать опцию -swab в cdrecord. Маленькая фича: для создания CD-R из кучи mp3шек файлов можно использовать следующую командную последовательность: for I in *.mp3
do
mpg123 -s $I | cdrecord -audio -pad -swab -nofix
done

Здесь mpg123 будет создавать треки, и они сразу же будут записываться на CD, причем вам не придется перечислять все файлы по отдельности. Но стоит отметить, что скорость работы mpeg123 и скорость записи cdrecord должны быть соизмеримы. Т.е. ваша машина должна быть достаточно быстрой. Возможно, потребуется использовать опцию speed утилиты cdrecord.

Как известно, Audio-CD записываются с двухсекундными паузами между треками. Если вы хотите избежать пауз между звуковыми треками, вы должны использовать disk-at-once (DAO), вместо track-at-once (TAO) записи, описанной выше. DAO-запись поддерживается утилитой cdrdao. Более подробно об этом читайте в man cdrdao и в документации к программе.

Теперь стоит рассказать о том, как записать диски, содержащие как данные, так и звуковые дорожки. Здесь все довольно просто: в параметрах к cdrecord вы сначала указываете образ с данными, а потом указываете звуковые треки. Например:
cdrecord -v dev=0,4,0 -data cd_image -audio track*.cdr

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

Как создать загрузочный CD-ROM. У вас должна быть в наличии 1.44Мб загрузочная дискета. Создайте точный образ дискеты командой: dd if=/dev/fd0 of=boot.img bs=18k.

Поместите этот образ в каталоге, содержащем коллекцию записываемых файлов, или в его подкаталоге. Сообщите mkisofs об этом файле, используя опцию '-b', а также используйте опцию '-c'.

Как создать multi-session CD. Прежде всего, образ мульти-сессионного CD должен быть создан с использованием файловой системы iso9660 с RockRidge-расширением. Вы должны будете использовать опцию -multi для cdrecord, если хотите добавлять следующие сессии. Вы должны использовать опцию -multi по крайней мере для первой сессии. Образы второй и последующих сессий немного сложнее в создании. Утилита mkisofs должна знать, где начинается свободное пространство на CD-R диске. Эта информация может быть получена утилитой cdrecord, используя опцию -msinfo. Например, даем следующие команды:
NEXT_TRACK=`cdrecord -msinfo dev=0,4,0`
echo $NEXT_TRACK
mkisofs -R -o cd_image2 -C $NEXT_TRACK -M /dev/scd0 private_collection/ \

Более подробно об этом можно прочитать в файле README. multi, который распространяется вместе с утилитой cdrecord.

Если вы не уверены, запишется ваш CD или нет, хотите проверить правильность опций для cdrecord, то есть возможность сделать это. Используйте опцию -dummy для выполнения холостого запуска cdrecord. При этом лазер остается выключенным и вам дается возможность делать все, что хочется, и при этом посмотреть, выживет ли процесс записи.

Использование символов национального алфавита в именах файлов. Использование имен файлов, содержащих символы русского языка, под Linux осложняется наличием трех кодировок и тем, что некоторые программы вообще не содержат поддержки символов национального алфавита. При использовании русских символов в именах файлов нужно учесть следующие обстоятельства:
≈ для обеспечения совместимости записанных дисков с DOS кодировка символов в ISO9660 должна быть CP866 и имена файлов в формате 8.3;
≈ некоторые DOS драйвера CDROM приводов могут не поддерживать не ASCII символы в именах файлов;
≈ для обеспечения совместимости записанных дисков с Windows необходимо добавлять расширение JOLIET, которое использует UNICODE кодировку имен файлов;
≈ некоторые версии UNIX систем не поддерживают JOLIET расширение (Linux поддерживает при наличии соответствующей опции при компиляции ядра) и, если требуется совместимость, с ними должно использоваться RockRidge расширение.

Старые версии mkisofs при составлении имен файлов в ISO9660 заменяют все не ASCII символы (в том числе и русские) на знак подчеркивания. Таким образом, без применения патчей к mkisofs невозможно записать диск совместимый с DOS. Как обстоит дело в новых версиях, мне не известно.

Универсальный метод ≈ включить оба расширения JOLIET и RockRidge на записываемый диск, причем RockRidge будет содержать символы в 8-битном представлении, как и в файловой системе, а для указания кодировки символов файловой системы при преобразовании в Joliet UNICODE программа mkisofs, поставляемая в комплекте с cdrecord, начиная с версии cdrecord-1.8.1, содержит опцию -jcharset. Список доступных кодировок можно получить, дав команду
mkisofs -jcharset help

Если ваша система использует кодировку koi8-r в качестве основной, то команда создания образа диска может быть такой: mkisofs -r -J -jcharset=koi8-r files_path image_path.

Если файлы для создания диска находятся не на разделе с линуксовой файловой системой, то, возможно, потребуется указать опции codepage и iocharset перед монтированием этой файловой системы. При монтировании раздела fat, fat32 и выбранной кодировке koi8-r это необходимо делать, например, так: mount -o codepage=866,iocharset=koi8-r /dev/hda5 /mnt/dos.

При монтировании NTFS: mount -o iocharset=koi8-r /dev/hda1/mnt/ntfs

Тогда будет осуществляться правильная трансляция имен файлов из файловой системы в желаемую кодировку. При монтировании компакт-диска с Joliet расширением для правильной трансляции имен файлов из UNICODE необходимо также указывать с опцией iocharset желаемую кодировку для отображения:
mount -o iocharset=koi8-r /dev/cdrom /mnt/cdrom

Вот и все. Успешной вам записи компакт-дисков!

Источник: http://www.nestor.minsk.by/kg



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости