Запись 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