Kapitel 7. Brænding af cd'er

Linux understøtter cd-brænding på alle drev fremstillet siden 1999, hvor en standardisering af cd-brændere slog igennem. Desuden er en række ældre brændere understøttet; den fulde liste findes på adressen http://www.fokus.fraunhofer.de/research/cc/glone/employees/joerg.schilling/private/cdwriters-2.0.html.

De fleste moderne distributioner sørger automatisk for at der kan brændes cd'er, såfremt der er tilsluttet en brænder under installation af distributionen.

Der findes ét meget anvendt brænderprogram under Linux; det hedder cdrecord og følger med stort set alle distributioner. cdrecord er et tekstbaseret program med en mængde muligheder, så det kan være lidt tungt at danse med. Derfor findes også en række grafiske programmer, der fungerer som lettilgængelige overbygninger af cdrecord. Nogle meget benyttede grafiske programmer er X-CD-Roast og gcombust.

Hvis ikke cdrecord er installeret på dit system, så start med at gøre dette. Så er det nemt at se om brændersystemet kører som det skal. Ved at give kommandoen cdrecord -scanbus udskrives en liste over de drev, der er genkendt:

[root@linus /]# cdrecord -scanbus
Cdrecord 2.0 (i586-mandrake-linux-gnu) Copyright (C) 1995-2002 Jörg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
scsibus0:
        0,0,0     0) 'PIONEER ' 'CD-ROM DR-744   ' '1.02' Removable CD-ROM
        0,1,0     1) 'LITE-ON ' 'LTR-12101B      ' 'LS3J' Removable CD-ROM
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *

Her ses at systemet har fundet to drev. Det første er et almindeligt cd-rom-drev, det andet er brænderen. Det er ikke umiddelbart muligt at se forskel, men hvis man kender mærket på sin brænder burde man kunne finde den i listen. Da cdrecord kan se flere drev, er det nødvendigt at mærke sig hvilket af dem, der skal anvendes. I dette tilfælde er det drevet med nummeret 0,1,0. Sådan et nummer skal altid bruges når man vil brænde, også hvis brænderen er det eneste drev, man har i maskinen.

I det følgende vil der blive gennemgået hvad man kan gøre hvis ens brænder ikke umiddelbart bliver genkendt. Der vil derefter kort blive gennemgået en enkelt af de nemme grafiske overbygninger til cdrecord. Endelig bliver det vist hvorledes cdrecord (og et par hjælpeprogrammer) benyttes fra kommandolinjen, til at lave cd'er med enten data, musik eller begge dele.

Man skulle således være godt i gang med brænding efter at have læst dette kapitel. En mere detaljeret gennemgang af cd-brænding under Linux findes i http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html. Her er især svar på mange mulige komplikationer, som ikke er dækket i indeværende tekst.

7.1. Opsætning af brænder på hjemmebygget kerne

I dette afsnit beskrives hvorledes en Linux-kerne bringes til at genkende en brænder. Hvis brænderen allerede genkendes med kommandoen cdrecord -scanbus som beskrevet ovenfor, kan dette afsnit derfor springes over. Har man imidlertid selv hentet sin kerne fra http://www.kernel.org eller kan ens distribution af én eller anden grund ikke finde brænderen, så må man selv til at rode lidt dybere.

Programmet cdrecord understøtter kun SCSI-brændere. Uanset hvad, skal man derfor i indstillingerne til kernen aktivere SCSI-understøttelse. Dette gøres ved under "SCSI support" at aktivere "SCSI CD-ROM support" og "SCSI generic support". Hvis dette er gjort, vil man på det kørende system have et bibliotek ved navn /proc/scsi/.

Hvis man ejer en SCSI-brænder, så skal man endvidere sørge for at ens SCSI-controller er understøttet af Linux, så virker cdrecord uden videre. Dette sker under kernens indstillinger for "SCSI low-level drivers", hvor man blot vælger det SCSI-kort, man nu engang ejer.

Har man i stedet en IDE-brænder, så skal der sættes IDE-SCSI emulering op, således at brænderen overfor cdrecord fremstår som en SCSI-brænder. De fleste brændere er af IDE-typen, og er man i tvivl hvad man har, så er det ganske sikkert en IDE-brænder.

7.1.1. IDE-SCSI emulering

For at få en IDE-brænder til at fremstå som en SCSI-brænder må man gøre to ting. Det første er at kernen skal oversættes med support for ide-scsi, scsi-cdrom, generic scsi og ide-cd. Desuden skal den hidtidige IDE-understøttelse fjernes, så de to systemer ikke træder hinanden over tæerne.

