Imperator Nero na temat palenia swoich własnych klasycznych CD [AD64; on się na tym kompletnie nie zna] "Jeśli do ognia się obrócisz, zabawiać się nie przestanę póki się palisz."
[tłum.: Z góry przepraszam za tłumaczenie, ale poetą nie jestem.]
Zapis CD w Linuksie składa się z dwóch kroków:
Rozdział ten opisuje kroki tworzenia płyt z danymi i audio.
Pamiętaj, że zebranie wszystkiego do płyty zabiera o wiele więcej niż się można spodziewać. Jednak pamiętaj też, że brakujących plików nie można dopisać do płyty jak jest już zapisana i zakończona.
Pamiętaj także, że pewna ilość miejsca na płycie jest używana do przechowywania informacji na temat systemu plików iso9660 (zwykle kilka MB). 620 MB danych zawsze się zmieści na 650MB płycie CD-R.
Zanim jakiś nośnik danych (dyskietka, dysk twardy czy kompakt) będzie mógł być użyty trzeba na nim założyć system plików (mówiąc po DOS-owemu: trzeba go sformatować). System plików jest odpowiedzialny za organizację i zapis plików na nośniku.
Zwykle, narzędzia do tworzenia systemu plików na partycji dyskowej, zapisuja na niej pusty system plików, który jest potem montowany i wypełniany plikami przez użytkownika. Zapisywalne płyty CD są zapisywalne tylko raz, więc jeśli zapisałbyś na nim pusty system plików, zostałoby sformatowane - ale pozostałoby puste na zawsze. Jest to także prawda dla nośników wielokrotnego zapisu, ponieważ nie można zmienić dowolnie zawartości sektorów, ale trzeba ją całą najpierw skasować.
Więc to czego potrzebujemy, to narzędzie, które tworzy system plików podczas nagrywania plików na płycie. Narzędzie to nazywa się mkisofs. Przykładowe użycie może być takie:
mkisofs -r -o obraz_cd moja_kolekcja/
`---------' `-------------'
| |
dokąd zapisać nagraj z tego katalogu
Opcja -r ustawia prawa dostępu wszystkich plików na odczyt dla
wszystkich i włącza RockRidge Extensions. To jest zwykle to, co
chcesz osiągnąć i użycie tej opcji jest zalecane, no chyba, że wiesz
dokładnie co robisz. (wskazówka: bez -r pliki na kompakcie będą miały
prawa jak moja_kolekcja!).
mkisofs spróbuje
odwzorować wszystkie nazwy plików na format 8.3 używany przez DOS,
aby zapewnić jak największą kompatybilność. W razie gdy pliki w
formacie 8.3 nazywają się tak samo, używane są liczby, a informacja
o takich plikach wysyłana jest do STDERR - zwykle ekran.
Nie panikuj:
Pod Linuksem nigdy nie zobaczysz tych nazw w formacie 8.3, ponieważ
Linux umie korzystać z RockRidge Extensions, które zawierają
oryginalne atrybuty pliku (prawa dostępu, nazwy, itp.).
Teraz możesz się zastanawiać dlaczego rezultat nie jest wysyłany bezpośrednio do nagrywarki. Z dwóch powodów:
Metodę zapisu płyty w jednym kroku opiszę poniżej.
Możnaby stworzyć dodatkową partycję na dysku i tam zapisywać wynik działania mkisofs. Jednak ja jestem przeciwny takiemu rozwiązaniu ponieważ jedną literówką możnaby sobie zniszczyć całą partycję Linuksową (czytaj: co mi się przytrafiło...). Co więcej, to jest marnowanie miejsca na dysku, bo dane te są tylko czasowe i można je usunąć po zapisaniu na płytę. Jednak jeśli masz wystarczająco dużo miejsca na dysku, dodatkowa partycja może ci zaoszczędzić czasu na kasowanie obrazu.
Linux ma możliwość montowania plików tak jakby były one partycją. Cecha ta przydaje się do testowania obrazu płyty, czy prawa dostępu są takie jak chcesz. Pomimo, iż nośniki są teraz bardzo tanie, to zapis płyty zabiera trochę czasu i możesz chociaż zaoszczędzić swój czas sprawdzając obraz.
Aby zamontować w katalogu /cdrom taki plik stworzony wcześniej
wpisz:
mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom
Teraz możesz sprawdzić pliki w katalogu /cdrom - pojawią
się tam dokładnie tak samo jak będą wyglądać na płycie. Aby odmontować
ten plik po prostu napisz umount /cdrom. Uwaga: Jeśli masz
jądro starsze niż 2.0.31, to ostatni plik na płycie może nie być
czytany. Użyj nowszego jądra, jak np. 2.0.36. Opcja -pad w
programie cdrecord odnosi się tylko do płyt audio, a dodatkowa
opcja -pad programu mkisofs wymaga łaty, co jest taką samą
pracą jak uaktualnienie do nowego jądra.
Uwaga:
Niektóre stare wersje mount nie umieją obsługiwać urządzeń
loopback. Jeśli masz taką starą wersję mount, to jest to
wskazówka, żeby uaktualnić swoją dystrybucję.
Kilku ludzi sugerowało już, żeby zamieścić tu informację skąd wziąć
najnowsze narzędzia do montowania, ale ja zawsze odmawiam. Jeśli
twoja dystrybucja dostarcza takiej starej wersji mount, to
zgłoś to do nich jako błąd. Jeśli twoja dystrybucja nie jest łatwa
do uaktualnienia, zgłoś to jako błąd.
Jeśli dołączyłbym tutaj wszystkie informacje potrzebne do poprawienia błędów w źle zaprojektowanej dystrybucji to HOWTO byłoby o wiele większe i trudniejsze do czytania.
Już nie ma dużo do zrobienia. Jeśli jeszcze nie próbowałeś, to jest dobra chwila na polecenie:
cdrecord -scanbus
Polecenie to pokaże ci do którego urządzenia SCSI dołączona jest twoja nagrywarka. Wszystkie inne metody zgadywania informacji wyświetlanych przez cdrecord zostały usunięte z tego HOWTO (szczególnie ten cokolwiek niebezbieczny schemat nazewnictwa ogólnych urządzeń SCSI).
Zanim pokażę ci ostatnie polecenie, pozwól się ostrzec, że nagrywarki "lubią być karmione" ciągłym strumieniem danych ponieważ mają tylko mały bufor danych. Tak więc proces zapisu obrazu CD na płytę nie może być przerwany, bo w wyniku otrzymamy źle nagraną płytę. Łatwo jest przerwać taki strumień danych np. przez skasowanie dużego pliku. Przykład: Jeśli skasujesz plik o rozmiarze 650 MB, to jądro musi uaktualnić informacje o 650.000 bloków na dysku (zakładając, że masz na swoim systemie plików bloki 1 kB). Zajmuje to trochę czasu i bardzo prawdopodobne, że zwolni działalność dysku na tyle, że strumień danych zostanie przerwany na kilka sekund. Jednak na szybkich maszynach czytanie poczty, surfowanie po sieci czy nawet kompilacja jądra nie mają wpływu na nagrywanie.
Zauważ proszę, że żadna nagrywarka nie potrafi ponownie ustawić lasera i nie może kontynuować od miejsca, w którym zostało przerwane nagrywanie. Przez to każda silniejsza wibracja a nawet wstrząs zniszczy płytę.
Jeśli jesteś już psychicznie przygotowany, ubierz się w czarną szatę, pomnóż numer SCSI-ID nagrywarki przez numer SCSI-revision i zapal tyleż samo świeczek, wymów dwa wiersze z "ASR-FAQ" (grupa dyskusyjna alt.sysadmin.recovery) i ostatecznie wpisz:
$ > SCSI_BUS=0 # wzięte z listingu "scsibus0:"
$ > SCSI_ID=6 # wzięte z listingu "TOSHIBA XM-3401"
$ > SCSI_LUN=0
$ > cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
-data cd_image
# to samo co wyżej, ale krótsze
$ > cdrecord -v speed=2 dev=0,6,0 -data cd_image
Dla zwiększenia czytelnośći, namiary na nagrywarkę zapisane są do
trzech zmiennych o wymownych nazwach: SCSI_BUS, SCSI_ID, SCSI_LUN.
Opcja -data nie jest konieczna, ale została tutaj podana, aby
odróżnić tę linijkę o linijki służącej do nagrywania płyt audio.
Jeśli używasz programu cdrecord do nadpisania płyty CD-RW, musisz
podać opcję blank=..., aby skasować poprzednią zawartość.
Poczytaj stronę podręcznika man, aby dowiedzieć się więcej na temat
różnych metod zerowania płyty CD-RW.
W czasach kiedy wszyscy oprócz mnie posiadają 400 MHz maszyny, ludzie nagrywają płyty w locie bez tworzenia obrazu. Czyli łączą wyjście programu mkisofs z wejściem programu cdrecord:
$ > IMG_SIZE=`mkisofs -R -q -print-size private_collection/`
$ > mkisofs -r private_collection/ \
|cdrecord speed=2 dev=0,6,0
tsize=${IMG_SIZE}s -data -
# nie zapomnij o s --^ ^-- czytaj dane z STDIN
Pierwsze polecenie jest pustym poleceniem służącym do określenia rozmiatu obrazu (potrzebujesz mkisofs z pakietu cdrecord, aby to działało). Może twoja nagrywarka nie musi znać rozmiaru obrazu, który będzie zapisany, wtedy możesz to opuścić. Wyświetlony rozmiar musi być przekazany jako parametr tsize do polecenia cdrecord (jest zapisany w zmiennej środowiskowej IMG_SIZE). Ostatnie polecenie to połączenie poleceń mkisofs i cdrecord przez potok.
Zapisanie takiej płyty jest bardzo podobne do wymienionych powyżej kroków/ Dwie główne różnice, to fakt, że płyty audio składają się ze ścieżek audio, które są zorganizowane w osobne obrazy. Więc jeśli chcesz mieć 10 ścieżek, to musisz mieć 10 obrazów. Drugą różnicą jest format tych obrazów. Już nie ISO 9660 (czy jaki tam system plików wolisz), ale 16-bitowe sample w kodowaniu PCM z częstotliwością próbkowania 44,1 kHz.
Jednym z narzędzi do zamiany twoich plików dźwiękowych do wymaganego formatu jest sox. Użycie jest bardzo proste:
$ > sox killing-my-software.wav killing-my-software.cdr
Polecenie to zamienia utwór killing-my-software z formatu WAV na format CDR. Poczytaj stronę podręcznika systemowego man programu sox na temat rozszerzeń i formatów plików rozpoznawanych przez niego. Z powodu sporej ilości dysku potrzbnej na konwersję, jest to wbudowana cecha programu cdrecord dla formatów WAV i AU. Tak więc dopóki twoje pliki muzyczne są w postaci plików .wav czy .au i są to 16-bitowe próbki z częstotliwością 44,1 kHz możesz ich używać bez ręcznej zamiany.
Cdrecord zapisuje obrazy jako ścieżki audio jeśli podamy opcję
-audio. Inne opcje są identyczne z tymi do zapisywania danych
(o ile nie masz jakichś bardzo specyficznych wymagań). Poniższe
trzy przykłady robią to samo, ale czytają obrazy z innych plików:
$ > cdrecord -v speed=2 dev=0,6,0 -audio track1.cdr track2.cdr...
$ > cdrecord -v speed=2 dev=0,6,0 -audio track1.wav track2.wav...
$ > cdrecord -v speed=2 dev=0,6,0 -audio track1.au track2.au...
Szczególnym przypadkiem są pliki MPEG3, które mogą być zamienione przy pomocy programu 'mpg123 -s track1.mp3 > track1.cdr'. W drugą stronę działa 8hz-mp3 dla plików WAV.
W takim układzie jak powyżej wypalisz płyty z 2-sekundową przerwą pomiędzy każdymi dwoma ścieżkami audio. Jeśli twoja nagrywarka umożliwia nagrywanie w trybie "disc at once" (DAO), możesz wypróbować najnowszej wersji cdrecord, aby się tych przerw pozbyć.
Niewiele do powiedzenia. Po prostu określ typ oklejnych obrazów
opcjami -data lub -audio. Przykład:
cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr