Większość poleceń mount posiada opcję user. Jeśli zrobisz
taką pozycję w /etc/fstab:
/dev/sbpcd /mnt/cdrom iso9660 user,noauto,ro
to zwykły użytkownik będzie mógł zamontować i odmontować płytę poleceniami:
% mount /mnt/cdrom
% umount /mnt/cdrom
Płyta zostanie zamontowana z pewnymi opcjami, które zwiększają bezpieczeństwo (np. programy nie mogą być wykonywane, pliki urządzeń są ignorowane); w niektórych przypadkach może to być zbyt rygorystyczne.
Inną metodą jest zdybycie pakietu usermount, który pozwala
użytkownikom innym niż root montować i odmontowywać urządzenia
wyjmowalne takie jak dyskietki i CD-ROM-y, ale zmniejsza dostęp do
innych urządzeń (takich jak partycje twardych dysków). Dostępny jest
na większości serwerów ftp.
Pod adresem ftp.cdrom.com znajduje się plik źródłowy
mount.c, który pozwala na montowanie i odmontowywanie
CD-ROM-ów (tylko) przez normalnych użytkowników. Uruchamiany jest z
prawami root-a.
Płyta nie może być odmontowana jeśli jakikolwiek proces żąda do
niej dostępu, włącznie z przypadkiem kiedy bierzącym katalogiem
jest któryś z podkatalogów płyty lub jej katalog główny. Jeśli nie
możesz znaleźć procesu używającego płytę, to możesz użyć polecenia
fuser tak jak to pokazano poniżej:
% umount /cdrom
umount: /dev/hdd: device is busy
% fuser -v /cdrom
USER PID ACCESS COMMAND
/mnt/cdrom tranter 133 ..c.. bash
Na niektórych systemach możliwe, że musisz być root-em, żeby
uruchomić polecenie fuser, żeby zobaczyć procesy innych
użytkowników.
Musisz dodać pozycję do pliku /etc/exports. Wtedy
użytkownicy na tamtej maszynie będą mogli zamontować to
urządzenie. Szczegóły znajdziesz w poleceniu "man 5 exports".
Przy instalacji Linux-a najpopularniejszą metodą jest użycie dyskietki startowej. Niektóre dystrybucje pozwalają na start Linux-a bezpośrednio z płyty.
Michael Fulbright (
msf@redhat.com) zgłosił, że jeśli posiada się dobry CD-ROM,
ROM BIOS i napęd CD-ROM ATAPI, to jest możliwe startowanie z
płyty. Najnowsza wersja mkisofs także obsługuje tworzenie
takich dysków. Dodał on jakieś łaty do obsługi standardu El Torito
dla startowalnych CD-ROM-ów.
Heiko Eissfeldt (
heiko@colossus.escape.de) i Olaf Kindel napisali narzędzie,
które czyta dane audio i zachowuje je jako pliki dźwiękowe w
formacie .wav. Pakiet nazywa się cdda2wav.tar.gz i można
go pobrać z ftp.icm.edu.pl.
Ponieważ napędy CD-ROM zmieniają się bardzo szybko, trudno jest
powiedzieć które modele obsługują czytanie danych
cyfrowych. Najlepiej zdobyć najnowszy pakiet cdda2wav i
przeczytać zawartą tam dokumentację.
Więcej informacji na ten temat znajdziesz na stronie www.tardis.ed.ac.uk oraz w FAQ grupy alt.cd-rom wymienionym w referencjach.
Jeśli używasz tego polecenia na kompakcie w formacie ISO-9660 bez
Rock Ridge Extensions, to musisz dodać opcję -noleaf. Więcej
szczegółów w poleceniu "man find".
(Z moich doświadczeń wynika, że prawie wszystkie nowsze płyty Linux-a używają Rock Ridge Extensions, więc ten problem powinien występować bardzo rzadko.)
Pakiet X-CD-Roast jest graficznym interfejsem do obsługi nagrywarek
CD. Pakiet można znaleźć na ftp.icm.edu.pl w kataloogu
/pub/Linux/sunsite/utils/disk-management/.
Zobacz także "Linux CD-Writing HOWTO" pod adresem www.jtz.org.pl dostępne w języku polskim.
CD-ROM jest nośnikiem tylko do odczytu. We wcześniejszych wersjach jądra można było zamontować płytę CD do zapisu i odczytu, ale zapis był po prostu ignorowany. Od wersji 1.1.33 zostało to poprawione i CD-ROM-y muszą być montowane tylko-do-odczytu (np. z opcją -r).
Od wersji jądra 1.1.38, sterownik sbpcd wysuwa szufladkę kiedy płyta jest odmontowywana. Jeśli zamykasz system, to zamontowana płyta zostanie odmontowana i szufladka wysunięta.
Funkcja ta ma pomóc przy zmianie płyt. Jeśli szufladka jest wysunięta, to przy próbie odczytu lub zamontowania zostanie zamknięta automatycznie.
Stwierdziłem, że to powoduje problemy z niektórymi programami (np. cdplay i workbone). Od wersji 1.1.60 jądra można tę funkcję kontrolować programowo. Przykładowy program zawarty jest w dokumentacji do sterownika sbpcd programu (albo użyj eject).
Ten specjalny kompakt to pewnie płyta XA (jak wszystkie PhotoCD czy "one-offs" stworzone przy użyciu nagrywarek). Większość sterowników CD-ROM-ów nie obsługuje płyt XA, chociaż może znajdziesz gdzieś jakąś łatę, która dodaje obsługę takich płyt.
Sterownik sbpcd obsługuje XA. Jeśli używasz tego sterownika, to możesz sprawdzić czy płyta jest XA w ten sposób: otwórz plik sbpcd.c i włącz wyświetlanie "Table of Contents" (DBG_TOC). Skompiluj i zainstaluj nowe jądra i wystartuj je. Podczas każdego montowania TOC będzie wyświetlane na konsoli, albo logowane do pliku). Jeśli pierwszą wartością w TOC jest 20, to jest to płyta XA. Bajt ten ma wartość 00 w normalnych płytach. Jeśli TOC pokazuje różne ścieżki, to jest to także znak, że jest to płyta XA.
(dzięki dla Eberharda Moenkeberga za powyższą informację)
Innymi możliwościami dla nieodczytywalnych CD-ROM-ów są:
Kilku użytkowników zgłosiło, że osiągnęło jakieś sukcesy z wielopłytowymi napędami CD-ROM SCSI. Musisz przypuszczalnie włączyć opcję "Probe all LUNs on each SCSI device" przy konfiguracji jądra. Przynajmniej jeden użytkownik musiał także zwiększyć wartość oczekiwania (timeout) dla SCSI w sterowniku. Zgłoszono mi, że Nakamichi MBR-7 7 i Pioneer 12 działają.
Dostępne są także napędy wielopłytowe EIDE/ATAPI. Jądro w wersji
2.0 ma szczątkową obsługę dla napędów korzystających z funkcji
ioctl CDROM_SELECT_DISC. Plik z dokumentacją do sterownika IDE-CD
zawiera źródła krótkiego programu do wybierania kompaktów, albo
możesz użyć nowszej wersji opisanego wcześniej programu eject.
Niektóre płyty mają tak ustawione prawa dostępu do swojego głównego katalogu, że tylko użytkownik root może go czytać. Przykładem może tutaj być płyta InfoMagic z marca 1995. Jest to wyraźna niedogodność.
Następująca łata, grzeczność ze strony Christopha Lametera ( clameter@waterf.org) obchodzi ten problem w jądrze.
From: clameter@waterf.org (Christoph Lameter)
Newsgroups: comp.os.linux.setup
Subject: InfoMagic Developers Set: Fix for CD-ROM permissions
Date: 12 Apr 1995 20:32:03 -0700
Organization: The Water Fountain - Mining for streams of Living Water
NNTP-Posting-Host: waterf.org
X-Newsreader: TIN [version 1.2 PL2]
Zbiór płyt "InfoMagic Developers" z marca 1995 ma błędy ponieważ
informacja o prawach dostępu zapisana w katalogu głównym przysparza
następujących problemów:
1. Płyta 1 będzie zawsze miała właściciela/grupę 5101/51 i ma
dozwolony zapis (?)
2. Płyta 2 i 3 mają ustawione prawa rwx dla root-a i żadnych praw dla
innych użytkowników/grupy. Płyty tej nie można odczytać z innego
użytkownika niż root! Mam uruchomionego BBS-a i muszę je udostępnić do
zgrywania dla innych.
Widziałem już gdzieś tam kilka poprawek do tego. Jednak kłopot w tym,
że poprawki te zmieniają prawa dla WSZYSTKICH katalogów na płycie. Ta
poprawka zmienia TYLKO prawa dostępu do katalogu głównego płyty. Jeśli
chcesz uruchamiać części Linux-a bezpośrednio z tej płyty to możesz
wpaść w kłopoty jeśli wszystkie katalogi są czytelne dla wszystkich i
jeśli właścicielem wszystkich jest root.
Poprawka ta zmieni prawa dostępu dla katalogu głównego na r-xr-xr-x i
właściciela/grupę na wartości odpowiadające opcjom uid i gid polecenia
mount.
Aby założyć poprawkę:
cd /usr/src/linux/fs/isofs
patch <**TEN LIST**
i skompiluj ponownie jądro (możliwe, że musisz poprawić trochę tę
poprawkę w zależności od wersji twojego jądra).
Poprawka ta powinna się przypuszczalnie znaleźć w jądrze. Jaki interes
mają dane na płycie w grzebaniu prawami/właścicielem katalogu do
zamontowania?
--- inode.c.ORIG Wed Apr 12 17:24:36 1995
+++ inode.c Wed Apr 12 17:59:12 1995
@@ -552,7 +552,15 @@
these numbers in the inode structure. */
if (!high_sierra)
- parse_rock_ridge_inode(raw_inode, inode);
+ { parse_rock_ridge_inode(raw_inode, inode);
+ /* check for access to the root directory rights/owner CL */
+ if((inode->i_sb->u.isofs_sb.s_firstdatazone) == inode->i_ino)
+ { /* Change owner/rights to the ones demanded by the mount command */
+ inode->i_uid = inode->i_sb->u.isofs_sb.s_uid;
+ inode->i_gid = inode->i_sb->u.isofs_sb.s_gid;
+ inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR;
+ }
+ }
#ifdef DEBUG
printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_extent);
@@ -805,4 +813,3 @@
}
#endif
-
Zauważ, że powyższa łata jest raczej stara i przypuszczalnie nie zainstaluje się gładko w jądrze wersji 2.0. Zobacz także pytanie na temat plików ukrytych w dalszej części tego dokumentu.
Co to znaczy jak otrzymam komunikat o błędzie od sterownika CD-ROM-u - np. taki: "hdxx: code: xx key: x asc: xx ascq: x"?
To jest komunikat o statusie/błędzie od napędu IDE
CD-ROM. Domyślnie sterownik IDECD wypisuje informacje otrzymane
przez napęd bez "zawracania jądru głowy". Możesz zmienić to domyślne
zachowanie, aby wyświetlał właściwy komunikat o błędzie, przez
zmianę wartości VERBOSE_IDE_CD_ERRORS w pliku
/usr/src/linux/drivers/block/ide-cd.c na 1 i rekompilację
jądra.
Oto jeden sposób. Polecenie to mierzy jaki czas przeznaczony jest na odczytanie 1500K danych z płyty:
% 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
Prędkość CD-ROM-u o pojedynczej prędkości wynosi 150 kb na sekundę, co powinno zabrać około 10 sekund. Przy prędkości podwójnej zabrałoby to 5 sekund, przy czterokrotnej - 2,5, itd...
Czas "real" powyżej jest przypuszczalnie tym, na który należy patrzeć - w tym przypadku jest to CD-ROM podwójnej prędkości. Możesz zwiększyć ilość danych, aby otrzymać bardziej dokładną wartość (w razie gdybyś pytał, to te dane nie są cache'owane). Przypuszczalnie powinieneś uruchomić to polecenie kilka razy i wziąć średnią z nich wszystkich.
Zwykłym symptomem jest to, że dysk startowy użyty do instalacji rozpoznał twój CD-ROM, ale po tym jak Linux został zainstalowany na dysku twardym czy dyskietce i zrestartowany - przestał rozpoznawać twój napęd.
Najpopularniejszym powodem jest tutaj fakt, że w niektórych
dystrybucjach jądro instalowane nie zawsze jest tym samym jądrem,
które znajduje się na twojej dyskietce startowej. Wybrałeś
dyskietkę, która obsługiwała twój CD-ROM, podczas gdy jądro, które
zainstalowałeś, jest jądrem "ogólnym" i nie ma w nim obsługi
CD-ROM-u. Możesz to sprawdzić postępując zgodnie ze wskazówkami
zawartymi w sekcji Rozwiązywanie problemów wcześniej w
tym dokumencie (np. zacznij od sprawdzenia /proc/devices).
Rozwiązaniem jest ponowna kompilacja jądra, upewniając się jednocześnie, że wszystkie sterowniki jakie potrzebujesz są włączone. Zobacz Kernel-HOWTO (po polsku) jeśli nie wiesz jak to zrobić.
Jeśli przekazałeś jakieś parametry startowe do dyskietki (np. "hdc=cdrom"), to musisz je dodać do konfiguracji twojego programu startującego (zwykle jest to plik /etc/lilo.conf).
Niektóre płyty posiadają pliki z ustawionym bitem "hidden". Normalnie nie można zobaczyć tych plików. Jeśli zamontujesz płytę z opcją "unhide", to wtedy pliki te powinny być dostępne (jakoś nie widać, żęby to było gdziekolwiek udokumentowane).
Jeśli chcesz napisać własną aplikację, jak np. odtwarzarka audio, to będziesz musiał zrozumieć API - interfejs programowana aplikacji (application programming interface).
Oryginalnie sterownik CD-ROM-u używał swojej własnej funkcji
ioctl(), aby obsłużyć funkcje specyficzne dla każdego napędu. Pliki
nagłówkowe takie jak /usr/include/linux/sbpcd.h opisują
je. Ponieważ wiele sterowników bazowało na innych sterownikach,
interfejsy, jeśli nie są identyczne, to mają wiele wspólnego.
Ostatnio powstała inicjatywa ustandaryzowania interfejsu dla
napędów CD-ROM kierowana przez Davida van Leeuwena
(
david@tm.tno.nl).
Polega ona na umieszczeniu ogólnego kodu w jednym miejscu i
upewnieniu się, że wszystkie sterowniki zachowują sie tak samo
Jest to udokumentowane w pliku
/usr/src/linux/Documentation/cdrom/cdrom-standard.tex. Kilka
sterowników to obsługuje. Spodziewam się, że w następnej głównej
wersji jądra (3.0?) wszyskie sterowniki CD-ROM-ów dostosują się do
tego API.
Moja książka, Linux Multimedia Guide, poświęca o wiele więcej miejsca tematowi programowania CD-ROM-ów, szczególnie jeśli chodzi o funkcje audio. Zobacz na koniec sekcji Referencje.
Jeśli masz CD-ROM, który ma długie nazwy pod Windows, ale nie pod Linux-em, może on być zformatowany do Microsoft-owego systemu plików Joliet. Rozwiązanie znajdziesz w odpowiedzi na następne pytanie.
Microsoft stworzył rozszerzenie do formatu ISO CD-ROM o nazwie Joliet. W czasie pisania obsługa dla Joliet była w trakcie opracowywania; łaty były dostępne z adresu url url="http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html"> lub ftp://www-plateau.cs.berkeley.edu/pub/multimedia/linux/joliet/.