Det man skal være opmærksom på under kerne-oversættelsen er menupunkterne "SCSI emulation support" samt "Include IDE/ATAPI CDROM support" under afdelingen "IDE, ATA and ATAPI Block devices", som igen findes under "ATA/IDE/MFM/RLL support". Disse valg er i tilgift til "SCSI CD-ROM support" og "SCSI generic support" som beskrevet ovenfor. Man kan frit vælge om tingene skal bygges direkte ind i kernen, eller om de skal laves som moduler. I det følgende er det dog antaget at der benyttes moduler.

Når man har fået bygget sig en kerne med de rette elementer, skal man sørge for at fjerne den normale IDE-cd understøttelse. Det skal ske i opstarten af Linux, hvor man skal give parametren hdx=ide-scsi, forudsat at ens brænder har navnet hdX. Hvis man er i tvivl, hvilket navn, brænderen har, kan man bruge følgende kommando, som vil udskrive en liste over de cd-drev (brænder eller ej), der er fundet af Linux:

[root@linus /]# 
for d in /proc/ide/hd*; do [ $(<$d/media) = cdrom ] && echo ${d##*/}; done

hdc
hdd

I dette tilfælde er der altså to drev i maskinen, og man skal tilføje hdc=ide-scsi hdd=ide-scsi som parameter til kernen. Dette vil give IDE-SCSI-emulering både for brænderen og for det normale cd-rom-drev, men det er også helt i orden; emuleringen er ikke forbeholdt brændere.

Bruger man LILO til at starte Linux skal man ind og ændre i /etc/lilo.conf. Her skal man tilføje til en append linje:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
lba32
image=/boot/vmlinuz-2.4.17-6
        label=linux
        append="apm=on hdc=ide-scsi hdd=ide-scsi"
        root=/dev/hda5
        read-only

I ovenstående eksempel fandtes i forvejen append="apm=on", og vi har så udvidet med vores parametre. Findes linjen ikke i forvejen, laver man den blot selv.

Efter tilføjelsen køres /sbin/lilo og maskinen skal så genstartes for at glemme alt om IDE-drevet.

Mandrake vil endda selv prøve at indsætte de nødvendige rettelser til /etc/lilo.conf.

Hvis man i stedet bruger GRUB til at starte Linux, skal parametren skrives i en kernel linje i /etc/grub.conf:

title Red Hat Linux (2.4.20-18.8)
        root (hd0,1)
        kernel /boot/vmlinuz-2.4.20-18.8 ro root=LABEL=/ hdc=ide-scsi hdd=ide-scsi
        initrd /boot/initrd-2.4.20-18.8.img

Hvis endelig man kører med loadlin (opstart fra DOS/Windows), så kan man lave en linje i autoexec.bat med

c:\linux\loadlin c:\linux\vmlinuz.244 root=/dev/hdb5 ro hdc=ide-scsi hdd=ide-scsi

Her er loadlin.exe i c:\linux, der bruges en kerne vmlinuz.244 med system-roden på /dev/hdb5 og til de to cd-drev hdc og hdd anvendes IDE-SCSI-emulering.

Efter genstart af systemet kan man nu skrive

[root@linus /]# /sbin/modprobe sg
[root@linus /]# /sbin/modprobe ide-scsi

Så skulle IDE-SCSI-emuleringen være i orden, og drevene være synlige via cdrecord -scanbus.

Vil man automatisere dette, så man ikke skal skrive modprobe-linjerne efter hver genstart af maskinen, kan man på mange distributioner finde filen /etc/modules. I denne fil står navne på moduler, som automatisk skal indlæses ved opstart. Man kan altså tilføje følgende linjer og behøver så ikke huske at indlæse modulerne selv:

sg
ide-scsi

For at kunne bruge det drev, der er lavet IDE-SCSI-emulering på, som almindeligt cd-rom-drev også, skal der laves en sidste ændring. /dev/cdrom peger sandsynligvis på et IDE-cd-drev.

[root@linus /]# ls -l /dev/cdrom
lrwxrwxrwx    1 root     root            4 Dec 30 22:03 /dev/cdrom -> hdc

Eftersom der nu er lavet en IDE-SCSI-emulering, så eksisterer cd-drevet ikke længere på IDE-bussen på systemet, men på den emulerede SCSI-bus. Derfor har den også fået et nyt navn, nemlig /dev/scd0 (tallet nul er dog afhængigt af om der er andre SCSI-enheder i systemet), og så skal /dev/cdrom også ændres til at pege det korrekte sted hen.

[root@linus /]# rm /dev/cdrom
[root@linus /]# ln -s /dev/scd0 /dev/cdrom
[root@linus /]# ls -l /dev/cdrom
lrwxrwxrwx  1 root root 4 Dec 30 22:03 /dev/cdrom -> /dev/scd0