De meeste mount opdrachten ondersteunen de user optie. Als je een regel maakt zoals het volgende voor in het bestand /etc/fstab:
/dev/sbpcd /mnt/cdrom iso9660 user,noauto,ro |
dan zal een gewone gebruiker het station met deze opdrachten kunnen mounten en unmounten:
% mount /mnt/cdrom % umount /mnt/cdrom |
Standaard zal de disc worden gemount met een aantal opties die helpen bij het afdwingen van een zekere mate van beveiliging (b.v. programma's die niet kunnen worden uitgevoerd, apparaatbestanden worden genegeerd). Als je dit te beperkend vindt, dan kun je extra opties gebruiken (b.v. de optie "exec" zal de uitvoering van programma's activeren). Ze de mount(8) man page voor details.
Een andere methode is het ophalen van het package usermount waarmee niet-root gebruikers verwijderbare devices zoals diskettes en CD-ROM's kunnen mounten en unmounten, maar de toegang tot andere devices (zoals harddiskpartities) beperkt. Het is beschikbaar op de grotere archiefsites.
Nog een andere optie is het gebruik van het programma sudo, waarmee gebruikers selectieve programma's met root-privileges kunen uitvoeren.
De disc kan niet van het bestandssysteem worden losgekoppeld als er nog een proces is dat het station benadert. Dit geldt ook voor de standaarddirectory dat is ingesteld op het gemounte bestandssysteem. Als je het proces dat de disc gebruikt niet kan identificeren, dan kun je de opdracht fuser toepassen, zoals in de volgende opdracht wordt getoond:
% umount /cdrom umount: /dev/hdd: device is busy % fuser -v /cdrom USER PID ACCESS COMMAND /mnt/cdrom tranter 133 ..c.. bash |
Op een aantal systemen moet je root zijn wanneer je de opdracht fuser draait om processen van andere gebruikers te kunnen zien.
Je moet hiervoor een regel toevoegen aan het bestand /etc/exports. Gebruikers op andere machines kunnen dan het device mounten. Zie de exports(5) man page voor details.
De meeste Linux distributies ondersteunt het direct booten van een Linux kernel van CD als alternatief voor het booten van een diskette. Hiervoor is een opstartbare CD en ROM BIOS en een CD-ROM nodig welke het booten van een CD ondersteunt.
De laatste versie van mkisofs ondersteunt het aanmaken van dergelijke disks met de El Torito standaard voor opstartbare CD's.
Heiko Eissfeldt (heiko@colossus.escape.de) en Olaf Kindel hebben een utility geschreven dat audio data inleest en het als een geluidsbestand in het .wav formaat opslaat. Het package wordt cdda2wav.tar.gz genoemd en het is te vinden op www.ibiblio.org.
Een ander utility om digitale audio te extraheren is cdparanoia beschikbaar vanaf http://www.xiph.org/paranoia.
Omdat CD-ROM stations zeer snel aan verandering onderhevig zijn, is het moeilijk een opsomming te geven van de modellen die het inlezen van digitale data ondersteunen. Het beste kun je het laatste cdda2wav of cdparanoia package ophalen en de documentatie lezen.
Zie de website http://www.tardis.ed.ac.uk/~psyche/cdda/ en de alt.cd-rom FAQ weergegeven in de sectie referenties voor meer informatie over dit onderwerp.
Op ISO-9660 geformatteerde discs zonder de Rock Ridge Extensies moet je de optie -noleaf aan de opdracht find meegeven. Zie de find(1) manpage voor details.
(In mijn ervaring gebruiken praktisch alle recente Linux CD's de Rock Ridge extensies, dus dit probleem zou zeer zeldzaam plaats moeten vinden).
Linux ondersteunt de meeste CD-R en CD-RW stations. De cdrecord en mkisofs tools kunnen worden gebruikt om CD's te branden. Er zijn bovendien vele grafische front-ends voor deze tools. Zie voor meer informatie de Linux CD-Writing HOWTO.
Een CD-ROM is een read-only media. Bij een aantal eerdere kernels kon je een CD-ROM read/write mounten; pogingen om gegevens naar de CD te schrijven werden eenvoudigweg genegeerd. Vanaf kernelversie 1.1.33 werd dit gecorrigeerd zodat CD-ROM's read-only moeten worden gemount (b.v. met de optie -r aan mount).
De sbpcd driver ondersteunt het automatisch uitwerpen van de CD wanneer het wordt losgekoppeld van het bestandssysteem. In een aantal oudere kernelversies was dit het standaardgedrag. Als je het systeem afsluit, dan zal een gemounte CD worden losgekoppeld van het systeem wat het uitwerpen veroorzaakt.
Deze feature is er voor het gemak wanneer discs worden gewisseld. Als de lade open is wanneer je een CD mount of inleest, dan zal het ook automatisch worden gesloten.
Ik bemerkte dat dit met een paar programma's problemen gaf (b.v. cdplay en workbone). Sinds kernelverise 1.1.60 kun je deze feature softwarematig besturen. Een voorbeeldprogramma is opgenomen in het sbpcd documentatiebestand (of gebruik het programma eject). Je kunt ook het standaardfunctioneren besturen door het wijzigen van het kernelbronbestand sbpcd.h.
Als je een bepaalde disc hebt, die niet kan worden gemount, dan zijn hier wat mogelijke redenen:
Het is een XA, CD-R of CD-RW disc en je drive of de Linux driver ondersteunt het inlezen van deze discs niet (dit is alleen waarschijnlijk voor zeer oude drives).
Het is een DVD disc, welke alleen leesbaar is door een DVD-ROM drive.
De disc maakt geen gebruik van het ISO-9660 bestandssysteem (b.v. een aantal gebruiken SunOS of HFS).
Het is een audio-CD.
De CD is beschadigd of defect.
Je plaatste het ondersteboven in de drive :-)
Verscheidene gebruikers hebben succes gemeld met SCSI multi-disc CD-ROM wisselaars. Je moet waarschijnlijk de kernelconfiguratieoptie "Probe all LUNs on each SCSI device" wijzigen (dit is niet nodig als je CD-wisselaar reeds bekend is bij de SCSI-driver. Kijk eens in /usr/src/linux/drivers/scsi.c).
Tenminste één gebruiker moest ook een SCSI timeout waarde in de kerneldriver ophogen. Een symptoom hiervan is een foutmelding die iets luidt als: "wrong fs type, bad option, bad superblock on /dev/sr5, or too many mounted file systems" wanneer je voor de eerste keer een CD probeert te mounten, maar een tweede mount onmiddellijk daarna wel succesvol gaat. Voor het verhogen van de timeout waarde, verhoog je de waarde van IOCTL_TIMEOUT aan het begin van /usr/src/linux/drivers/scsi/sr_ioctl.c en compileer je de kernel opnieuw. Een waarde van 10000 in plaats van de standaard 3000 schijnt te werken met een NEC Multispin 4Xc.
Het kan nodig zijn om extra block special files aan te maken, zodat alle LUN's kunnen worden benaderd. Voor elke LUN is een apparaatbestand nodig. Dus voor een 7 disc wisselaar zijn /dev/sr0 tot /dev/sr6 nodig (meer als je extra SCSI CD-ROM stations hebt). Om het block special file aan te maken geef je als root de opdracht mknod /dev/sr? b 11 ? met ? als het benodigde aantal.
De Nakamichi MBR-7 7 disc wisselaar, NEC Multispin 4Xc en Pioneer 12 disc wisselaar schijnen te werken.
Ook zijn EIDE/ATAPI multi-disc wisselaars beschikbaar. De kernel heeft voor een aantal drives ondersteuning met de functie CDROM_SELECT_DISC ioctl. In het documentatiebestand van de IDE-CD kerneldriver is broncode opgenomen voor een programma om wisselslots te selecteren. Je kunt ook gebruik maken van diverse utility's zoals het eerder beschreven eject programma.
Op een aantal CD's zijn de bestandspermissies van de rootdirectory zo ingesteld dat alleen de root gebruiker ze kan lezen. Dit is een fout aan de kant van de CD-ROM leverancier en echt onhandig. Een wat gebruikelijker situatie is dat bepaalde bestanden of directory's niet voor iedereen leesbaar zijn. Een aantal mensen hebben hun kernel gepatcht om dit probleem te omzeilen.
Zie ook de hieraan gerelateerde vraag over verborgen bestanden later in dit document.
Wat betekent een kernelfoutmelding van de IDE CD-ROM drivers als "hdxx: code: xx key: x asc: xx ascq: x"?
Dit is een status-/foutmelding van het IDE CD-ROM station. Standaard drukt de IDECD driver de ruwe informatie af in plaats van kernelruimte te verspillen met foutmeldingen. Je kunt de standaard wijzigen dat het de actuele foutmeldingen toont door in het bestand /usr/src/linux/drivers/block/ide-cd.c, de waarde van VERBOSE_IDE_CD_ERRORS in te stellen op 1, om vervolgens de kernel opnieuw te compileren.
Hier is een manier. Deze opdracht meet hoelang het duurt om 1500K data van CD te lezen:
% time -p dd if=/dev/cdrom of=/dev/null bs=1k count=1500 1500+0 records in 1500+0 records out real 5.24 user 0.03 sys 5.07 |
De transportsnelheid van single speed drives is 150 kilobytes per seconde, wat ongeveer 10 seconden zou moeten duren. Op double speed zou het ongeveer vijf seconden in beslag moeten nemen en op quad speed 2.5, enz.
De "echte" tijd hierboven is waarschijnlijk de beste te bekijken tijd, in dit geval geeft het een double speed drive aan. Je kunt de hoeveelheid te transporteren data verhogen om een wat accuratere waarde te krijgen (de data wordt niet in een cache geplaatst). Je zou de opdracht wellicht een aantal keren uit moeten voeren en dan het gemiddelde moeten nemen.
Ik heb ook een klein programma in C geschreven dat de CD-ROM data transportsnelheid meet en rapporteert; ik kan het je op verzoek toesturen.
Het gebruikelijke symptoom is dat de gebruikte bootdisk om Linux voor de eerste keer te installeren je CD-ROM station herkende, maar nadat Linux werd geïnstalleerd op de harddisk of diskette en het systeem opnieuw werd opgestart, herkent het de CD-ROM niet meer.
De reden van dit probleem is gewoonlijk dat met een aantal Linux distributies de kernel die wordt gebruikt om Linux op je harddisk (of diskette) te installeren niet noodzakelijkerwijs dezelfde is als die op je bootdisk. Je selecteerde een bootdisk die overeenkwam met je CD-ROM hardware, terwijl de kernel die je installeerde een "generic" kernel is waarin ondersteuning voor de CD-ROM ontbreekt. Je kunt dit verifiëren door de richtlijnen in probleemoplossing op te volgen die eerder in dit document werden besproken (begin bijvoorbeeld met het controleren van /proc/devices).
De oplossing hiervoor is het opnieuw compileren van de kernel, ter verzekering dat de drivers voor je CD-ROM station en vele anderen die nodig zijn (b.v. SCSI controller, ISO-9660 bestandssysteem) zijn opgenomen. Zie de Kernel HOWTO als je niet weet hoe je dit moet doen.
Als je opdrachtregels aan de bootdisk meegaf (b.v. "hdf=cdrom") dan moet je deze aan het configuratiebestand van het bootprogramma opgeven (typisch /etc/lilo.conf).
Op een aantal CD's staan bestanden met het "hidden" bit ingesteld. Normaal gesproken zijn deze bestanden niet zichtbaar. Als je de CD met de optie "unhide" mount, dan zouden de bestanden toegankelijk moeten zijn (dit schijnt nergens te zijn gedocumenteerd).
Wanneer je je eigen applicatie wilt schrijven, zoals een audio CD-speler programma, zul je de application programming interface (API) moeten begrijpen waarin door Linux wordt voorzien.
Oorspronkelijk gebruikte de CD-ROM kerneldrivers eigen ioctl() functies om features te ondersteunen die specifiek zijn voor elke drive. Header files zoals /usr/include/linux/sbpcd.h beschrijven deze. Omdat veel drivers werden gebaseerd op andere drivers, hebben de interfaces terwijl ze niet identiek zijn, veel gemeen.
Recenter ontstond een initiatief onder leiding van David van Leeuwen (david@tm.tno.nl) om de API voor CD-ROM stations te standaardiseren, waarbij algemene code op één plaats wordt bijgehouden ter verzekering dat alle drivers hetzelfde gedrag vertonen. Dit is gedocumenteerd in het bestand /usr/src/linux/Documentation/cdrom/cdrom-standard.tex. Verscheidene kerneldrivers ondersteunen dit. Sinds kernel 2.0 passen alle CD-ROM drivers zich aan aan deze API.
Mijn boek, de Linux Multimedia Guide, gaat in detail in op hoe je CD-ROM stations programmeert, vooral voor audio-functies. Zie het einde van de sectie Referenties.
Als je een CD-ROM hebt met lange bestandsnamen onder Windows, maar niet onder Linux, dan kan het zijn geformatteerd met Microsoft's eigen Joliet bestandssysteem. Zie de volgende vraag voor een oplossing.
Microsoft heeft een uitbreiding op het ISO CD-ROM formaat gemaakt, met de naam Joliet. Hiermee kunnen lange bestandsnamen worden gecodeerd in het 16-bit UNICODE formaat.
Te beginnen met versie 2.0.34 biedt de kernel ondersteuning voor de Microsoft Joliet bestandssysteem extensies. Je moet de ondersteuning hiervoor activeren in de kernel.
Als je bestandsnamen correct op het scherm weer wilt geven met native taaltekens van Joliet CD-ROM's, dan moet je ondersteuning in de kernel activeren voor de juiste NLS ISO8859 tekensets.
Een aantal audio CD's is "enhanced" met extra data. Kenmerkend zul je bemerken dat deze CD's de gebruikelijke audio CD-tracks hebben als ook een data track welke kan worden gemount als een ISO-9660 bestandssysteem.
Op een "enhanced" CD die ik bestudeerde bevonden zich Microsoft en Apple Macintosh applicaties (die ik niet direct onder Linux uitvoer uiteraard, alhoewel ik deels succes had met het draaien van de Windows applicatie onder de WINE Windows emulator). Er stonden een aantal GIF images op die ik kon bekijken met een standaardviewer zoals xv en nog een aantal animaties in in Apple QuickTime formaat die konden worden bekeken met het programma xanim. Het was een multi-sessie disk die een aantal zeer oude CD-ROM stations niet kan lezen. Op de disc bevond zich een readme.txt bestand met een Enhanced CD FAQ.
SCSI en ATAPI compliant DVD-ROM drives zouden onder Linux moeten werken voor het inlezen van discs geformatteerd met een ISO-9660 bestandssysteem. Met andere woorden: ze zullen werken als een (mogelijk groot) CD-ROM station.
Veel DVD-ROM discs gebruiken het UDF bestandssysteem. Recente kernels hebben ondersteuning voor het UDF bestandssysteem.
Er zijn een aantal Linux MPEG-2 DVD spelers beschikbaar. Zie de DVD Playing HOWTO voor meer informatie.
SCSI en ATAPI compliant CD-RW drives werken onder Linux voor discs geformatteerd met een ISO-9660 of UDF bestandssysteem. Hieronder valt tevens de mogelijkheid om naar de disc te schrijven. Utility's zoals cdrecord kunnen worden gebruikt om de inhoud van een disc te verwijderen.
Je mount een multi-sessie disc net als iedere andere CD-ROM. Het normale functioneren voor multi-sessie ondersteuning is dat de laatste sessie zal worden gezien wanneer je de disc mount. Meerdere partities zul je niet zien. Er zijn drie redenen te noemen waarom dit wellicht niet werkt:
Je CD-ROM station ondersteunt het lezen van multi-sessie CD's niet (het is waarschijnlijk nogal oud als dit het geval is).
De Linux kerneldriver voor je type CD-ROM ondersteunt geen multi-sessie (voornamelijk de wat oude gepatenteerde, niet-IDE/ATAPI en niet-SCSI drives vallen in deze categorie).
Als je een CD mount met een ander bestandssysteem dan ISO-9660, dan kan het zijn dat multi-sessie niet wordt ondersteund.
Er is een klein utility genaamd volname opgenomen met recente versies van het programma eject. Als alternatief kun je deze shellopdracht uitvoeren:
dd if=/dev/cdrom bs=1 skip=32808 count=32 |
in de veronderstelling dat /dev/cdrom het apparaatbestand is voor je device.
Je moet de IDE-SCSI emulatiedriver gebruiken voor CD-R's en CD-RW 's. Zie de Linux CD-Writing HOWTO voor meer informatie.
Ja, natuurlijk is het ondersteund. Linux ondersteunt de IDE interface die wordt gebruikt door alle moderne IDE CD-ROM stations. Dit is zo sinds kernelversie 1.1.85.
In tegenstelling tot de oudere gepatenteerde drives, bestaat er voor elk model ATAPI/IDE CD-ROM station geen specifieke driver. Alle drives die voldoen aan de standaard zouden met de ATAPI CD-ROM driver moeten werken die is opgenomen in de standaard Linux-kernel.
Het kan zijn dat je ooit in een situatie belandt waarbij de hardware geen DMA (Direct Memory Access) ondersteunt. RedHat levert een zeer goed fijnafgestemde versie van de Linux kernel welke DMA op geselecteerde IDE controller chipsets activeert. Informatie over dit onderwerp is te vinden op http://www.exocore.com/linux/rhl71dma/