On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Запись CD в Linux

Нарадовавшись, наконец, вашему Линуксу, нагулявшись с его программками и оболочками, в один прекрасный момент вам вдруг понадобилось записать 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/var/www/ze/rz/services/projects/xcdroast/e_overview.html.
  • BurnIT v оболочка на Java к cdrecord, mkisofs и cdda2wav. Доступна по адресу http://sunsite.auc.dk/BurnIT/.
  • Xdaodio- графическая оболочка к cdrdao. Главная ее цель v работа с 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 v имя файла образа CD, который нужно создать;
  • path v путь, где лежат файлы, которые нужно записать на 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

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



Литература по Linux