Следваща
точка Предишна
точка Съдържание
"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:
cdrecord
Тази точка обяснява детайлите при
запис на аудио CD и CD с
данни.
Забележете, че събирането на
данните за CD-то обикновено отнема повече време от очакваното.
Забравени
файлове не могат да бъдат прибавени към вече записано CD-R със затворена сесия (вервайте ми J). Това се отнася и за CD-RW, които само могат
като цяло да бъдат презаписани. Използването на мулти-сесийност не е
добър
избор за единични файлове, тъй като всяка нова сесия заема много място
за
създаването на table of contents (TOC), т.е. с други думи “FAT таблицата на CD-то”.
UDF не се поддържа още от Луникс.
Имайте предвид, че записа на
информация за ISO-9660-файловата система “изяжда” няколко мегабайта.
Преди запаметяващото устройство
(няма значение дали е флопи, твърд диск или 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 :). Ето и
причините:
mkisofs
не знае нищо за записвачката (в смисъл, че
записвачка може и да няма).Има си начин и за директен запис
на CD-R и
той ще бъде разгледан по-надолу.
Лоша идея е създаването на отделен
дял на HDD-то за запис на image файлове там, поради следните причини: Може да се
объркате и да запишете image-то върху
грешния дял и да си скапите Linux-а
(Като онзи с Norton Commander и двете c:\
:) Освен това image-то винаги може да се изтрие и да не заема място,
а HDD-дял – не (може, ама
по-трудно).
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-системата.
Тази точка се отнася само за запис
на
данни в 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, чрез конвейер.
Изпичането на аудио 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-то съдържа пътечки, които
са
организирани като различни 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 опция – държи
лазера
изключен).
Ако искате да премахнете паузите
между
парчетата, трябва да използвате 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
Няма какво толкова да се каже по
този
въпрос. Просто индикирайте типа на image-тата с опциите -data и -audio.
Пример:
cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr