Следваща точка Предишна точка Съдържание


3. Изпичане на CD-та

"If to smoke you turn I shall not cease to fiddle while you burn." (Roman emperor Nero about burning his own classic-CDs, AD64. He misunderstood it completely and burned Rome down.)  (Б.П. За бога братя – това не мога да го преведа!)

Записа на CD-ROM преминава през следните два етапа под Linux:

Тази точка обяснява детайлите при запис на аудио CD и CD с данни.

3.1 Запис на CD-та с данни

Забележете, че събирането на данните за CD-то обикновено отнема повече време от очакваното. Забравени файлове не могат да бъдат прибавени към вече записано CD-R със затворена сесия (вервайте ми J). Това се отнася и за CD-RW, които само могат като цяло да бъдат презаписани. Използването на мулти-сесийност не е добър избор за единични файлове, тъй като всяка нова сесия заема много място за създаването на table of contents (TOC), т.е. с други думи “FAT таблицата на CD-то”. UDF не се поддържа още от Луникс.

Имайте предвид, че записа на информация за ISO-9660-файловата система “изяжда” няколко мегабайта.

Създаване на имейдж (image) файл

Преди запаметяващото устройство (няма значение дали е флопи, твърд диск или CD) да бъде използвано, то трябва да има присвоена файлова система. Файловата система отговаря за организацията и обединяването на данните във файлове, които ще се запишат на CD-то.

Стандартния начин за създаване на файлова система на партициите на твърдия диск е да се запише празна файлова система върху тях, която след това да бъде монтирана и запълвана с файлове от потребителите. CD-R-рите се записват еднократно и ако се форматират с празна файлова система, те си остават празни завинаги. (Уф, така както го преведох и на мен не ми стана ясно...)

Затова се нуждаем от програма, която създава необходимата файлова система, докато копираме файловете на CD. Тази програма се нарича mkisofs. Най-простия начин за използването и изглежда така:

 
mkisofs  -r   -o cd_image   private_collection/
              `---------'   `-----------------'
                   |               |
          записва изхода към   взема директорията като вход

Опцията '-r' задава разрешение на всички файлове да бъдат достъпни за четене от CD-то и включва RockRidge-разширение. Използвайте тази опция. Ако не – значи е добре да знаете точно какво правите. (без '-r' монтирането по-късно ще даде разрешение само за частно ползване).

mkisofs ще се опита да запише имената на файловете в  DOS 8.3 формат (8 за името и 3 за разширението) за възможно най-голяма съвместимост. В случай на конфликт (различни файлове имат едно и също 8.3 име), ще се използват цифри за имената и информация за изборът на имена ще се принтира чрез STDERR (обикновено на екрана). Не се шашкайте: Под Linux вие никога няма да ги виждате като 8.3 имена, защото Linux използва Rock Ridge разширението, което съдържа оригиналната информация за файла (разрешение, наименование и др.).

Не забравяйте да използвате опцията -J (MS Joliet разширение) или използвайте mkhybrid ако искате да създадете Windows-съвместими CD-та. За CD-та използвани от Macintosh, най-добре прочетете справочната страница на mkhybrid – там има много подробности.

Сега вие ще кажете: И що така изхода от mkisofs не се подава директно на записващото устройство? (аз даже питах във форума на www.linux-bg.org :). Ето и причините:

Има си начин и за директен запис на CD-R и той ще бъде разгледан по-надолу.

Лоша идея е създаването на отделен дял на HDD-то за запис на image файлове там, поради следните причини: Може да се объркате и да запишете image-то върху грешния дял и да си скапите Linux-а (Като онзи с Norton Commander и двете c:\ :) Освен това image-то винаги може да се изтрие и да не заема място, а HDD-дял – не (може, ама по-трудно).

Тестване на CD-image-то

Linux има възможност да монтира файлове, все едно че те са отделни дялове от твърдия диск. Това е полезно, защото може да проверите имената на директориите, правата за достъп до файловете и т.н. на CD image-то преди изпичане. В днешно време CD-подложките са много евтини, но записа все пак отнема време, затова можете да спестите време и малко пари чрез една превантивна проверка.

За да монтирате файла cd_image в директорията /cdrom, изпълнете командата:

 
mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom

Сега може да проверите файловете под /cdrom – те ще се появят, все едно че са на истинско CD. За да демонтирате CD-image-то, просто изпълнете: umount /cdrom. (Трябва да сте с ядро над 2.0.36)

Забележка:

Някои стари версии на mount не са способни да работят с loopback устройството. Ако имате стара версия на mount, тогава си ъпгрейдвайте Linux-системата.

Записване на CD-image-то на CD

Тази точка се отнася само за запис на данни в TAO формат (Track At Once), защото това е най-често използвания формат за данни. За информация относно разликата между  TAO и DAO (Disk At Once), вижте точката за аудио CD-R. Ако използвате DAO формат с инструмента  cdrdao, тогава не забравяйте да прибавите фиктивен audio track в края на  TOC файла (виж README).

Не остана още много за правене. Ако все още не сте се изморили, време е за командата:

 
cdrecord -scanbus

Това ще ви каже като какво SCSI устройство е прикачена вашата CD-записвачка.

Преди да ви покажа последната команда, позволете ми да ви предупредя, че CD-R-те трябва да бъдат запълвани с константен поток от данни. Процесът на запис на CD image-то на CD трябва да не се прекъсва или в резултат подложката ще се “счупи”. Лесно е да прекъснете потока от данни чрез изтриването на много голям файл. Например: ако по време на записа изтриете старо CD-image, голямо 650МБ, ядрото трябва да обнови информация за 650,000 блока на твърдия диск (ако блоковете са по 1 Kbyte) (Б.П. – те в днешните файлови системи май са по 4КБ, така че 650000/4=162500 – пак не е малко, но пък и компютрите са доста по-бързи от преди 1,5г... абе трябва да се пробва :). Това обикновено отнема време и забавя дисковата активност, достатъчно за пауза в подаването на данни към записвачката за няколко секунди. Както и да е, четенето на е-mail, браузването на web, или дори компилирането на ново ядро няма да “прецакат” нищо на по-новите машини.

