Запись CD в Linux

Запись CD в Linux "Испорченный С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
Вот и все. Успешной вам записи компакт-дисков!

X-Stranger, xstranger@tut.by

(c) компьютерная газета


Компьютерная газета. Статья была опубликована в номере 46 за 2001 год в рубрике soft :: linux

©1997-2024 Компьютерная газета