Другото, което се подразбира – да няма вибрации и механични удари, защото това със сигурност ще скапе подложката.

Когато сте готови умствено и душевно, облечете си черна роба, умножете SCSI-id на CD-записвачката със SCSI-ревизията и запалете няколко свещи, произнасяйки стихове, относно ASR-FAQ (newsgroup 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.

Ако използвате cdrecord за презаписване на CD-RW, трябва да прибавите опцията "blank=..." за изтриване на старата подложка. Полезно е да се прочете man страницата за повече подробности за различните методи на запис на празна CD-RW подложка.

Всеки с над 400 Mhz машина, може да прати изхода от 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  -
#       don't forget the s --^         ^-- read data from STDIN

Първата команда определя големината на image-то (трябва да има инсталиран mkisofs от cdrecord пакета, за да работи). Може да укажете всички параметри, които ще използвате: ( -J или -hfs). Записвачката няма нужда да знае големината на image-то, което ще се записва,  затова няма нужда тя да се задава (големината). Големината трябва да се посочи като tsize-параметър към cdrecord (запаметява се в променливата IMG_SIZE). Втората команда е секвенция на mkisofs и cdrecord, чрез конвейер.

 

3.2 Изпичане на аудио CD-та

Изпичането на аудио CD-та много прилича на това на CD-та с данни. Може да избирате между 2 техники: DAO или TAO. TAO (track at once) не е подходяща за музика, защото ще чувате изпуквания между отделните песни. TAO ще бъде разгледана все пак, защото е по-лесна за използване а и DAO все още не се поддържа от всички видове записвачки все още (Б.П. - но към днешна дата не може да не се поддържа).

Главната разлика в сравнение със записа на CD-R-и с данни е формата на image-тата. ISO-9660 (или която там файлова система предпочитате) тук не върви, защото няма CD плеъри, способни да плейват от ISO-9660. Аудио данните трябва да бъдат записани в "16 битово стерео с PCM кодиране 44100 семпли/секунда (44.1 kHz)".

Една от програмите за конвертиране на вашите звукови файлове в необходимия формат е sox. С нея се работи много лесно:

 
shell> sox  killing-my-software.wav  killing-my-software.cdr

Командата конвертира песента killing-my-software от WAV-формат в CDR аудио формат. Вижте man страницата на sox за повече подробности, относно форматите и файловите разширения, с които sox може да работи. Понеже изхода от ръчното конвертиране заема много дисково пространство, в cdrecord е включена поддръжка за форматите WAV и AU. Така щам вашите файлове са с разширения *.wav или *.au (и са във формат "stereo, 16 бита, 44.1 kHz"), може да ги записвате директно без първо да ги конвертирате в CDR формат. Както и да е, cdrecord изисква големината на звуковите файлове да бъде число, което се дели на 2352 и е по-голямо от 705,600 байта, и това не е така за всички WAV файлове. sox допълва тези файлове до 2352 байта.

Запис на аудио CD-та (TAO)

Аудио CD-то съдържа пътечки, които са организирани като различни image-та когато се използва TAO формата. Затова ако искате да имате 10 песни на CD, трябва да направите и 10 image-та.

Cdrecord записва CD image като аудио пътечки ако опцията -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...

Това ще доведе до създаване на аудио CD с 2 секундна пауза между парчетата. Един от известните формати, който не се чете директно от  cdrecord е MPEG Layer 3. За да се конвертират файлове от този формат в CDR-формат, може да използвате командата "mpg123 --cdr - track1.mp3 > track1.cdr". Опцията --cdr осигурява кодирането на файла в изисквания формат (виж по-долу). Другите възможности (конвертиране от WAV към MPEG) може да бъде направено с LAME за WAV-файлове (файловете се екстрактват с cdda2wav от аудио CD и се кодират в MP3 с помощта на LAME).

За да създадете CD-R от множество MP3-файлове, може да използвате скрипта по-долу:

 
for I in *.mp3
do
    mpg123 --cdr - "$I" | cdrecord -audio -pad -nofix -
done
cdrecord -fix

В зависимост от бързината на вашата “щайга”, може да намалите скоростта на запис със "speed=1" (cdrecord опция). Ако използвате "speed=4", щайгата трябва да може да плейва MP3-файлове с четворна скорост. mpg123 натоварва CPU-то! Ако се двоумите, направете първо проба:

-dummy (cdrecord опция – държи лазера изключен).

DAO

Ако искате да премахнете паузите между парчетата, трябва да използвате disk-at-once (DAO) запис версията. Поддръжката на DAO е по-добра в  cdrdao. Вижте man за подробности.

Ако записвате CD в DAO формат, тогава трябва да използвате монолитен image (звуков файл) и да контролирате информацията за парчетата чрез конфигурационен файл:

 
CD_DA
TRACK AUDIO
FILE "live.wav" 0 5:0:0
INDEX 3:0:0
TRACK AUDIO
FILE "live.wav" 5:0:0 5:0:0
TRACK AUDIO
FILE "live.wav" 10:0:0 5:0:0
INDEX 2:0:0

3.3 Смесени (Mixed mode) CD-R

Няма какво толкова да се каже по този въпрос. Просто индикирайте типа на image-тата с опциите -data и -audio. Пример:

 
cdrecord  -v dev=0,6,0  -data  cd_image  -audio  track*.cdr

Следваща точка Предишна точка Съдържание