# The Linux Bootdisk HOWTO

## Autor: Tom Fawcett fawcett@croftj.net
v3.4, maj 1999
Wersja polska: Adam Byrtek alpha@irc.pl
v1.2, lipiec 1999

Dokument ten opisuje, jak tworzyć swoje własne dyskietki startowe dla Linuxa. Dyskietki te mogą zostać użyte jako dyskietki ratunkowe, lub w celu przetestowania nowych składników systemu. Jeśli nie czytałeś jeszcze Linux FAQ i powiązanych dokumentów, takich jak Linux Installation HOWTO czy Linux Install Guide, to nie powinieneś tworzyć dyskietek startowych. Jeśli potrzebujesz jedynie dyskietki ratunkowej na wypadek awarii, to zajrzyj do dodatku Gotowe dyskietki.

## 1. Przedmowa.

Uwaga: Ten dokument może być przestarzały. Jeśli upłynęło więcej niż sześć miesięcy od daty podanej na stronie tytułowej, to poszukaj nowej wersji tego dokumentu na stronie Linux Documentation Project http://metalab.unc.edu/LDP/HOWTO/Bootdisk-HOWTO.html.

Dokument ten powinien być czytelny w formacie tekstowym, jednak dzięki wykorzystaniu typografii wygląda on znacznie lepiej w formacie Postscript (`.ps`) lub HTML. Zachęcamy do wybrania jednego z tych formatów. Wersja w formacie Info jest tak okrojona, że staje się bezużyteczna.

## 1.1 Uwagi na temat wersji.

Graham Chapman (`grahamc@zeta.org.au`) napisał oryginalną wersję Bootdisk-HOWTO i opiekował się tym dokumentem aż do wersji 3.1. Tom Fawcett (`fawcett@croftj.net`) dodał sporo materiału na temat jądra 2.0 i jest on opiekunem tego dokumetu od wersji 3.2. W dokumencie pozostało sporo oryginalnego tekstu Chapmana.

Dokument ten jest napisany w oparciu o jądro Linux-a w wesji 2.0 lub późniejszej. Jeśli posiadasz starsze jądro (1.2.xx lub niższe), to zajrzyj do poprzedniej wersji Bootdisk-HOWTO, którą możesz znaleźć na Stronie domowej Grahama Chapmana.

Informacje zawarte w tym dokumencie dotyczą platformy Intel. Wiele z nich może być również poprawnych dla innych procesorów, ale nie mamy na ten temat żadnych danych. Prosimy o kontakt ludzi mających doświadczenia z dyskietkami startowymi na innych platformach sprzętowych.

## 1.2 Opinie.

Czekamy na wszystkie opinie, czy to dobre, czy złe, na temat zawartości tego dokumentu. Staraliśmy się, aby informacje w nim umieszczone były jak najbardziej pewne i dokładne. Daj nam znać gdy znajdziesz jakieś błędy.

Dziekujemy ludziom, którzy pomagali nam przysyłając poprawki czy sugestie. Ich wkład uczynił ten dokument o wiele lepszym, niż gdybyśmy tworzyli go sami.

Wysyłaj komentarze, sugestie i poprawki na adres email autora podany powyżej. Nie mam nic przeciwko odpowiadaniu na pytania, jednak radzę najpierw przeczytać dział Rozwiązywanie problemów.

## 1.3 Rozpowszechnianie.

Copyright © 1995,1996,1997,1998,1999 by Tom Fawcett and Graham Chapman. Ten dokument może zostać rozpowszechniany na warunkach ustalonych przez Licencję Linux Documentation Project, znajdującą się pod adresem http://metalab.unc.edu/LDP/HOWTO/Bootdisk-HOWTO.html. Skontaktuj się z autorem, jeśli nie jesteś w stanie otrzymać licencji.

Ta dokumentacja jest darmowa. Jest rozpowszechniana z nadzieją, że okaże się użyteczna, jednak bez żadnej gwarancji.

## 2. Wprowadzenie.

Dyskietki startowe są przydatne w wielu sytuacjach, takich jak:

- Testowanie nowego jądra.
- Odzyskiwanie danych po awarii dysku -- od utraconego boot sektora aż po uszkodzenie głowicy.
- Leczenie uszkodzonego systemu. Nawet drobne potknięcie w czasie gdy jesteś zalogowany jako root może unieruchomić cały system. Żeby go naprawić, trzeba będzie wystartować go z dyskietki startowej.
- Uaktualnianie plików krytycznych dla działania systemu, takich jak `libc.so`.

Istnieje kilka sposobów otrzymywania dyskietek startowych:

- Użycie dyskietki z dystrybucji takiej jak Slackware. Umożliwi ci ona przynajmniej wystartowanie systemu.
- Użycie pakietu ratunkowego do stworzenia dyskietek ratunkowych.
- Nauczenie się co jest potrzebne do działania dyskietki startowej, a następnie zbudowanie jej samodzielnie.

Niektórzy używają tej ostatniej metody i robią wszystko sami. Dzięki temu jeśli coś pójdzie nie tak, to wiadomo co zrobić aby to naprawić. Dodatkowo jest to bardzo dobra metoda na nauczenie się jak działa Linux.

Ten dokument zakłada podstawową znajomość zasad administracji systemu Linux. Przykładowo powinieneś wiedzieć coś katalogach, systemach plików i dyskietkach. Powinieneś wiedzieć, jak używać poleceń `mount` i `df`. Powinieneś wiedzieć, do czego służą i jak wyglądają pliki /etc/passwd i fstab. Powinieneś wiedzieć, że większość poleceń w tym HOWTO powinna być wykonywana gdy jesteś zalogowany jako root.

Konstruowanie swojej własnej dyskietki startowej od zera może być skomplikowane. Jeśli nie czytałeś Linux FAQ i powiązanych dokumentów, takich jak Linux Installation HOWTO i Linux Installation Guide, to nie powinieneś tworzyć dyskietek startowych. Jeśli potrzebujesz jedynie działającej dyskietki startowej na wypadek awarii, to o wiele łatwiej będzie ściągnąć gotową. Aby je znaleźć, zajrzyj do dodatku Gotowe dyskietki.

## 3. Dyskietki startowe i proces startu systemu.

Dyskietka startowa jest po prostu miniaturowym systemem Linux na dyskietce. Musi on spełniać wiele funkcji wykonywanych przez zwykły, pełnowymiarowy system Linux. Zanim spróbujesz stworzyć własną dyskietkę, musisz zrozumieć podstawy startowania systemu Linux. Prezentujemy tutaj jedynie podstawy, które są wystarczające do zrozumienia reszty tego dokumentu. Wiele szczegółów i opcji alternatywnych zostało ominiętych.

## 3.1 Proces startu systemu.

Wszystkie komputery PC rozpoczynają proces startu systemu przez wykonanie kodu znajdującego się w pamięci ROM (konkretnie w BIOS-ie), który ładuje jeden sektor z sektora 0, cylindra 0 napędu startowego. Napęd startowy to zazwyczaj pierwszy napęd dyskietek (oznaczony `A:` w DOS-ie i /dev/fd0 w Linuxie). Następnie BIOS próbuje wykonać zawartość tego sektora. Na większości dyskietek startowych sektor 0, cylinder 0 zawiera:

- kod programu ładującego takiego jak LILO, który, aby wystartować system, lokalizuje jądro, ładuje je i wykonuje.
- początek jądra systemu operacyjnego, takiego jak Linux.

Jeśli jądro Linuxa zostało przekopiowane bezpośrednio na dyskietkę, to pierwszy sektor dyskietki będzie jednocześnie pierwszym sektorem jądra. Kod znajdujący się w pierwszym sektorze będzie kontynuował proces startu ładując resztę jądra z dyskietki.

Gdy jądro zostanie w całości załadowane, rozpoczyna ono inicjalizację sterowników. Następnie próbuje ono załadować i zamontować główny system plików z jednego z urządzeń. Główny system plików to po prostu system montowany jako ``/''. Jądro musi wiedzieć, gdzie szukać głównego systemu plików, jeśli nie znajdzie tam obrazu który można załadować, zawiesza się.

W niektórych sytuacjach -- często w czasie startowania z dyskietki -- główny system plików zostaje załadowany do ramdysku, czyli do pamięci RAM która jest traktowana przez system tak, jakby była dyskiem. Istnieją dwa powody dla których system ładuje się do ramdysku. Po pierwsze, RAM jest o wiele szybszy niż dyskietka, tak więc operacje systemowe są wykonywane szybko. Po drugie, jądro może załadować skompresowany system plików z dyskietki i rozpakować go do ramdysku, dzieki czemu na dyskietce można zmieścić o wiele więcej plików.

Gdy główny system plików zostanie załadowany i zamontowany, ujrzysz taką informację:

          VFS: Mounted root (ext2 filesystem) readonly.

Następnie system odnajduje w głównym systemie plików program `init` (w katalogu `/bin` lub `/sbin`) i wykonuje go. `init` odczytuje swój plik konfiguracyjny /etc/inittab, szuka lini oznaczonej `sysinit` i wykonuje podany tam skrypt. Skrypt `sysinit` to najczęściej plik /etc/rc, /etc/init.d/boot lub podobny. Ten skrypt to seria komend powłoki, które inicjalizują podstawowe usługi systemu, oraz wykonują czynności takie jak:

- Uruchamianie `fsck` na wszystkich dyskach,
- Ładowanie potrzebnych modułów jądra,
- Startowanie pamięci swap,
- Inicjalizacja sieci,
- Montowanie dysków wymienionych w `fstab`.

Ten skrypt często wywołuje inne skrypty odpowiadające za inicjalizację poszczególnych modułów. Na przykład, w typowej procedurze inicjalizacyjnej systemów zgodnych z SysV, katalog /etc/rc.d/ zawiera złożoną strukturę podkatalogów, których pliki odpowiedzialne są za załączanie i wyłączanie poszczególnych usług systemu. Jednak na dyskietce startowej skrypty sysinit są na ogół bardzo proste.

Gdy skrypt sysinit zakończy pracę, kontrola powraca do programu `init`, który następnie wchodzi na domyślny poziom pracy, podany w pliku `inittab` przy słowie kluczowym `initdefault`. Linie poziomów pracy na ogół wyszczególniają program taki jak `getty`, który jest odpowiedzialny za obsługę komunikacji przez konsolę i terminale. To własnie program `getty` wypisuje znaną wszystkim linię zachęty ```login:`''. Wywołuje on następnie program `login`, który przeprowadza weryfikacje i ustanawia sesję użytkownika.

## 3.2 Typy dysków.

Po zapoznaniu się z podstawami procesu startowania systemu, możemy zdefiniować różne typy dyskietek. Dzielimy je na cztery rodzaje.

startowa

  Dyskietka zawierająca jądro które może zostać uruchomione. Dyskietka może zostać użyta do wystartowania jądra, które następnie może załadować główny system plików z innego dysku. Jądro na dyskietce startowej zwykle musi wiedzieć, gdzie znaleźć swój główny system plików.

  Często dyskietka startowa ładuje główny system plików z innej dyskietki, ale jest także móżliwe ładowanie głównego systemu plików z twardego dysku. Najczęściej robi się to po to, aby przetestować nowe jądro (w rzeczywistości podczas kompilacji nowego jądra polecenie ```make zdisk`'' utworzy taką dyskietkę startową).

główna

  Dyskietka z systemem plików zawierającym pliki wymagane do uruchomienia systemu Linux. Taka dyskietka nie musi zawierać jądra czy programu ładującego.

  Gdy jądro zostało już wystartowane, główna dyskietka może zostać użyta, aby uruchomić system niezależnie od innego dysku. Zazwyczaj główna dyskietka jest automatycznie kopiowana do ramdysku. Znacznie przyspiesza to dostęp do danych, oraz zwalnia miejsce w stacji na dyskietkę narzędziową.

startowa/główna

  Dyskietka zawierająca zarówno jądro, jak i główny system plików. Innymi słowy zawiera ona wszystko, co potrzebne do wystartowania i uruchomienia Linuxa bez twardego dysku. Zaletą takich dyskietek jest ich zwięzłość -- wszystko znajduje się na jednej dyskietce. Jednak rozmiary wszystkich elementów ciągle się powiększają, więc coraz trudniej zmieścić wszystko na jednej dyskietce, nawet przy użyciu kompresji.

narzędziowa

  Dyskietka ta zawiera system plików, ale nie jest on jednak montowany jako główny system plików. Jest to dodatkowa dyskietka z danymi. Używa się jej aby dostarczyć dodatkowe programy narzędziowe niemieszczące się na głównej dyskietce.

Gdy mówimy o ``tworzeniu dyskietki startowej'', mamy na myśli tworzenie zarówno części startowej (jądra) jak i głównej (plików). Mogą one znajdować się razem lub osobno. Najbardziej elastycznym rozwiązaniem w przypadku dyskietek ratunkowych jest użycie osobnej dyskietki startowej i głównej, oraz jednej lub więcej dyskietki narzędziowej.

## 4. Budowanie głównego systemu plików.

Tworzenie głównego systemu plików wymaga wyselekcjonowania plików niezbędnych dla działania systemu. W tym rozdziale opiszemy, jak zbudować skompresowany główny system plików. Rzadziej spotykanym rozwiązaniem jest stworzenie nieskompresowanego systemu plików na dyskietce, która będzie mogła zostać bezpośrednio zamontowana jako główna. Taka alternatywa jest opisana w rozdziale Systemy plików bez ramdysku.

## 4.1 Wiadomości ogólne.

Główny system plików musi zawierać to wszystko, co potrzebne jest do prawidłowego działania pełnego systemu Linux. Aby tego dokonać, dyskietka musi spełniać minimalne wymagania dla systemu Linux, to znaczy musi posiadać:

- Podstawową strukturę systemu plików,
- Minimalny zestaw katalogów: `/dev, /proc, /bin, /etc, /lib, /usr, /tmp`,
- Podstawowy zestaw programów użytkowych: `sh, ls, cp, mv`, itd.,
- Minimalny zestaw plików konfiguracyjnych: `rc, inittab, fstab`, itd.,
- Urządzenia: `/dev/hd*, /dev/tty*, /dev/fd0`, etc.,
- Biblioteki zapewnieniające podstawowych funkcji używanych przez programy użytkowe.

Oczywiście system staje się użyteczny tylko wtedy, gdy można coś na nim uruchomić. Dyskietka główna w zasadzie staje się użyteczna tylko wtedy, gdy można wykonać poniższe czynności:

- Sprawdzić system plików na innym dysku. Na przykład aby sprawdzić główny system plików na dysku twardym musisz uruchomić system z innego dysku, takiego jak dyskietka startowa. Następnie musisz uruchomić program `fsck` sprawdzający dysk twardy gdy nie jest on zamontowany.
- Odzyskać całość lub część twardego dysku z kopii zapasowej, używając programów kompresujących i archiwizujących takich jak `cpio, tar, gzip` i `ftape`.

Opiszemy jak stworzyć skompresowany system plików, nazwany tak dlatego, że jest on spakowany na dyskietce a podczas startu systemu zostaje zdekompresowany do ramdysku. W skompresowanym systemie plików można zmieścić sporo plików (około sześć megabajtów) na standardowej dyskietce 1.44MB. System plików jest większy niż dyskietka, więc nie można go tworzyć na dyskietce. Musimy stworzyć go gdzie indziej, skompresować a następnie skopiować na dyskietkę.

## 4.2 Tworzenie systemu plików.

Aby stworzyć główny system plików potrzebne jest wolne urządzenie, na którym muszą zmieścić się pliki przed kompresją. Potrzebujesz urządzenia o rozmiarze co około czterech megabajtów. Istnieje kilka możliwości:

- Użyj ramdysku (URZĄDZENIE = /dev/ram0). W takiej sytuacji pamięć operacyjna jest wykorzystywana do zasymulowania dysku. Ramdysk musi być odpowiedniej wielkości, tak, aby zmieścił się na nim tworzony system plików. Jeśli korzystasz z LILO, to w pliku konfiguracyjnym (/etc/lilo.conf) powinna znajdować się linia:

            RAMDISK_SIZE = nnn

  która ustala ilość przydzielanej pamięci RAM. Wartością domyślną jest 4096K, co powinno wystarczyć do naszych celów. Prawdopodobnie nie powinieneś tworzyć takiego ramdysku na komputerze z mniej niż 8MB RAM. Upewnij się czy istnieje urządzenie /dev/ram0, /dev/ram czy /dev/ramdisk. Jeśli nie, to utwórz /dev/ram0 za pomocą polecenia `mknod` (liczba główna 1, poboczna 0).
- Dobrym rozwiązaniem jest wystarczająco duża partycja na dysku twardym.
- Użyj użądzenia zwrotnego, które umożliwia traktowanie pliku na dysku jako urządzenia. Korzystając z urządzenia zwrotnego możesz stworzyć na dysku twardym plik mający trzy megabajty i zbudować w nim system plików. Wpisz `man losetup` aby uzyskać informacje na temat korzystania z urządzeń zwrotnych. Jeśli nie posiadasz `losetup`, możesz go znaleźć razem z kompatybilnymi wersjami `mount` i `umount` w pakiecie `util-linux` pod adresem ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/.

  Jeśli nie posiadasz urządzenia zwrotnego (/dev/loop0, /dev/loop1, itd.) w systemie, to musisz je stworzyć za pomocą polecenia ```mknod /dev/loop0 b 7 0`''. Po zainstalowaniu nowych wersji `mount` i `umount` stwórz na dysku plik tymczasowy o odpowiednim rozmiarze (np. /tmp/fsfile). Możesz użyć komendy

              dd if=/dev/zero of=/tmp/fsfile bs=1k count=<it/nnn/

  aby stworzyć plik o długości nnn bloków.

  W poniższych przykładach użyj nazwy pliku zamiast słowa URZĄDZENIE. Gdy montujesz taki plik, musisz dodać opcję ```-o loop`'' aby poinformować system, że jest to urządzenie zwrotne. Na przykład polecenie

            mount -o loop -t ext2 /tmp/fsfile /mnt

  zamontuje plik /tmp/fsfile (poprzez urządzenie zwrotne) w katalogu `/mnt`. Polecenie `df` potwierdzi to.

Gdy już wybrałeś jedną z tych możliwości, przygotuj URZĄDZENIE za pomocą polecenia:

          dd if=/dev/zero of=URZĄDZENIE bs=1k count=3000

Ta komenda wyzerowuje urządzenie. Ten krok jest bardzo ważny, ponieważ system plików zostanie później skompresowany, więc niewykorzystany obszar powinien zostać wypełniony zerami, aby otrzymać jak najlepszą kompresję.

Następnie stwórz system plików. Jądro Linuxa rozpoznaje i kopiuje z dyskietki głównej do ramdysku dwa rodzaje systemów plików. Są to minix i ext2, jednak preferowany jest ten drugi. Jeśli zdecydujesz się na ext2, to przydatna może okazać się opcja `-i`, dzięki której możesz stworzyć więcej i-węzłów niż jest to przyjęte domyślnie. Zalecane jest użycie opcji `-i 2000`, aby nie zabrakło ci i-węzłów. Ewentualnie możesz zaoszczędzić sporo i-węzłów poprzez usunięcie wielu niepotrzebnych plików z katalogu `/dev`. Na dyskietce 1.44MB polecenie `mke2fs` domyślnie utworzy 360 i-węzłów. Na mojej dyskietce ratunkowej wystarcza w zupełności 120 i-węzłów, jednak gdy dołączysz wszystkie urządzenia z katalogu `/dev` z pewnością przekroczysz 360. Użycie skompresowanego systemu plików daje do dyspozycji więcej miejsca, czyli jednocześnie większą ilość domyślnych i-węzłów, ale ciągle może okazać się konieczna redukcja liczby plików czy zwiększenie liczby i-węzłów.

Tak więc polecenie które użyjesz powinno wyglądać mniej więcej tak:

          mke2fs -m 0 -i 2000 URZĄDZENIE

(Jeśli korzystasz z urządzenia zwrotnego, to w miejsce URZĄDZENIA powinieneś podać nazwę pliku. W tej sytuacji program `mke2fs` zapyta czy naprawdę chcesz to zrobić, odpowiedz tak).

Program `mke2fs` automatycznie wykryje ilość wolnego miejsca i odpowiednio się skonfiguruje. Opcja `-m 0` zapobiega rezerwowaniu miejsca dla użytkownika root, powiększając w ten sposób dostępny obszar na dysku.

Następnie zamontuj urządzenie:

          mount -t ext2 URZĄDZENIE /mnt

(Musisz stworzyć katalog `/mnt` jeśli jeszcze nie intnieje.) W pozostałych działach wszystkie nazwy katalogów będą podawane wzgędem katalogu `/mnt`.

## 4.3 Zapełnianie systemu plików.

Poniżej znajduje się minimalny zestaw katalogów dla twojego głównego systemu plików:

- `/dev` -- Urządzenia, wymagane do operacji wejścia/wyjścia
- `/proc` -- Katalog wymagana przez system plików proc
- `/etc` -- Pliki konfiguracyjne systemu
- `/sbin` -- Programy krytyczne dla działania systemu
- `/bin` -- Podstawowe programy uważane za część systemu
- `/lib` -- Biblioteki dzielone
- `/mnt` -- Miejsce montowania innych systemów plików
- `/usr` -- Dodatkowe narzędzia i aplikacje

(Pokazana tutaj struktura katalogów odnosi się jedynie do głównych dyskietek. Prawdziwe systemy Linux używają bardziej złożonych i rygorystycznych zasad ustalania gdzie plik powinien się znajdować, zwanych Filesystem Hierarchy Standard).

Trzy katalogi w głównym systemie plików pozostaną puste, więc wystarczy je utworzyć komendą `mkdir`. Katalog `/proc` to po prostu miejsce, w którym umieszczony zostanie system plików proc. Katalogi `/mnt` i `/usr` są tylko miejscami montowania innych systemów plików gdy dyskietka startowa/główna już działa. Także te katalogi wystarczy jedynie utworzyć.

Pozostałe cztery katalogi są opisane w następnych działach.

### /dev

Katalog `/dev` zawiera specjalne pliki dla każdego wykorzystywanego przez system urządzenia, katalog ten jest obowiązkowy. Jest to zwykły katalog, więc może zostać stworzony poleceniem `mkdir`. Jednak poszczególne pliki urządzeń muszą zostać utworzone w nietypowy sposób, za pomocą komendy `mknod`.

Istnieje jednak droga na skróty, możesz skopiować zawartość istniejącego już katalogu `/dev` i skasować niepotrzebne pliki. Podczas kopiowania musisz użyć opcji `-R`, dzięki temu nie będzie kopiowana zawartość plików. Upewnij się, że użyłeś R pisanego wielką literą. Jeśli użyjesz małej litery `-r`, prawdopodobnie będziesz kopiował zawartość wszystkich swoich twardych dysków, a raczej tyle, ile się z nich zmieści na dyskietce. Tak więc uważaj i użyj komedy:

          cp -dpR /dev /mnt

przyjmując że system plików jest zamontowany w `/mnt`. Opcja `dp` spowoduje, że połączenia symboliczne zostaną skopiowane jako połączenia, a nie odpowiadające im pliki, oraz zostaną zachowane oryginalne atrybuty plików, włączając w to prawa własności.

Jeśli jednak masz ochotę trochę się pomęczyć, użyj komendy `ls -l` aby wyświetlić główne i pomniejsze numery potrzebnych urządzeń, a następnie utwórz je w katalogu docelowym używając polecenia `mknod`.

Gdy pliki zostaną skopiowane, warto sprawdzić czy posiadasz wszystkie potrzebne urządzenia. Na przykład `ftape` korzysta z napędów taśmowych, więc musisz skopiować to urządzenie jeśli chcesz mieć dostęp do napędu taśmowego z dyskietki startowej.

Pamiętaj, że każdy plik urządzenia wymaga jednego i-węzła, więc i-węzły są cennym zasobem, szególnie w przypadku systemów dyskietkowych. Dobrym pomysłem jest usunięcie niepotrzebnych urządzeń z katalogu `/dev` dyskietki. Wiele urządzeń jest kompletnie nieprzydatnych w konkretnych systemach. Na przykład jeśli nie posiadasz żadnych dysków SCSI, możesz bez żadnych problemów usunąć wszystkie urządzenia zaczynające się na `sd`. Jeśli nie masz zamiaru korzystać z portu szeregowego, możesz usunąc wszystkie pliki zaczynające się od `cua`.

Upewnij się, że posiadasz następujące urządzenia: `console, kmem, mem, null, ram, tty1`.

### /etc

Ten katalog musi zawierać pliki konfiguracyjne. Zwykle pliki w tym katalogu dzielą się na trzy grupy:

1. Zawsze wymagane przez system, np. `rc, fstab, passwd`.
2. Wymagane w niektórych sytuacjach.
3. Pozostałe śmieci.

Pliki, które nie są najważniejsze, mogą zostać znalezione za pomocą komendy:

> `

>           ls -ltru

> `

Wyświetla ona listę plików posortowaną według daty ostatniego dostępu, więc jeśli plik nie był czytany, to znaczy że można go pominąć na głównej dyskietce.

Na mojej głównej dyskietce mam około 15 plików konfiguracyjnych. Zmniejsza to ilość pracy, którą trzeba poświecić na poprawę trzch grup plików:

1. Pliki, które należy skonfigurować:
   1. `rc.d/*` -- skrypty startu systemu i zmiany poziomu pracy
   2. `fstab` -- lista systemów plików, które należy zamontować
   3. `inittab` -- parametry dla programu `init`, uruchamianego przy starcie systemu.
2. Pliki, które należy poprawić:
   1. `passwd` -- spis użytkowników, katalogów domowych itd.
   2. `group` -- grupy użytkowników
   3. `shadow` -- hasła użytkowników, możesz nie posiadać tego pliku.
   4. `termcap` -- the terminal capability database.
   Gdy liczy się bezpieczeństwo, pliki `passwd` i `shadow` powinny zostać okrojone, aby uniemożliwić kopiowanie haseł poza system. Upewnij się, że plik `passwd` zawiera przynajmniej użytkownika `root`. Jeśli chcesz umożliwić logowanie się innym użytkownikom, to upewnij się czy istnieją ich powłoki i katalogi domowe. `termcap`, baza danych terminali, zwykle liczy kilkaset kilobajtów. Wersja znajdująca się na dyskietce powinna być okrojona tak, aby zawierała jedynie używany terminal(e), czyli najczęściej jedynie wpis `linux-console`.
3. Pozostałe pliki. Na razie działają, więc można zostawić je w spokoju.

Teraz trzeba skonfigurować jedynie dwa pliki, ich zawartość jest zaskakująco mała.

- Plik `rc` powinien zawierać:

            #!/bin/sh
            /bin/mount -av
            /bin/hostname Kangaroo

  Upewnij się, że katalogi są poprawne. W zasadzie nie musisz uruchamiać `hostname`, jednak jest to zalecane.
- Plik `fstab` powinien zawierać conajmniej:

            /dev/ram0       /               ext2    defaults
            /dev/fd0        /               ext2    defaults
            /proc           /proc           proc    defaults

  Możesz też skopiować pozycje z istniejącego pliku `fstab`, ale nie powinieneś automatycznie montować partycji na twardym dysku. Użyj przy nich opcji `noauto`. Pamiętaj, twój dysk twardy może być uszkodzony, gdy będziesz korzystał z dyskietki startowej.

Plik `inittab` powinien być zmodyfikowany tak, aby pozycja `sysinit` uruchamiała `rc`, czy jakiś inny skrypt startowy. Dodatkowo, jeśli nie chcesz pozwolić użytkownikom logować się przez port szeregowy, dodaj znak komentarza przed każdą linią `getty` zawierającą na końcu urządzenie `ttys` lub `ttyS`. Pozostaw porty `tty`, abyś mógł się zalogować z konsoli.

Minimalny plik `inittab` wygląda tak:

          id:2:initdefault:
          si::sysinit:/etc/rc
          1:2345:respawn:/sbin/getty 9600 tty1
          2:23:respawn:/sbin/getty 9600 tty2

Plik `inittab` określa, co system robi w niektórych sytuacjach i na poszczególnych poziomach pracy. Upewnij się, że istnieją wszystkie nazwy plików wymienione w `inittab`, `init` zawiesi się bez żadnego komunikatu o błędzie, jeśli nie znajdzie któregoś z wymienionych tam programów.

Należy sprawdzić, czy komendy znajdujące się w pliku `inittab` odpołują się do programów, które istnieją w odpowiednim katalogu. Jeśli umieścisz programy na dyskietce korzystając ze spisu w dodatku Spis plików przykładowej dyskietki głównej i skopiujesz plik `inittab` z dysku bez dokonania poprawek, to prawdopodobnie ponad połowa wpisów w tym pliku będzie się odwoływała do nieistniejących programów czy nieprawidłowych katalogów.

Niektóre programy nie mogą zostać przeniesione gdzie indziej, ponieważ inne programy szuają ich w ściśle określonym miejscu. Na przykład w moim systemie /etc/shutdown wymaga /etc/reboot. Jeśli przeniosę `reboot` do /bin/reboot i wykonam komendę `shutdown`, to wystąpi błąd, ponieważ nie może on znaleźć pliku `reboot`.

Jeśli chodzi o resztę, to skopiuj pozostałe pliki tekstowe oraz potrzebne programy z katalogu `/etc`. Jako przykład może służyć dodatek Spis plików przykładowej dyskietki startowej. Prawdopodobnie wystarczy skopiować tylko te pliki, które tam wypisano, jednak poszczególne systemy bardzo się różnią, więc nie możesz być pewien, czy nazwy pliku na tej liście pokrywają się z nazwami w twoim systemie. Jedyną pewną metodą jest sprawdzenie w pliku `inittab`, które pliki są wymagane.

Większość systemów posiada katalog /etc/rc.d/ zawierający skrypty dla poszczególnych poziomów pracy. Aby system działał, wymagany jest przynajmniej jeden skrypt `rc`, jednak prościej skopiować plik `inittab` i katalog /etc/rc.d z istniejącego systemu i wyciąć niepotrzebne dla systemu dyskietkowego pozycje ze skryptów w katalogu `rc.d`.

### /bin i /sbin

Katalog `/bin` jest odpowiednim miejscem dla dodatkowych programów użytkowych wykonujących podstawowe operacje, takich jak `ls`, `mv`, `cat` czy `dd`. W dodatku Spis plików przykładowej dyskietki startowej znajdziesz przykładową listę plików katalogu `/bin` i `/sbin`. Nie zawiera ona jednak programów potrzebnych do odtwarzania plików z kopii zapasowych, takich jak `cpio`, `tar` i `gzip`, ponieważ, aby zaoszczędzić miejsce, umieszczam je na osobnej dyskietce narzędziowej. Gdy główna/startowa dyskietka zostaje wystartowana, zostaje ona skopiowana do ramdysku, pozostawiając miejsce w napędzie do zamontowania kolejnej dyskietki --- dyskietki narzędziowej. Zwykle montuję ją w katalogu `/usr`.

Tworzenie dyskietki narzędziowej jest opisane dalej, w dziale Budowanie dyskietki narzędziowej. Zalecane jest skopiowanie tych samych wersji programów, co użyte do stworzenia kopii zapasowej, aby nie zdarzyło się, że nie możesz odtworzyć swojej kopii, ponieważ wersje są niekompatybilne.

Upewnij się, że skopiowałeś następujące programy: `init`, `getty` lub ich odpowiedniki, `login`, `mount`, jakąś powłokę potrafiącą uruchomić skrypty rc, dowiązanie `sh` do powłoki.

### /lib

W katalogu `/lib` umieszczasz potrzebne biblioteki dzielone oraz programy służące do ich ładowania. Jeśli wymagane biblioteki nie zostaną odnalezione w katalogu `/lib`, to system się nie zostanie wystartowany. Przy odrobinie szczęścia możesz ujrzeć komunikat mówiący o błędzie.

Prawie każdy program wymaga co najmniej biblioteki `libc`, `libc.so.N`, gdzie N to numer wersji. Sprawdz w swoim katalogu `/lib`. Plik `libc.so.N` jest na ogół symbolicznym dowiązaniem do aktualnej wersji:

> `

>      % ls -l /lib/libc*
>      -rwxr-xr-x   1 root     root      4016683 Apr 16 18:48 libc-2.1.1.so*
>      lrwxrwxrwx   1 root     root           13 Apr 10 12:25 libc.so.6 ->

> `

W tym przypadku potrzebny jest plik `libc-2.1.1.so`. Aby dowiedzieć się, jakie jeszcze biblioteki są potrzebne, powinieneś sprawdzić wszystkie pliki wykonywalne które chcesz umieścić na dyskietce i sprawdzić ich zależności komendą `ldd`. Na przykład:

          % ldd /sbin/mke2fs
                  libext2fs.so.2 => /lib/libext2fs.so.2
                  libcom_err.so.2 => /lib/libcom_err.so.2
                  libuuid.so.1 => /lib/libuuid.so.1
                  libc.so.5 => /lib/libc.so.5

Wymagany jest każdy plik po prawej stronie. Pamiętaj, że wymienione biblioteki mogą być tylko symbolicznymi dowiązaniami.

Zauważ, że niektóre biblioteki są całkiem spore i mogą nie zmieścić się w głównym systemie plików. Na przykład biblioteka `libc.so` wspomniana wyżej liczy około 4MB. Prawdopodobnie będziesz musiał okroić biblioteki przed kopiowaniem. Zajrzyj do działu Redukowanie głównego systemu plików po więcej informacji.

Dodatkowo w katalogu `/lib` musisz umieścić program ładujący biblioteki. Jest to plik `ld.so` (dla bibliotek a.out) lub `ld-linux.so` (dla bibliotek ELF). Jeśli nie jesteś pewien którego z nich potrzebujesz, wykonaj komendę `file` z nazwą biblioteki jako parametr. Na przykład:

            % file/lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so
            /lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
            /lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped
            /lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped

`QMAGIC` oznacza, że wersja `4.7.2` jest biblioteką a.out, a `ELF` oznacza, że wersja `5.4.33` i `2.1.1` jest biblioteką ELF.

Skopiuj odpowiedni program ładujący biblioteki do tworzonego głównego systemu plików. Powinieneś dokładnie sprawdzić, czy posiadasz wszystkie konieczne biblioteki i odpowiedni program ładujący. Jeśli jądro nie potrafi załadować potrzebnej biblioteki, na ogół zawiesza się bez żadnego komunikatu.

## 4.4 Providing for PAM and NSS.

System może wymagać dynamicznie ładowanych bibliotek niewidocznych dla ldd.

### PAM (Pluggable Authentication Modules).

Jeśli twój system korzysta z PAM (Pluggable Authentication Modules), to musisz się na to przygotować, ponieważ w przeciwnym wypadku nie będziesz mógł się zalogować. Ogólnie mówiąc PAM to skomplikowany modularny sposób uwierzytelniania użytkowników i kontroli ich dostępu do usług. Jeśli w katalogu /etc znajduje się katalog pam.conf lub pam.d, musisz dołączyć pewne minimalne wsparcie dla PAM. (Możesz także uruchomić ldd na pliku login, jeśli w wyjściu znajdzie się tekst libpam.so, potrzebujesz PAM).

Na szczęście kwestie bezpieczeństwa nie są zazwyczaj istotne przy tworzeniu dyskietki startowej, jako że każdy posiadający fizyczny dostęp do komputera może z nim zrobić wszystko. Tak więc możesz po prostu wyłączyć PAM tworząc w głównym systemie plików prosty plik /etc/pam.conf, taki jak ten:

    OTHER   auth       optional     /lib/security/pam_permit.so
    OTHER   account    optional     /lib/security/pam_permit.so
    OTHER   password   optional     /lib/security/pam_permit.so
    OTHER   session    optional     /lib/security/pam_permit.so

Skopiuj także plik /lib/security/pam_permit.so do głównego systemu plików. Ta biblioteka liczy jedynie 8KB.

Zauważ, że taka konfiguracja daje każdemu pełny dostęp do plików i usług w systemie. Jeśli z jakiś względów bezpieczeństwo dyskietki startowej jest dla ciebie ważne, musisz skopiować niektóre lub wszystkie pliki konfiguracyjne PAM z twardego dysku. Przeczytaj uważnie dokumentację PAM i skopuj wszystkie potrzebne biblioteki z /lib/security do głównego systemu plików.

Musisz także skopiować na dyskietkę plik /lib/libpam.so, ale o tym już wiesz, ponieważ uruchomiłeś `ldd` na /bin/login, który pokazał zależność.

### NSS (Name Service Switch).

Jeśli korzystasz z glibc (aka libc6), będziesz musiał przygotować się na usługi nazw, w przeciwnym wypadku nie będziesz mógł się zalogować. Plik /etc/nsswitch.conf kontroluje dostęp do bazy danych dla poszczególnych usług. Jeśli nie planujesz korzystać z usług przez sieć (np. DNS i NIS), musisz przygotować jedynie prosty plik nsswitch.conf, taki jak ten:

         passwd:     files
         shadow:     files
         group:      files
         hosts:      files
         services:   files
         networks:   files
         protocols:  files
         rpc:        files
         ethers:     files
         netmasks:   files
         bootparams: files
         automount:  files
         aliases:    files
         netgroup:   files
         publickey:  files

Określa to, że każda usługa będzie udostępniana jedynie poprzez lokalne pliki. Będziesz musiał także dołączyć plik `/lib/libnss_files.so.1`, który będzie dynamicznie ładowany aby obsłużyć żądania.

Jeśli chcesz mieć dostęp do sieci z dyskietki startowej, możesz utworzyć bardziej rozbudowany plik nsswitch.conf. Aby dowiedzieć się więcej, zajrzyj na stronę man nsswitch. Pamiętaj że musisz dołączyć plik `/lib/libnss_`usługa`.so.1` dla każdej usługi.

## 4.5 Moduły.

Jeśli posiadasz jądro obsługujące moduły, to musisz zastanowić się, które moduły mogą być potrzebne po wystartowaniu systemu. Prawdopodobnie potrzebujesz modułów `ftape` i `zftape` jeśli posiadasz napęd taśmowy, modułów do urządzeń SCSI jeśli takie posiadasz i ewentualnie modułów do obsługi PPP i SLIP jeśli chcesz mieć dostęp do sieci.

Te moduły powinny zostać umieszczone w katalogu /lib/modules. Powinieneś także dołączyć programy `insmod`, `rmmod` i `lsmod`. Jeśli chcesz automatycznie ładować moduły, to możesz dołączyć `modprobe`, `depmod` i `swapout`. Jeśli korzystasz z `kerneld`, to dołącz go razem z plikiem /etc/conf.modules.

Jednak największą zaletą korzystania z modułów jest możliwość przeniesienia niektórych z nich na dystkietkę narzędziową, oszczędzając w ten sposób miejsce na głównej dyskietce. Gdy potrzebna jest obsługa wielu różnych urządzeń, takie podejście jest lepsze niż budowa jednego wielkiego jądra z wieloma wbudowanymi sterownikami.

Pamiętaj, aby wystartować skompresowany system plików ext2, musisz posiadać wbudowaną w jądro obsługę ext2 i ramdysku. Nie mogą znajdować się one w postaci modułów.

## 4.6 Końcowe detale.

Pewne programy systemowe, takie jak `login`, do poprawnego działania wymagają pliku /var/run/utmp i katalogu /var/log. Tak więc:

          mkdir -p /mnt/var/{log,run}
          touch /mnt/var/run/utmp

Na koniec, gdy skopiowałeś już wszystkie wymagane biblioteki, uruchom program `ldconfig` aby odświeżyć plik /etc/ld.so.cache w głównym systemie plików. Plik ten informuje program ładujący gdzie znaleźć biblioteki. Aby odświeżyć `ld.so.cache` wykonaj następujące komendy:

          chdir /mnt; chroot /mnt /sbin/ldconfig

Polecenie `chroot` jest konieczne, ponieważ `ldconfig` zawsze odświeża plik cache dla głównego katalogu.

## 4.7 Kopiowanie na dyskietkę.

Gdy już skończyłeś tworzenie głównego systemu plików, odmontuj go, skopiuj do pliku i skompresuj:

          umount /mnt
          dd if=URZĄDZENIE bs=1k | gzip -v9 > rootfs.gz

Zostanie utworzony plik `rootfs.gz` który jest skompresowanym głównym systemem plików. Powinieneś sprawdzić, czy zmieści się na dyskietce, jeśli nie, to będziesz musiał cofnąć się i usunąć jakieś pliki. Dział Redukowanie głównego systemu plików zawiera kilka porad na ten temat.

## 5. Wybieranie jądra.

W tej chwili posiadasz skompresowany główny system plików. Następny krok to zbudowanie lub wybranie jądra. W wiekszości przypadków możliwe jest skopiowanie aktualnego jądra i wystartowanie z niego dyskietki. Jednak w niektórych przypadkach będziesz chciał stworzyć swoje własne jądro.

Pierwszym powodem jest jego rozmiar. Jeśli tworzysz pojedyńczą dyskietkę startową/główna, to jądro będzie jednym z największych plików na dyskietce, więc będziesz musiał jak najbardziej zredukować jego rozmiar. Aby zmniejszyć rozmiar jądra, skompiluj je z minimalną liczbą opcji konieczną do działania systemu. Powinieneś wyłączyć wszystko, co nie jest potrzebne. Można spokojnie wyrzucić obsługę sieci, jak również obsługę wszystkich napędów i innych urządzeń których nie potrzebujesz w czasie korzystania z dyskietki. Pamiętaj, że twoje jądro musi posiadać wbudowaną obsługę ramdysku oraz systemu plików ext2.

Po wybraniu minimalnej konfiguracji jądra, powinieneś zastanowić się co jeszcze może być ci potrzebne. Naczęściej korzysta się z dyskietki startowej aby sprawdzić i odzyskać uszkodzone dane w systemie plików, a do tego możesz potrzebować wbudowanej obsługi w jądrze. Na przykład jeśli swoje kopie zapasowe przechowujesz na taśmie używając Ftape, to jeśli utracisz swój system plików i napędy zawierające Ftape, nie będziesz mógł odtworzyć danych z taśm zapasowych. Będziesz musiał przeinstalować Linuxa, ściągnąć i przeinstalować ftape i dopiero wtedy odczytywać kopie zapasowe.

Generalnie chodzi o to, aby instalować w jądze obsługę wszystkich potrzebnych urządzeń wejścia/wyjścia.

Procedura kompilowania jądra jest opisana w dokumentacji dołączonej do jądra. Jest ona bardzo łatwa, najpierw zajrzyj do katalogu /usr/src/linux. Jeśli masz probemy ze skompilowaniem jądra, to raczej nie powinieneś brać się do tworzenia dyskietki startowej. Pamiętaj, aby skompresować jądro poleceniem ```make zImage`''.

## 6. Składnie tego wszystkiego: tworzenie dyskietek.

W tym momencie powinieneś posiadać jądro oraz skompresowany główny system plików. Jeśli tworzysz dyskietkę startową/główną, sprawdź, czy oba pliki zmieszczą się na dyskietce. Jeśli tworzysz osobno dystkietkę startową i główną, sprawdź, czy główny system plików zmieści się na jednej dyskietce.

Powinieneś zdecydować, czy używać LILO do wystartowania jądra. Alternatywnym rozwiązaniem jest skopiowanie jądra bezpośrednio na dyskietkę i wystartowanie bez LILO. Zaletą korzystania z LILO jest to, że umożliwia on przekazanie pewnych parametrów do jądra które mogą być konieczne do inicjalizacji sprzętu. Sprawdź plik /etc/lilo.conf. Jeśli istnieje on i zawiera linię ```append=...`'', prawdopodobnie musisz przekazać jakieś parametry. Wadą korzystania z LILO jest to, że tworzenie dyskietki jest bardziej skomplikowane, i zajmuje trochę więcej miejsca. Musisz utworzyć odrębny system plików, który nazwiemy systemem plików jądra, do którego skopiujesz jądro i kilka innych plików wymaganych przez LILO.

Jeśli zamierzasz korzystać z LILO, czytaj dalej. Jeśli chcesz skopiować jądro bezpośrednio na dyskietkę, przejdź do działu Przenoszenie jądra bez LILO.

## 6.1 Przenoszenie jądra z LILO.

Pierwszą rzeczą, która musisz zrobić, jest stworzenie małego pliku konfiguracyjnego dla LILO. Powinien on wyglądać mniej więcej tak:

          boot      =/dev/fd0
          install   =/boot/boot.b
          map       =/boot/map
          read-write
          backup    =/dev/null
          compact
          image     = KERNEL
          label     = Bootdisk
          root      =/dev/fd0

Znaczenia tych parametrów szukaj w dokumentacji LILO. Prawdopodobnie będziesz chciał również dodać do pliku linię `append=...` taką samą, jak w pliku /etc/lilo.conf na dysku twardym.

Zapisz ten plik jako `bdlilo.conf`.

Następnie musisz stworzyć mały system plików, który nazwiemy systemem plików jądra, aby odróżnić go od głównego systemu plików.

Najpierw sprawdź, jak duży powinien być ten system plików. Weź rozmiar twojego jądra w blokach (rozmiar pokazywany przez komendę ```ls -l KERNEL`'' podzielony przez 1024 i zaokrąglony w górę) i dodaj 50. Około pięćdziesiąt bloków to obszar potrzebny na i-węzły oraz pozostałe pliki. Jeśli chcesz, możesz dokładnie obliczyć ten obszar, lub po prostu użyć liczby 50. Jeśli tworzysz osobno dyskietkę startową i główną, to możesz spokojnie przeznaczyć nawet więcej miejsca, jako że pierwsza dyskietka jest w całości przeznaczona na jądro. Nazwijmy tę liczbę `BLOKI_JĄDRA`.

Włóż dyskietkę do stacji dysków (przyjmiemy że jest nią /dev/fd0) i utwórz na niej system plików ext2:

          mke2fs -i 8192 -m 0 /dev/fd0 BLOKI_JĄDRA

Opcja ```-i 8192`'' oznacza, że chcemy jeden inode co 8192 bajty. Następnie zamontuj system plików, usuń katalog `lost+found` oraz utwórz katalogi `dev` i `boot` dla LILO:

          mount /dev/fd0 /mnt
          rm -rf /mnt/lost+found
          mkdir /mnt/{boot,dev}

Następnie utwórz urządzenia /dev/null i /dev/fd0. Zamiast szukania ich numerów, możesz po prostu skopiować je z twardego dysku używając opcji `-R`:

          cp -R /dev/{null,fd0} /mnt/dev

LILO wymaga kopii swojego programu startującego, `boot.b`, który możesz przegrać z twardego dysku. Zwykle znajduje się on w katalogu `/boot`:

          cp /boot/boot.b /mnt/boot

Na koniec skopiuj plik konfiguracyjny LILO który utworzyłeś poprzednio oraz swoje jądro. Oba pliki mogą zostać umieszczone w głównym katalogu:

          cp bdlilo.conf KERNEL /mnt

W tej chwili w systemie plików jądra znajduje się wszystko co potrzebne dla LILO, więc jesteś teraz gotowy do uruchomienia go. Opcja `-r` oznacza instalowanie programu startującego w katalogu innym niż główny:

          lilo -v -C bdlilo.conf -r /mnt

LILO powinien zakończyć działanie bez żadnych błędów, następnie system plików powinien wyglądać podobnie jak poniżej:

    total 361
      1 -rw-r--r--   1 root     root          176 Jan 10 07:22 bdlilo.conf
      1 drwxr-xr-x   2 root     root         1024 Jan 10 07:23 boot/
      1 drwxr-xr-x   2 root     root         1024 Jan 10 07:22 dev/
    358 -rw-r--r--   1 root     root       362707 Jan 10 07:23 vmlinuz
    boot:
    total 8
      4 -rw-r--r--   1 root     root         3708 Jan 10 07:22 boot.b
      4 -rw-------   1 root     root         3584 Jan 10 07:23 map
    dev:
    total 0
      0 brw-r-----   1 root     root       2,   0 Jan 10 07:22 fd0
      0 crw-r--r--   1 root     root       1,   3 Jan 10 07:22 null

Nie przejmuj się, jeśli rozmiary plików sę nieco inne.

Następnie pozostaw dysk w napędzie i przenieś się do działu Konfiguracja słowa ramdysku.

## 6.2 Przenoszenie jądra bez LILO.

Jeśli nie korzystasz z LILO, to skopiuj jądro na dyskietkę startową używając komendy `dd`:

          % dd if=KERNEL of=/dev/fd0 bs=1k
          353+1 records in
          353+1 records out

W tym przykładzie `dd` zapisał 353 kompletne rekordy oraz 1 niekompletny, tak więc jądro zajmuje teraz pierwsze 353 bloki na dyskietce. Nazwij tę liczbę `BLOKI_JĄDRA` i zapamiętaj ją, ponieważ będzie ona potrzebna w następnym dziale.

Na koniec ustaw dyskietkę jako główne urządzenie i skonfigguruj je tak, aby było dostępne do zapisu i odczytu:

          rdev /dev/fd0 /dev/fd0
          rdev -R /dev/fd0 0

Pamiętaj, aby użyć opcji `-R` pisanej wielką literą w drugiej komendzie `rdev`.

## 6.3 Konfiguracja słowa ramdysku.

Wewnątrz obrazu jądra znajduje się słowo ramdysku, które mówi, gdzie znajduje się główny system plików, oraz zawiera pewne inne opcje. Słowo to można zmieniać za pomocą polecenia `rdev`, a interpretowane jest w następujący sposób:

          bity  0-10:     Przemieszczenie ramdysku, w blokach 1024-bajtowych
          bity 11-13:     nieużywane
          bit     14:     Flaga oznaczająca, że ramdysk na zostać załadowany
          bit     15:     Flaga oznaczająca, aby pytać przez ładowaniem
                          głównego systemu plików

Jeśli bit 15 jest ustawiony, to podczas startu zostaniesz poproszony o włożenie do napędu nowej dyskietki. Jest to konieczne w przypadku korzystania z dwóch dyskietek.

Istnieją dwa przypadki, w zależności od tego, czy budujesz pojedynczą dyskietkę startową/główną, czy dwie osobne dyskietki, startową i główną.

1. Jeśli budujesz system na jednej dyskietce, to skompresowany główny system plików zostanie umieszczony zaraz za jądrem, więc przemieszczenie ramdysku będzie następnym wolnym blokiem za jądrem (czyli powinno wymosić tyle samo, ile `BLOKI_JĄDRA`). Bit 14 zostanie ustawiony na 1, a bit 15 będzie wynosił zero.
2. Jeśli budujesz zestaw dwóch dyskietek, to główny system plików rozpocznie się w bloku zero drugiej dyskietki, więc przemieszczenie będzie wynosić zero. Bity 14 oraz 15 będą ustawione na 1.

Po skrupulatnych obliczniach wartości słowa ramdysku, ustaw ją poleceniem `rdev -r`. Upewnij się, że podałeś wartość dziesiętną. Jeśli korzystasz z LILO, to argumentem dla `rdev` powinna być ścieżka do jądra, np. `/mnt/vmlinuz`. Jeśli kopiowałeś jądro za pomocą polecenia `dd`, to użyj zamiast tego nazwę urządzenia stacji dysków (np. `/dev/fd0`).

          rdev -r JĄDRO_LUB_STACJA_DYSKÓW WARTOŚĆ

Jeśli korzystasz z LILO, odmontuj teraz dyskietkę.

## 6.4 Przenoszenie głównego systemu plików.

Ostatnim krokiem jest przeniesienie głównego systemu plików.

- Jeśli główny system plików ma zostać umieszczony na tej samej dyskietce co jądro, to przenieś go używając komendy `dd` z opcją `seek`, która określa ile bloków należy przeskoczyć:

            dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOKI_JĄDRA

- Jeśli system plików ma zostać umieszczony na drugiej dyskietce, to wyjmij ze stacji pierwszą, włóż drugą a następnie przenieś na na nią główny system plików:

            dd if=rootfs.gz of=/dev/fd0 bs=1k

Moje gratulacje, dyskietki są już gotowe! Zawsze powninieneś przetestować swoje dyskietki startowe zanim odłożysz je na bok do czasu awarii! Jeśli coś się nie uda, czytaj dalej.

## 7. Rozwiązywanie problemów.

Po stworzeniu dyskietek kilka pierwszych prób wystartowania systemu często kończy się niepowodzeniem. Najlepszym podejściem podczas budowania głównego systemu plików jest łączenie elementów istniejącego systemu tak, aby system dyskietkowy przynajmiej wyświetlał komunikaty na konsoli. Gdy zacznie on komunikować się z tobą, jesteś już w połowie drogi do sukcesu, ponieważ możesz zobaczyć, co sprawia problemy i naprawić je pojedynczo aż system będzie działał poprawnie. Jeśli system po prostu wiesza się bez żadnego komunikatu, to odnalezienie przyczyny staje się trudne. Stworzenie systemu, który zostanie poprawnie wystartowany do momentu, w którym będzie mógł komunikować się z użytkownikiem, wymaga zainstalowania i skonfigurowania kilku komponentów. Zalecaną metoda badania problemu gdy system nie chce się komunikować z użytkownikiem jest następująca:

- Możesz ujrzeć komunikat taki jak ten:

      Kernel panic: VFS: Unable to mount root fs on XX:YY

  Jest to powszechny problem i ma jedynie kilka przyczyn. Po pierwsze, sprawdz nazwę urządzenia XX:YY z listą. Czy to poprawne urządzenie główne? Jeśli nie, prawdopodobnie nie uruchomiłeś `rdev -R`, lub zrobiłeś to na złym obrazie. Jeśli kod urządzenia jest poprawny, sprawdź uważnie sterowniki włączone do jądra. Upewnij się że stacja dysków, ramdysk i system plików ext2 zostały wbudowane.
- Sprawdź, czy główna dyskietka faktycznie zawiera odpowiednie katalogi. Może się zdarzyć, że skopiujesz nieodpowiedni katalog, w rezultacie otrzymując na głównej dyskietce przykładowo katalog /rootdisk/bin zamiast `/bin`.
- Sprawdź, czy plik /lib/libc.so jest dowiązaniem do tego samego pliku, co /lib/libc.so na twardym dysku.
- Sprawdź, czy symboliczne dowiązania z katalogu `/dev` na dysku twardym istnieją także dla odpowiednich urządzeń na głównej dyskietce. W wielu sytuacjach szczególnie istotne jest `/dev/console`.
- Sprawdź, czy dołączyłeś pliki `/dev/tty1, /dev/null, /dev/zero, /dev/mem, /dev/ram` i `/dev/kmem`.
- Sprawdź konfigurację jądra, obsługa wszystkich zasobów wymaganych do zalogowania się musi być wbudowana w jądro, a nie w postaci modułów. Tak więc obsługa ramdysku i systemu plików ext2 musi być wbudowana.
- Sprawdź, czy w jądrze główne urządzenie oraz parametry ramdysku są ustawione poprawnie.

Gdy przeanalizujesz już wszystkie powyższe przypadki, możesz sprawdzić następujące pliki:

1. Upewnij się, że istnieje plik /sbin/init lub /bin/init. Upewnij się, że ma on uprawnienia do wykonywania.
2. Uruchom `ldd init` aby sprawdzić biblioteki wymagane przez init. Na ogół jest to jedynie `libc.so`, ale zawsze warto sprawdzić. Upewnij się, że istnieją wymagane biblioteki i program ładujący.
3. Upewnij się, że posiadasz odpowiedni program ładujący biblioteki -- `ld.so` dla bibliotek a.out lub `ld-linux.so` dla bibliotek ELF.
4. Sprawdź odwołania do `getty` (lub podobnego programu, jak `agetty`, `mgetty` czy `getty_ps`) w pliku `inittab`. Porównaj je z plikiem `inittab` na dysku twardym. Przejrzyj strony man używanych programów. Właśnie w pliku `inittab` może wystąpić najwięcej problemów, ponieważ jego składnia zależy od konkretnego systemu i wersji programu init. Jedynym rozwiązaniem jest przeczytanie stron man o `init` oraz `inittab`, prześledzenie, co dokładnie system robi po wystartowaniu. Sprawdź, czy w pliku /etc/inittab znajduje się pozycja inicjalizacji systemu. Zawiera ona ścieżkę do skryptu inicjalizacji systemu, który musi istnieć.
5. Tak samo jak w przypadku `init`, uruchom `ldd` podając jako parametr twój program `getty` i sprawdź, czy istnieją wszystkie potrzebne biblioteki oraz program ładujący.
6. Upewnij się, że dołączyłeś powłokę (np. `bash` czy `ash`), która potrafi wykonać wszystkie skrypty rc.
7. Jeśli na dyskietce istnieje plik /etc/ld.so.cache, to odśwież go.

Jeśli `init` startuje, ale otrzymujesz komunikat:

          Id xxx respawning too fast: disabled for 5 minutes

pochodzi on z programu `init` i oznacza, że `getty` lub `login` kończą pracę zaraz po uruchomieniu. Sprawdz pliki `getty` i `login` i wszystkie potrzebne im biblioteki. Upewnij się, że ich wywołania w pliku /etc/inittab są prawidłowe. Jeśli otrzymujesz dziwne komunikaty od `getty`, może to oznaczać, że jego wywołanie z /etc/inittab jest nieprawidłowe. Opcje dla programów getty są zróżnicowane, nawet poszczególne wersje `agetty` posiadają niekompatybilne ze sobą opcje przy wywołaniu.

Jeśli podajesz poprawną nazwę użytkownika, ale system pyta natychmiast o inną nazwę, to problemem może być PAM bądź NSS. Zajrzyj do działu PAM i NSS. Problem może być także spowodowany tym, że korzystasz z haseł shadow, ale nie skopiowałeś pliku /etc/shadow na dyskietkę.

Jeśli próbujesz uruchomić jakiś program, przykładowo `df`, który znajduje się na dyskietce, ale otrzymujesz komunikat: `df: not found`, to sprawdź dwie rzeczy. Po pierwsze, upewnij się, że katalog w którym znajduje się program jest w zmiennej PATH. Po drugie, sprawdź, czy istnieją wszystkie potrzebne biblioteki oraz program ładujący.

## 8. Różne tematy.

## 8.1 Redukcja głównego systemu plików.

Czasem główny system plików jest zbyt duży, aby zmieścić się na dyskietce, nawet po kompresji. Poniżej podano kilka sposobów zmniejszenia rozmiaru systemu plików, uporządkowanych według efetywności:

Zwiększ gęstość dyskietki

  Standardowo dyskietki są formatowane na 1440K, ale dostępne są formaty o większej gęstości. Program fdformat umożliwia formatowanie dyskietki na następujące wielkości: 1600, 1680, 1711, 1743, 1760, 1840 i 1920. Większość napędów 1440K obsługuje dyskietki 1722K, więc dla dyskietek startowych zawsze używam tego formatu. Zobacz stronę man fdformat oraz /usr/src/linux/Documentation/devices.txt.

Wymień powłokę

  Najbardziej populare powłoki dla Linuxa, takie jak `bash` i `tcsh`, zajmują bardzo dużo miejsca i wymagają wielu bibliotek. Istnieją jednak alternatywne powłoki, takie jak `ash`, `lsh`, `kiss` czy `smash`, które są o wiele mniejsze i wymagają mniej (lub żadnych) bibliotek. Większość tych zastępczych powłok jest dostępna pod adresem http://metalab.unc.edu/pub/Linux/system/shells/. Upewnij się, że powłoka z której korzystasz potrafi wykonać wszystkie polecenia w plikach `rc` na dyskietce.

Obetnij biblioteki i programy

  Biblioteki i programy są często nieobcięte (zawierają symbole dla debuggera). Taki plik po uruchomieniu na nim `file` będzie oznaczony jako ``not stripped`'. Podczas kopiowania programów do głównego systemu plików dobrym pomysłem jest korzystanie z polecenia:

            objcopy --strip-all ŹRÓDŁO CEL

  Gdy kopiujesz biblioteki, użyj:

            objcopy --strip-debug ŹRÓDŁÓ CEL

Przenieś mniej ważne pliki na dyskietkę narzędziową

  Jeśli jakieś programy nie są wymagane do wystartowania systemu i zalogowania się, to możesz przenieść je na dyskietkę narzędziową. Szczegółów szkukaj w dziale Tworzenie dyskietki narzędziowej. Możesz także zastanowić się nad przeniesieniem modułów na dyskietkę narzędziową.

## 8.2 Systemy plików bez ramdysku.

Dział Budowanie głównego systemu plików zawiera informacje na temat tworzenia skompresowanego głównego systemu plików, który po uruchomieniu systemu jest ładowany do ramdysku. Ta metoda posiada wiele zalet, więc jest często używana. Jednak niektóre systemy posiadają za mało pamięci RAM, w takich sytuacjach główny system plików może zostać zamontowany bezpośrednio, a nie kopiowany do ramdysku.

W sumie łatwiej stworzyć taki właśnie system plików niż skompresowany, ponieważ może on zostać zbudowany bezpośrednio na dyskietce, a nie na jakimś innym urządzeniu i nie musi on być kompresowany. Opiszemy tutaj ogólnie różnice w tworzeniu takiego właśnie systemu plików. Jeśli zdecydujesz się z niego korzystać, pamiętaj, że będziesz miał do dyspozycji o wiele mniej miejsca.

1. Oblicz, ile wolnego miejsca pozostanie na główny system plików. Jeśli tworzysz pojedynczą dyskietkę startową/główną, to musisz zmieścić na niej wszystkie bloki jądra oraz wszystkie bloki głównego systemu plików.
2. Korzystając z programu `mke2fs` utwórz na dyskietce główny system plików o odpowiedniej wielkości.
3. Zapełnij system plików tak, jak to opisano w osobnym dziale.
4. Gdy już skończysz, odmontuj system plików i przenieś go do pliku na dysku, ale nie kompresuj go.
5. Przenieś jądro na dyskietkę, tak jak to opisano w osobnym dziale. Podczas obliczania słowa ramdysku wyzeruj bit 14, aby zaznaczyć, że główny system plików nie ma być ładowany do ramdysku. Uruchom `rdev` z odpowiednimi parametrami.
6. Przenieś główny system plików tak, jak poprzednio.

Istnieje kilka dróg na skróty. Jeśli budujesz dwu-dyskietkowy zestaw, to możesz stworzyć kompletny system plików bezpośrednio na drugiej dyskietce, bez potrzeby przenoszenia go na twardy dysk i z powrotem. Jeśli budujesz pojedynczą dyskietkę startową/główną i korzystasz z LILO, to możesz zbudować jeden system plików na całej dyskietce, zawierający jądro, pliki LILO oraz pliki główne, a następnie uruchomić LILO jako ostatni krok.

## 8.3 Tworzenie dyskietki narzędziowej.

Tworzenie dyskietki narzędziowej jest stosunkowo proste, wystarczy stworzyć system plików na sformatowanej dyskietce i skopiować do niego pliki. Aby korzystać z niej podczas używania dyskietki startowej, wystarczy zamontować ją ręcznie po uruchomieniu systemu.

We wcześniejszych rozdziałach wspomnieliśmy, że dyskietka narzędziowa powinna zostać zamontowana w katalogu `/usr`. W tej systuacji programy powinny być umieszczone w katalogu `/bin` dyskietki narzędziowej, aby po zamontowaniu były dostępne pod ścieżką /usr/bin. Dodatkowe biblioteki wymagane przez programy powinny zostać umieszczone w katalogu `/lib` na dyskietce.

Istnieje kilka istotnych aspektów, o których należy pamiętać podczas projektowania dyskietki narzędziowej:

1. Nie umieszczaj na dyskietce narzędziowej plików krytycznych dla działania systemu, ponieważ będzie ją można zamontować dopiero po wystartowaniu systemu.
2. Nie możesz w tym samym czasie korzystać z napędu taśmowego i napędu dyskietek. Oznacza to, że jeśli posiadasz napęd taśmowy, to nie będziesz miał do niego dostępu gdy dyskietka narzędziowa jest zamontowana.
3. Dostęp do plików na dyskietce narzędziowej będzie bardzo powolny.

W Dodatku Spis plików przykładowej dyskietki startowej możesz zobaczyć przykładowe pliki na dyskietce narzędziowej. Oto kilka pomysłow na programy, które mogą okazać się przydatne: programy do badania i manipulacji dyskami (`format, fdisk`) i systemami plików (`mke2fs, fsck, debugfs, isofs.o`), mały edytor tekstów (`elvis, jove`), narzędzia do kompresji i archiwizacji (`gzip, tar, cpio, afio`), narzędzia do obsługi taśm (`mt, tob, taper`), narzędzia komunikacyjne (`ppp.o, slip.o, minicom`) i narzędzia do obsługiu urządzeń (`setserial, mknod`).

## 9. Jak robią to profesjonaliści.

Pewnie zauważyłeś, że dyskietki startowe używane przez największe dystrybucje, takie jak Slackware, RedHat czy Debian, wydają się o wiele bardziej skomplikowane, niż te opisane w tym dokumencie. Profesjonalne dyskietki startowe są bazowane na tych samych założeniach, które tu podaliśmy, ale wykorzystują różne triki, ponieważ takie dyskietki mają o wiele większe wymagania. Po pierwsze, muszą współpracować z szeroką gamą sprzętu, tak więc muszą one umieć komunikować się z użytkownikiem i ładować odpowiednie sterowniki urządzeń. Po drugie, muszą być przygotowane do działania z wieloma różnymi opcjami instalacji, dodatkowo wykonując pewne działania automatycznie. Po trzecie dystrybucyjne dyskietki startowe na ogół spęłniają zarówno rolę instalacyjną, jak i ratunkową.

Niektóre dyskietki startowe korzystają z usługi zwanej initrd (initial ramdisk). Została ona wprowadzona w jądrze wersji 2.0.x i daje o wiele większą elastyczność, startując jądro w dwóch fazach. Na początku ładowany jest początkowy obraz ramdysku z dyskietki startowej. Początkowy ramdysk to główny system plików zawierający programy, które zostaną uruchomione zanim zostanie załadowany prawdziwy główny system plików. Ten program najczęściej bada otoczenie i/lub prosi użytkownika o wybranie różnych opcji startowych, takich jak urządzenie, z którego zostanie załadowany prawdziwy główny system plików. Często ładuje on też dodatkowe moduły nie wbudowane do jądra. Gdy działanie tego programu zakończy się, jądro ładuje prawdziwy główny obraz i uruchamianie jest kontynuowanie normalnie. Więcej informacji o `initrd` szukaj w /usr/src/linux/Documentation/initrd.txt i ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz.

Poniżej znajduje się podsumowanie tego, jak działają dyskietki startowe poszczególnych dystrybucji, oparte na przeglądaniu ich systemu systemu plików i/lub kodu źródłowego. Nie gwarantujemy, że ta informacja jest dokładna, ani że nic się nie zmieniło od czasu opisanej wersji.

Slackware (v.2.1) po prostu startuje system przy użyciu LILO, tak jak to opisano w dziale Przenoszenie jądra z LILO. Dyskietki startowe Slackware przy starcie wypisują komunikat (```Welcome to the Slackware Linux bootkernel disk!`'') używając do tego parametru LILO `message`. Informuje to użytkownika, że może podać dodatkowe parametry startowe, jeśli to konieczne. Po wystartowaniu, główny system plików jest ładowany z drugiej dyskietki. Użytkownik uruchamia skrypt `setup` który rozpoczyna instalację. Zamiast korzystać z jądra opartego na modułach, Slackware daje użytkownikowi do dyspozycji wiele różnych jąder, do wyboru zależnie od konfiguracji sprzętowej.

RedHat (v.4.0) także korzysta z LILO. Ładuje skompresowany ramdysk z pierwszej dyskietki, który uruchamia specjalnie napisany program `init`. Program ten pyta o sterowniki i, jeśli to konieczne, ładuje pliki z dodatkowej dyskietki.

Debian (v.1.3) jest prawdopodobnie najbardziej skomplikowanym zestawem dyskietek startowych. Korzysta on z programu ładującego SYSLINUX, który ustala osopowiednie parametry, a następnie używa obrazu `initrd` aby poprowadzić użytkownika przez procedurę instalacji. Wygląda na to, że korzysta on zarówno z przerobionego programu `init`, jak i z przerobionej powłoki.

## 10. Najczęściej zadawane pytania (FAQ).

Q. Próbuje wystartować system z dyskietki, ale nic się nie dzieje. Co mam zrobić?

Zajrzyj do działu Rozwiązywanie problemów powyżej.

Q. Jak działają dyskietki startowe dystrybucji Slackware/Debian/RedHat?

Zajrzyj do działu Jak to robią profesjonaliści powyżej.

Q. W jaki sposób stworzyć dyskietkę startową ze sterownikiem XYZ?

Najłatwiej zdobyć jądro z dystrybucji Slackware. Jądra Slackware zawierają sterowniki do jak największej ilości urządzeń, więc jeśli posiadasz kontroler IDE lub SCSI, istnieją duże szanse, że sterownik do urządzenia jest dołączony do jednego z jąder Slackware.

Przejdz do katalogu `a1` i wybierz jądro odpowiednie dla posiadanego typu kontrolera. Sprawdz w pliku xxxxkern.cfg dla odpowiedniego jądra czy zawiera ono odpowiednie sterowniki. Jeśli urządzenie jest na tej liście, to jądro to powinno wystartować twój system. Ściągnij plik xxxxkern.tgz i skopiuj go na dyskietkę, tak jak opisano powyżej, w dziale na temat tworzenia dyskietek startowych.

Następnie musisz sprawdzić główne urządzenie tego jądra, korzystając z komendy rdev:

          rdev zImage

Komenda `rdev` wyświetli aktualne główne urządzenie dla tego jądra. Jeśli nie odpowiada ono twojemu głównemu urządzeniu, użyj `rdev` aby je zmienić. Na przykład jądro korzysta z /dev/sda2, ale moja główna partycja SCSI znajduje się na urządzeniu /dev/sda8. Aby zmienić główne urządzenie na dyskietkę, musisz użyć komendy:

          rdev zImage /dev/fd0

Informacje na temat tworzenia głównych dyskietek Slackware wykraczają poza zakres tego dokumentu, więc sugeruje zajrzeć do Linux Install Guide lub zdobyć dystrybucję Slackware. Zobacz także dział ``Odnośniki'' w tym HOWTO.

Q. Jak uaktualnić jądro na mojej dyskietce?

Jeśli dyskietka startowa nie zawiera systemu plików, po prostu skopiuj jądro za pomocą komendy `dd`. W przypadku dyskietki startowej/głównej użyj komendy `cp`. Zajrzyj do działu ``Startowanie'' aby dowiedzieć się szczegółów na temat tworzenia dyskietki startowej. Ten opis odnosi się także do uaktualniania jądra.

Q. Jak dodać nowe pliki do mojej głównej dyskietki?

Najprostszym sposobem jest skopiowanie systeku plików z dyskietki z powrotem do użytego URZĄDZENIA (z działu Tworzenie systemu plików powyżej). Następnie zamontuj system plików i dokonaj zmian. Musisz wiedzieć, w którym bloku zaczynał się system plików i ile bloków zajmował:

          dd if=/dev/fd0 bs=1k skip=POCZĄTEK count=BLOKI | gunzip > URZĄDZENIE
          mount -t ext2 URZĄDZENIE /mnt

Po dokonaniu zmian, postępuj tak jak poprzednio (w dziale Tworzenie dyskietki) i przenieś główny system plików z powrotem na dyskietkę. Nie musisz przenosić ponownie jądra czy ponownie przeliczać słowa ramdysku jeśli nie zmieniłeś pozycji nowego systemu plików.

Q. Jak mogę usunąć LILO aby ponownie korzystać ze startowania DOS?

Tak na prawdę ten temat nie dotyczy dyskietek startowych, ale ludzie często o to pytają. Z poziomu Linuxa możesz użyć komendy:

> `

>           /sbin/lilo -u

> `

Możesz także wykorzystać `dd` aby przenieść kopię zapasową stworzoną przez LILO z powrotem do bootsektora. Zajrzyj do dokumentacji LILO, jeśli chcesz się dowiedzieć jak to zrobić.

Z poziomu systemu DOS lub Windows możesz skorzystać z polecenia DOS'a:

> `

>           FDISK /MBR

> `

MBR oznacza Master Boot Record i zastępuje bootsektor nowym DOS'owym, nie zmieniając przy tym tablicy partycji. Niektórzy puryści nie zgadzają się z tym, ale nawet autor LILO, Werner Almesberger, sugeruje to rozwiązanie. Jest ono proste, no i działa.

Q. Jak mogę wystartować system jeśli zgubiłem jądro oraz moją dyskietkę startową?

Jeśli nie masz dyskietki startowej, to najprostszym sposobem będzie zdobycie odpowiedniego jądra Slackware jak to opisano powyżej w odpowiedzi na pytanie ``Jak mogę stworzyć dyskietkę startową ze sterownikiem XXX?''. Następnie możesz wystartować komputer używając tego jądra i naprawić wszystkie problemy.

Jądro to może nie mieć ustawionego odpowiedniego głównego urządzenia. Na przykład typowe jądro SCSI Slackware za główne urządzenie uznaje /dev/sda2, a moja główna partycja Linuxowa to /dev/sda8. W tej sytuacji główne urządzenie w jądrze musi zostać zmienione.

Główne urządzenie oraz wartość słowa ramdysku możesz zmienić nawet wtedy, gdy posiadasz jedynie jądro i jakiś inny system operacyjny, na przykład DOS.

Polecenie `rdev` zmienia ustawienia poprzez zmianę wartości konkretnych bajtów w pliku jądra, więc możesz zrobić to samo, jeśli tylko posiadasz edytor heksadecymalny pracujący pod innym działającym systemem -- przykładowo Norton Disk Editor z pakietu Norton Utilities pod DOS. Następnie musisz sprawdzić i, jeśli to konieczne, zmienić wartości pod następującymi przesunięciami:

> `

>     HEX     DEC  OPIS
>     0x01F8  504  Młodszy bajt słowa ramdysku
>     0x01F9  505  Starszy bajt słowa ramdysku
>     0x01FC  508  Poboczny numer urządzenia - patrz niżej
>     0X01FD  509  Główny numer urządzenia - patrz niżej

> `

Znaczenie słowa ramdysku zostało opisane w dziale Ustawianie słowa ramdysku powyżej.

Poboczny i głowny numer musi odpowiadać urządzeniu, na którym znajduje się główny system plików. Niektóre najczęściej używane wartości to:

> `

>     DEVICE          GŁÓWNY POBOCZNY
>     /dev/fd0            2     0   Pierwsza stacja dysków
>     /dev/hda1           3     1   Pierwsza partycja na pierwszym dysku IDE
>     /dev/sda1           8     1   Pierwsza partycja na pierwszym dysku SCSI
>     /dev/sda8           8     8   Ósma partycja na pierwszym dysku SCSI

> `

Gdy już ustawisz odpowiednie wartości, możesz zapisać plik na dyskietce korzystając z Norton Utilities Disk Editor, albo programu `rawrite.exe`, który znajduje się we wszystkich dystrybucjach. Jest to program DOS'owy który zapisuje dane w czystej postaci zaczynając od boot sektora dyskietki, zamiast zapisywać do systemu plików. Jeśli używasz Norton Utilities, musisz zapisać plik do fizycznej dyskietki zaczynając od jej początku.

Q. W jaki sposób mogę stworzyć dodatkowe kopie dyskietek?

Jako że nośniki magnetyczne z czasem tracą swe właściwości, powinieneś posiadać kilka kopii swoich dyskietek ratunkowych, w razie gdyby oryginały uległy uszkodzeniu.

Najprostszą metodą tworzenia kopii każdej dyskietki, włączając w to dyskietki startowe czy narzędziowe, jest użycie komendy `dd` aby skopiować zawartość oryginalnej dyskietki do pliku na dysku twardym, a następnie użyć tej samej komendy aby skopiować plik z powrotem na dyskietkę. Zauważ, że nie powinieneś montować dyskietek, ponieważ `dd` korzysta bezpośrednio z urządzenia.

Aby skopiować oryginał, użyj polecenia:

> `

>           dd if=URZĄDZENIE of=PLIK
>           gdzie   URZĄDZENIE jest nazwą urządzenia stacji dyskietek
>           a       PLIK jest nazwą docelowego pliku na twardym dysku

> `

Pominięcie parametru `count` powoduje skopowanie całej dyskietki (2880 bloków jeśli jest to dyskietka HD).

Aby skopiować plik spowrotem na dyskietkę, włóż dyskietkę do stacji i użyj komendy:

> `

>           dd if=PLIK of=URZĄDZENIE

> `

Zauważ, że powyższy opis zakłada, że posiadasz tylko jedną stację dysków. Jeśli posiadasz dwa napędy tego samego typu, możesz skopiować dyskietki używając komendy:

> `

>           dd if=/dev/fd0 of=/dev/fd1

> `

Q. Jak wystartować system bez wpisywania za każdym razem "ahaxxxx,nn,nn,nn"?

Jeśli dysk nie może zostać automatycznie wykryty, koniecznie jest dostarczenie parametrów do jądra, takich jak:

> `

>           aha152x=0x340,11,3,1

> `

Ten parametr może zostać dostarczony na kilka sposobów, korzystając z LILO:

- Poprzez wpisywanie go za każdym razem w linii poleceń LILO, jednak jest to męczące.
- Używając słowa kluczowego LILO ```lock`'' aby linia poleceń została zachowana jako domyślna, używana przy każdym starcie systemu.
- Używając opcji `append=` w pliku konfiguracyjnym LILO. Pamiętaj, że parametr musi zostać ujęty w cudzysłowy.

Przykładaowa linia poleceń dla podanego powyżej parametru może wyglądać następująco:

> `

>           zImage  aha152x=0x340,11,3,1 root=/dev/sda1 lock

> `

Przekaże ona opcje urządzenia do jądra, ustawi w jądrze główne urządzenie na /dev/sda1 i zapisze linie poleceń do użycia przy każdym następnym starcie systemu.

Przykładowa opcja `append` wygląda następująco

> `

>           append = "aha152x=0x340,11,3,1"

> `

Pamiętaj, że parametr w linii poleceń nie może być ujęty w cudzyłowy, ale musi być ujęty w cudzysłowy jeśli występuje w opcji `append`.

Pamiętaj także, że w jądrze musi znajdować się sterownik dla podanego typu urządzenia. Jeśli tak nie jest, będziesz musiał przekompilować jądro aby zawierało odpowiednie sterowniki. Szczegóły na temat rekompilacji jądra znajdziesz w pliku `README` w katalogu /usr/src/linux oraz w Linux FAQ i Installation HOWTO. Ewentualnie możesz zdobyć odpowiednie jądro dla tego urządzenia i zainstalować je.

Przed ekperymentami z LILO zalecane jest zapoznanie się z jego dokumentacją. Nieprawidłowe użycie opcji `BOOT` może uszkodzić partycję.

Q. Podczas staru otrzymuje komunikat błędu "`A: cannot execute B`". Co to oznacza?

W niektórych przypadkach ścieżki do plików są na stałe zapisane w niektórych programach. Nie zdarza się to zawsze, ale może wyjaśnić dlaczego program nie może zostać odnaleziony w twoim systemie nawet jeśli jesteś pewien że się tam znajduje. Możesz sprawdzić, czy program ma zapisaną na stałe lokalizację jakiegoś innego programu korzystając z komendy `strings` i przepuszczając jej wyjście przez filtr `grep`.

Niektóre znane przypadki zapisanych na stałe lokalizacji:

- Niektóre wersje `shutdown` mają zapisaną na stałe lokalizację /etc/reboot, tak więc `reboot` musi zostać umieszczony w katalogu `/etc`.
- Czasem jądro nie może odnaleźć programu `init`.

Aby naprawić ten problem przenieś program do odpowiedniego katalogu, lub zmień pliki konfiguracyjne (np. `inittab`) aby wskazywały na poprawny katalog. Jeśli masz wątpliwości, umieść program w tym samym katalogu, w którym znajdował się na dysku twardym oraz użyj tych samych plików `inittab` i /etc/rc.d.

Q. Moje jądro posiada obsługę ramdysku, ale inicjuje go z wielkością 0K.

W takiej sytuacji podczas startu systemu pojawi się informacja:

          Ramdisk driver initialized : 16 ramdisks of 0K size

Dzieje się tak dlatego, że rozmiar ramdysko został ustawiony na 0 przez jądro podczas startu systemu. Najprawdopodobniej dzieje się tak przez parametr w pliku konfiguracyjnym LILO:

> `

>     ramdisk= 0

> `

Który w starszych dystrybucjach został umieszczany w przykładowym pliku konfiguracyjnym LILO. Jeśli posiadasz taką linię, usuń ją.

Skutki korzystania z ramdysku o rozmiarze 0K są nieprzewidywalne i mogą doprowadzić do błędów jądra.

## Appendix

## 11. Odnośniki.

Gdy ściągasz pakiet, zawsze znajdź jego najnowszą wersję, chyba że masz dobre powody aby tego nie robić.

## 11.1 Gotowe dyskietki.

Poniżej znajdują się odnośniki do dyskietek startowych poszczególnych dystrybucji. Zawsze korzystaj z mirrorów, aby zredukować obciążenie serwera.

- Dyskietki startowe Slackware, łówne"> oraz Mirrory Slackware
- Dyskietki startowe RedHat oraz Mirrory RedHat
- Dyskietki startowe Debian oraz Mirrory Debian

Oprócz tych dyskietek dystrybucyjnych, dostępne są także poniższe dyskietki ratunkowe. Są one dostępne w katalogu http://metalab.unc.edu/pub/Linux/system/recovery/!INDEX.html, chyba że podano inaczej.

- `tomsrtbt`, autorstwa Toma Oehser, to pojedyncza dyskietka startowa/główna oparta na jądrze 2.0 z duża ilością dodatkowych funkcji i programów. Obsługuje IDE, SCSI, napęd taśmowy, karty sieciowe, PCMCIA i inne. Zawartych jest ponad 100 programów narzędziowych do naprawy i odtwarzania dysków. Pakiet zawiera także skrypty służące do rozłożenia i złożenia z powrotem obrazu dyskietki tak, aby można było zmodyfikować jej zawartość.

- `rescue02`, autorstwa Johna Comyns, to dyskietka ratunkowa oparta na jądrze 1.2.84, z obsługą IDE, Adaptec 1542 oraz NCR53C7,8xx. Korzysta z plików wykonywalnych ELF, ale ma wystarczająco dużo komend, więc może zostać wykorzystana pod każdym systemem. Zawiera moduły dla pozostałych kart SCSI, które mogą zostać załadowane po wystartowaniu systemu. Prawdopodobnie dyskietka ta nie będzie działać na systemach z 4MB RAM, ponieważ korzysta z ramdysku wielkości 3MB.

- `resque_disk-2.0.22`, autorstwa Sergei'a Viznyuk, to dyskietka startowa oparta o jądro 2.0.22 z wbudowaną obsługą IDE, wielu różnych kontrolerów SCSI oraz ELF/a.out. Dodatkowo zawiera wiele modułów i użytecznych narzędzi do naprawy i odtwarzania twardego dysku.

- Obrazy dyskietek `cramdisk` oparte na jądrze 2.0.23 działają już na maszynach z 4 i 8MB RAM. Zawierają emulację koprocesora, obsługę sieci (PPP, NE2000, 3C509) lub obsługę napędu ZIP. Te dyskietki wystartują na komputerze 386 z 4MB RAM. Obsługują DOS, więc możesz ściągnąć je z sieci na partycję DOS.

  http://metalabs.unc.edu/pub/Linux/system/recovery/images/

## 11.2 Pakiety ratunkowe.

Na metalab.unc.edu można znaleźć kilka pakietów do tworzenia dyskietek ratunkowych. Korzystając z tych pakietów najczęściej wybierasz pliki do załączenia na dyskietce, a reszta dzieje się automatycznie (do pewnego stopnia). Aby uzyskać więcej informacji przeczytaj plik http://metalab.unc.edu/pub/Linux/system/recovery/!INDEX.html. Sprawdź daty utworzenia poszczególnych pakietów -- niektóre z nich nie były uaktualniane od kilku lat i nie pozwalają na tworzenie skompresowanego systemu plików ładowanego do ramdysku. Z tego co wiem jedynie Yard posiada obsługę ramdysku.

## 11.3 Skrypty powłoki Grahama Chapman'a

Graham Chapman napisał zestaw skryptów użytecznych jako przykłady jak tworzyć dyskietki startowe. Skrypty te w poprzedniej wersji tego dokumentu znajdowały się w załączniku, ale zostały z niego usunięte i umieszczone na stronie WWW:

http://www.zeta.org.au/~grahamc/linux.html

Skrypty te mogą okazać się pożyteczne, ale zawsze czytaj uważnie instrukcje do nich dołączone -- jeśli przykładowo wybierzesz złe urządzenie wymiany, twój główny system plików zostanie w całości i nieodwracalnie usunięty. Upewnij się że skonfigurowałeś wszystko poprawnie zanim użyjesz skryptów!

## 11.4 LILO (LInux LOader) -- program ładujący Linuxa.

Napisany przez Wernera Almesberger. Doskonały program ładujący, zawierający w dokumentacji informacje na temat bootsektora oraz pierwszych faz startowania systemu.

Znajdziesz go pod adresem ftp://tsx-11.mit.edu/pub/linux/packages/lilo/. Jest on także dostępny na Metalab i jego mirrorach.

## 11.5 Linux FAQ i HOWTO.

Dokumenty te dostępne są one z wielu źródeł. Przeglądnij grupę usenet `news.answers` oraz `comp.os.linux.announce`.

FAQ jest dostępne pod adresem http://metalab.unc.edu/pub/Linux/docs/faqs/linux-faq a dokumenty HOWTO pod adresem http://metalab.unc.edu/pub/Linux/docs/HOWTO.

Większość dokumentacji do Linuxa dostępna jest na stronie The Linux Documentation Project homepage.

Ewentualnie możesz wysłać list pod adres `mail-server@rtfm.mit.edu` ze słowem ```help`'' w treści wiadomości, i robić to, co podają otrzymane instrukcje.

Od tłumacza: Polskie wersje dokumentów HOWTO znajdziesz pod adresem Jak To Zrobić.

## 11.6 Korzystanie z ramdysku.

Doskonały opis działania ramdysku znajduje się w dokumentacji dostarczanej razem z jądrem Linuxa. Zajrzyj do pliku /usr/src/linux/Documentation/ramdisk.txt. Został on napisany przez Paula Gortmaker i zawiera dział na temat tworzenia skompresowanego ramdysku.

## 11.7 Proces startowania Linuxa.

Więcej szczegółow na temat procesu startowania Linuxa znajdziesz w następujących miejscach:

- W The Linux System Administrators' Guide znajduje się dział na temat startowania systemu. Zajrzyj pod adres http://metalab.unc.edu/LDP/LDP/sag/c1582.html
- The LILO ``Technical overview'' http://metalab.unc.edu/pub/Linux/system/boot/lilo/lilo-t-21.ps.gz zawiera szczegółowy opis startowania systemu na najniższym poziomie, aż do załadowania jądra.
- Najlepszym przewodnikiem jest kod źródłowy. Poniżej podano kilka plików jądra powiązanych z procesem startowania. Jeśli posiadasz kod źródłowy Linuxa, znajduje się on w katalogu /usr/src/linux. Ewentualnie pod adresem http://wafu.netgate.net/linux/ znajduje się hipertekstowa przeglądarka kodu źródłowego jądra autorstwa Shigio Yamaguchi (`shigio@wafu.netgate.net`). Poniżej znajdują się niektóre interesujące pliki:

  arch/i386/boot/bootsect.S,setup.S

    Zawiera kod w assemblerze dotyczący bootsektora.

  arch/i386/boot/compressed/misc.c

    Zawiera kod dekompresujący jądro.

  arch/i386/kernel/

    Katalog zawierający kod inicjujący jądro. Plik `setup.c` zawiera słowo ramdysku

  drivers/block/rd.c

    Zawiera sterownik ramdysku. Procedury `rd_load` oraz `rd_load_image` ładują bloki z urządzenia do ramdysku.

    Procedura `identify_ramdisk_image` ustala, jaki tym systemu plików został znaleziony oraz czy jest on skompresowany.

## 12. Kody błędów LILO.

W usenecie ludzie często zadają pytania na ten temat, więc umieściliśmy je tutaj dla szerszego grona. To podsumowanie pochodzi z LILO User Documentation Wernera Almsberger, dostępnego pod adresem ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/lilo-u-21.ps.gz.

Gdy LILO ładuje się, wyświetla słowo ```LILO`''. Każda litera jest wyświetlana po lub przed wykonaniem jakiejś czynności. Jeśli w pewnym momencie wystąpi błąd, można wykorzystać litery do zidentyfikowania problemu.

(nic)

  Żadna część LILO nie została załadowana. LILO nie został zainstalowany, albo partycja w której bootsektorze LILO został zainstalowany nie jest aktywna.

L

  Rozpoczęła się pierwsza faza programu ładującego, ale niemożliwe jest przejście do drugiej fazy. Dwucyfrowy kod błędu oznacza rodzaj błędu (patrz także dział ``Disk error codes''). Zwykle dzieje się tak z powodu awarii nośnika lub złych parametrów dysku.

LI

  Program ładujący pierwszej fazy załadował drugą fazę, ale nie udało mu się jej uruchomić. Może być to spowodowane błednymi parametrami dysku lub przeniesieniem pliku /boot/boot.b bez wywołania instalatora.

LIL

  Rozpoczął się program ładujący drugiej fazy, ale nie udało mu się załadaować tablicy deskryptorów z pliku mapy. Najczęściej jest to spowodowane awarią nośnika lub błędnymi parametrami dysku.

LIL?

  Program ładujący drugiej fazy został załadowany pod nieprawidłowym adresem. Zwykle jest to spowodowane błędnymi parametrami dysku lub przeniesieniem pliku /boot/boot.b bez uruchomienia instalatora.

LIL-

  Tablica deskryptorów jest nieprawidłowa. Może to być spowodowane błędnymi parametrami dysku lub przeniesieniem pliku /boot/map bez uruchomienia istalatora mapy.

LILO

  Wszystkie elementy LILO zostały prawidłowo załadowane.

Jeśli BIOS zasygnalizuje błąd gdy LILO próbuje załadować obraz startowy, wyświetlany jest odpowiedni kod błędu. Kody te są z zakresu od `0x00` do `0xbb`. W LILO User Guide znajduje się ich wyjaśnienie.

## 13. Lista plików przykładowej głównej dyskietki.

Poniżej znajduje się zawartość przykładowej dyskietki głównej i narzędziowej.

> `

>     Root directory:
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 bin
>     drwx--x--x   2 root     root         4096 Nov  1 15:39 dev
>     drwx--x--x   3 root     root         1024 Nov  1 15:39 etc
>     drwx--x--x   4 root     root         1024 Nov  1 15:39 lib
>     drwx--x--x   5 root     root         1024 Nov  1 15:39 mnt
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 proc
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 root
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 sbin
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 tmp
>     drwx--x--x   7 root     root         1024 Nov  1 15:39 usr
>     drwx--x--x   5 root     root         1024 Nov  1 15:39 var

>     /bin:
>     -rwx--x--x   1 root     root        62660 Nov  1 15:39 ash
>     -rwx--x--x   1 root     root         9032 Nov  1 15:39 cat
>     -rwx--x--x   1 root     root        10276 Nov  1 15:39 chmod
>     -rwx--x--x   1 root     root         9592 Nov  1 15:39 chown
>     -rwx--x--x   1 root     root        23124 Nov  1 15:39 cp
>     -rwx--x--x   1 root     root        23028 Nov  1 15:39 date
>     -rwx--x--x   1 root     root        14052 Nov  1 15:39 dd
>     -rwx--x--x   1 root     root        14144 Nov  1 15:39 df
>     -rwx--x--x   1 root     root        69444 Nov  1 15:39 egrep
>     -rwx--x--x   1 root     root          395 Nov  1 15:39 false
>     -rwx--x--x   1 root     root        69444 Nov  1 15:39 fgrep
>     -rwx--x--x   1 root     root        69444 Nov  1 15:39 grep
>     -rwx--x--x   3 root     root        45436 Nov  1 15:39 gunzip
>     -rwx--x--x   3 root     root        45436 Nov  1 15:39 gzip
>     -rwx--x--x   1 root     root         8008 Nov  1 15:39 hostname
>     -rwx--x--x   1 root     root        12736 Nov  1 15:39 ln
>     -rws--x--x   1 root     root        15284 Nov  1 15:39 login
>     -rwx--x--x   1 root     root        29308 Nov  1 15:39 ls
>     -rwx--x--x   1 root     root         8268 Nov  1 15:39 mkdir
>     -rwx--x--x   1 root     root         8920 Nov  1 15:39 mknod
>     -rwx--x--x   1 root     root        24836 Nov  1 15:39 more
>     -rws--x--x   1 root     root        37640 Nov  1 15:39 mount
>     -rwx--x--x   1 root     root        12240 Nov  1 15:39 mt
>     -rwx--x--x   1 root     root        12932 Nov  1 15:39 mv
>     -r-x--x--x   1 root     root        12324 Nov  1 15:39 ps
>     -rwx--x--x   1 root     root         5388 Nov  1 15:39 pwd
>     -rwx--x--x   1 root     root        10092 Nov  1 15:39 rm
>     lrwxrwxrwx   1 root     root            3 Nov  1 15:39 sh -> ash
>     -rwx--x--x   1 root     root        25296 Nov  1 15:39 stty
>     -rws--x--x   1 root     root        12648 Nov  1 15:39 su
>     -rwx--x--x   1 root     root         4444 Nov  1 15:39 sync
>     -rwx--x--x   1 root     root       110668 Nov  1 15:39 tar
>     -rwx--x--x   1 root     root        19712 Nov  1 15:39 touch
>     -rwx--x--x   1 root     root          395 Nov  1 15:39 true
>     -rws--x--x   1 root     root        19084 Nov  1 15:39 umount
>     -rwx--x--x   1 root     root         5368 Nov  1 15:39 uname
>     -rwx--x--x   3 root     root        45436 Nov  1 15:39 zcat

>     /dev:
>     lrwxrwxrwx   1 root     root            6 Nov  1 15:39 cdrom -> cdu31a
>     brw-rw-r--   1 root     root      15,   0 May  5  1998 cdu31a
>     crw-------   1 root     root       4,   0 Nov  1 15:29 console
>     crw-rw-rw-   1 root     uucp       5,  64 Sep  9 19:46 cua0
>     crw-rw-rw-   1 root     uucp       5,  65 May  5  1998 cua1
>     crw-rw-rw-   1 root     uucp       5,  66 May  5  1998 cua2
>     crw-rw-rw-   1 root     uucp       5,  67 May  5  1998 cua3
>     brw-rw----   1 root     floppy     2,   0 Aug  8 13:54 fd0
>     brw-rw----   1 root     floppy     2,  36 Aug  8 13:54 fd0CompaQ
>     brw-rw----   1 root     floppy     2,  84 Aug  8 13:55 fd0D1040
>     brw-rw----   1 root     floppy     2,  88 Aug  8 13:55 fd0D1120
>     brw-rw----   1 root     floppy     2,  12 Aug  8 13:54 fd0D360
>     brw-rw----   1 root     floppy     2,  16 Aug  8 13:54 fd0D720
>     brw-rw----   1 root     floppy     2, 120 Aug  8 13:55 fd0D800
>     brw-rw----   1 root     floppy     2,  32 Aug  8 13:54 fd0E2880
>     brw-rw----   1 root     floppy     2, 104 Aug  8 13:55 fd0E3200
>     brw-rw----   1 root     floppy     2, 108 Aug  8 13:55 fd0E3520
>     brw-rw----   1 root     floppy     2, 112 Aug  8 13:55 fd0E3840
>     brw-rw----   1 root     floppy     2,  28 Aug  8 13:54 fd0H1440
>     brw-rw----   1 root     floppy     2, 124 Aug  8 13:55 fd0H1600
>     brw-rw----   1 root     floppy     2,  44 Aug  8 13:55 fd0H1680
>     brw-rw----   1 root     floppy     2,  60 Aug  8 13:55 fd0H1722
>     brw-rw----   1 root     floppy     2,  76 Aug  8 13:55 fd0H1743
>     brw-rw----   1 root     floppy     2,  96 Aug  8 13:55 fd0H1760
>     brw-rw----   1 root     floppy     2, 116 Aug  8 13:55 fd0H1840
>     brw-rw----   1 root     floppy     2, 100 Aug  8 13:55 fd0H1920
>     lrwxrwxrwx   1 root     root            7 Nov  1 15:39 fd0H360 -> fd0D360
>     lrwxrwxrwx   1 root     root            7 Nov  1 15:39 fd0H720 -> fd0D720
>     brw-rw----   1 root     floppy     2,  52 Aug  8 13:55 fd0H820
>     brw-rw----   1 root     floppy     2,  68 Aug  8 13:55 fd0H830
>     brw-rw----   1 root     floppy     2,   4 Aug  8 13:54 fd0d360
>     brw-rw----   1 root     floppy     2,   8 Aug  8 13:54 fd0h1200
>     brw-rw----   1 root     floppy     2,  40 Aug  8 13:54 fd0h1440
>     brw-rw----   1 root     floppy     2,  56 Aug  8 13:55 fd0h1476
>     brw-rw----   1 root     floppy     2,  72 Aug  8 13:55 fd0h1494
>     brw-rw----   1 root     floppy     2,  92 Aug  8 13:55 fd0h1600
>     brw-rw----   1 root     floppy     2,  20 Aug  8 13:54 fd0h360
>     brw-rw----   1 root     floppy     2,  48 Aug  8 13:55 fd0h410
>     brw-rw----   1 root     floppy     2,  64 Aug  8 13:55 fd0h420
>     brw-rw----   1 root     floppy     2,  24 Aug  8 13:54 fd0h720
>     brw-rw----   1 root     floppy     2,  80 Aug  8 13:55 fd0h880
>     brw-rw----   1 root     disk       3,   0 May  5  1998 hda
>     brw-rw----   1 root     disk       3,   1 May  5  1998 hda1
>     brw-rw----   1 root     disk       3,   2 May  5  1998 hda2
>     brw-rw----   1 root     disk       3,   3 May  5  1998 hda3
>     brw-rw----   1 root     disk       3,   4 May  5  1998 hda4
>     brw-rw----   1 root     disk       3,   5 May  5  1998 hda5
>     brw-rw----   1 root     disk       3,   6 May  5  1998 hda6
>     brw-rw----   1 root     disk       3,  64 May  5  1998 hdb
>     brw-rw----   1 root     disk       3,  65 May  5  1998 hdb1
>     brw-rw----   1 root     disk       3,  66 May  5  1998 hdb2
>     brw-rw----   1 root     disk       3,  67 May  5  1998 hdb3
>     brw-rw----   1 root     disk       3,  68 May  5  1998 hdb4
>     brw-rw----   1 root     disk       3,  69 May  5  1998 hdb5
>     brw-rw----   1 root     disk       3,  70 May  5  1998 hdb6
>     crw-r-----   1 root     kmem       1,   2 May  5  1998 kmem
>     crw-r-----   1 root     kmem       1,   1 May  5  1998 mem
>     lrwxrwxrwx   1 root     root           12 Nov  1 15:39 modem -> ../dev/ttyS1
>     lrwxrwxrwx   1 root     root           12 Nov  1 15:39 mouse -> ../dev/psaux
>     crw-rw-rw-   1 root     root       1,   3 May  5  1998 null
>     crwxrwxrwx   1 root     root      10,   1 Oct  5 20:22 psaux
>     brw-r-----   1 root     disk       1,   1 May  5  1998 ram
>     brw-rw----   1 root     disk       1,   0 May  5  1998 ram0
>     brw-rw----   1 root     disk       1,   1 May  5  1998 ram1
>     brw-rw----   1 root     disk       1,   2 May  5  1998 ram2
>     brw-rw----   1 root     disk       1,   3 May  5  1998 ram3
>     brw-rw----   1 root     disk       1,   4 May  5  1998 ram4
>     brw-rw----   1 root     disk       1,   5 May  5  1998 ram5
>     brw-rw----   1 root     disk       1,   6 May  5  1998 ram6
>     brw-rw----   1 root     disk       1,   7 May  5  1998 ram7
>     brw-rw----   1 root     disk       1,   8 May  5  1998 ram8
>     brw-rw----   1 root     disk       1,   9 May  5  1998 ram9
>     lrwxrwxrwx   1 root     root            4 Nov  1 15:39 ramdisk -> ram0
>     ***  Dołączyłem jedynie urządzenia IDE dla partycji których używam.
>     ***  Jeśli korzystasz ze SCSI, użyj zamiast nich urządzeń /dev/sdXX.
>     crw-------   1 root     root       4,   0 May  5  1998 tty0
>     crw--w----   1 root     tty        4,   1 Nov  1 15:39 tty1
>     crw-------   1 root     root       4,   2 Nov  1 15:29 tty2
>     crw-------   1 root     root       4,   3 Nov  1 15:29 tty3
>     crw-------   1 root     root       4,   4 Nov  1 15:29 tty4
>     crw-------   1 root     root       4,   5 Nov  1 15:29 tty5
>     crw-------   1 root     root       4,   6 Nov  1 15:29 tty6
>     crw-------   1 root     root       4,   7 May  5  1998 tty7
>     crw-------   1 root     tty        4,   8 May  5  1998 tty8
>     crw-------   1 root     tty        4,   9 May  8 12:57 tty9
>     crw-rw-rw-   1 root     root       4,  65 Nov  1 12:17 ttyS1
>     crw-rw-rw-   1 root     root       1,   5 May  5  1998 zero

>     /etc:
>     -rw-------   1 root     root          164 Nov  1 15:39 conf.modules
>     -rw-------   1 root     root          668 Nov  1 15:39 fstab
>     -rw-------   1 root     root           71 Nov  1 15:39 gettydefs
>     -rw-------   1 root     root          389 Nov  1 15:39 group
>     -rw-------   1 root     root          413 Nov  1 15:39 inittab
>     -rw-------   1 root     root           65 Nov  1 15:39 issue
>     -rw-r--r--   1 root     root          746 Nov  1 15:39 ld.so.cache
>     ***  Plik ld.so.cache jest tworzony przez ldconfig i przechowuje
>     ***  lokalizacje bibliotek. Podczas startowania wystąpi wiele błędów
>     ***  jeśli brakuje ld.so.cache. Możesz odtworzyć go po stworzeniu
>     ***  dyskietki, albo dodać ldconfig do dyskietki i uruchamiać go ze
>     ***  skryptu rc.x.
>     -rw-------   1 root     root           32 Nov  1 15:39 motd
>     -rw-------   1 root     root          949 Nov  1 15:39 nsswitch.conf
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 pam.d
>     -rw-------   1 root     root          139 Nov  1 15:39 passwd
>     -rw-------   1 root     root          516 Nov  1 15:39 profile
>     -rwx--x--x   1 root     root          387 Nov  1 15:39 rc
>     -rw-------   1 root     root           55 Nov  1 15:39 shells
>     -rw-------   1 root     root          774 Nov  1 15:39 termcap
>     -rw-------   1 root     root           78 Nov  1 15:39 ttytype
>     lrwxrwxrwx   1 root     root           15 Nov  1 15:39 utmp -> ../var/run/utmp
>     lrwxrwxrwx   1 root     root           15 Nov  1 15:39 wtmp -> ../var/log/wtmp

>     /etc/pam.d:
>     -rw-------   1 root     root          356 Nov  1 15:39 other

>     /lib:
>     *** Posiadam system ELF z glibc, więc potrzebuję loadera ld-2.so
>     -rwxr-xr-x   1 root     root        45415 Nov  1 15:39 ld-2.0.7.so
>     lrwxrwxrwx   1 root     root           11 Nov  1 15:39 ld-linux.so.2 -> ld-2.0.7.so
>     -rwxr-xr-x   1 root     root       731548 Nov  1 15:39 libc-2.0.7.so
>     lrwxrwxrwx   1 root     root           13 Nov  1 15:39 libc.so.6 -> libc-2.0.7.so
>     lrwxrwxrwx   1 root     root           17 Nov  1 15:39 libcom_err.so.2 -> libcom_err.so.2.0
>     -rwxr-xr-x   1 root     root         6209 Nov  1 15:39 libcom_err.so.2.0
>     -rwxr-xr-x   1 root     root       153881 Nov  1 15:39 libcrypt-2.0.7.so
>     lrwxrwxrwx   1 root     root           17 Nov  1 15:39 libcrypt.so.1 -> libcrypt-2.0.7.so
>     -rwxr-xr-x   1 root     root        12962 Nov  1 15:39 libdl-2.0.7.so
>     lrwxrwxrwx   1 root     root           14 Nov  1 15:39 libdl.so.2 -> libdl-2.0.7.so
>     lrwxrwxrwx   1 root     root           16 Nov  1 15:39 libext2fs.so.2 -> libext2fs.so.2.4
>     -rwxr-xr-x   1 root     root        81382 Nov  1 15:39 libext2fs.so.2.4
>     -rwxr-xr-x   1 root     root        25222 Nov  1 15:39 libnsl-2.0.7.so
>     lrwxrwxrwx   1 root     root           15 Nov  1 15:39 libnsl.so.1 -> libnsl-2.0.7.so
>     -rwx--x--x   1 root     root       178336 Nov  1 15:39 libnss_files-2.0.7.so
>     lrwxrwxrwx   1 root     root           21 Nov  1 15:39 libnss_files.so.1 -> libnss_files-2.0.7.so
>     lrwxrwxrwx   1 root     root           14 Nov  1 15:39 libpam.so.0 -> libpam.so.0.64
>     -rwxr-xr-x   1 root     root        26906 Nov  1 15:39 libpam.so.0.64
>     lrwxrwxrwx   1 root     root           19 Nov  1 15:39 libpam_misc.so.0 -> libpam_misc.so.0.64
>     -rwxr-xr-x   1 root     root         7086 Nov  1 15:39 libpam_misc.so.0.64
>     -r-xr-xr-x   1 root     root        35615 Nov  1 15:39 libproc.so.1.2.6
>     lrwxrwxrwx   1 root     root           15 Nov  1 15:39 libpwdb.so.0 -> libpwdb.so.0.54
>     -rw-r--r--   1 root     root       121899 Nov  1 15:39 libpwdb.so.0.54
>     lrwxrwxrwx   1 root     root           19 Nov  1 15:39 libtermcap.so.2 -> libtermcap.so.2.0.8
>     -rwxr-xr-x   1 root     root        12041 Nov  1 15:39 libtermcap.so.2.0.8
>     -rwxr-xr-x   1 root     root        12874 Nov  1 15:39 libutil-2.0.7.so
>     lrwxrwxrwx   1 root     root           16 Nov  1 15:39 libutil.so.1 -> libutil-2.0.7.so
>     lrwxrwxrwx   1 root     root           14 Nov  1 15:39 libuuid.so.1 -> libuuid.so.1.1
>     -rwxr-xr-x   1 root     root         8039 Nov  1 15:39 libuuid.so.1.1
>     drwx--x--x   3 root     root         1024 Nov  1 15:39 modules
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 security

>     /lib/modules:
>     drwx--x--x   4 root     root         1024 Nov  1 15:39 2.0.35

>     /lib/modules/2.0.35:
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 block
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 cdrom

>     /lib/modules/2.0.35/block:
>     -rw-------   1 root     root         7156 Nov  1 15:39 loop.o

>     /lib/modules/2.0.35/cdrom:
>     -rw-------   1 root     root        24108 Nov  1 15:39 cdu31a.o

>     /lib/security:
>     -rwx--x--x   1 root     root         8771 Nov  1 15:39 pam_permit.so

>     ***  Katalogi do montowania.
>     /mnt:
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 SparQ
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 cdrom
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 floppy

>     /proc:

>     /root:
>     -rw-------   1 root     root          176 Nov  1 15:39 .bashrc
>     -rw-------   1 root     root          182 Nov  1 15:39 .cshrc
>     -rw-------   1 root     root           47 Nov  1 15:39 .glintrc
>     -rwx--x--x   1 root     root          455 Nov  1 15:39 .profile
>     -rw-------   1 root     root         4014 Nov  1 15:39 .tcshrc

>     /sbin:
>     -rwx--x--x   1 root     root        23976 Nov  1 15:39 depmod
>     -rwx--x--x   2 root     root       274600 Nov  1 15:39 e2fsck
>     -rwx--x--x   1 root     root        41268 Nov  1 15:39 fdisk
>     -rwx--x--x   1 root     root         9396 Nov  1 15:39 fsck
>     -rwx--x--x   2 root     root       274600 Nov  1 15:39 fsck.ext2
>     -rwx--x--x   1 root     root        29556 Nov  1 15:39 getty
>     -rwx--x--x   1 root     root         6620 Nov  1 15:39 halt
>     -rwx--x--x   1 root     root        23116 Nov  1 15:39 init
>     -rwx--x--x   1 root     root        25612 Nov  1 15:39 insmod
>     -rwx--x--x   1 root     root        10368 Nov  1 15:39 kerneld
>     -rwx--x--x   1 root     root       110400 Nov  1 15:39 ldconfig
>     -rwx--x--x   1 root     root         6108 Nov  1 15:39 lsmod
>     -rwx--x--x   2 root     root        17400 Nov  1 15:39 mke2fs
>     -rwx--x--x   1 root     root         4072 Nov  1 15:39 mkfs
>     -rwx--x--x   2 root     root        17400 Nov  1 15:39 mkfs.ext2
>     -rwx--x--x   1 root     root         5664 Nov  1 15:39 mkswap
>     -rwx--x--x   1 root     root        22032 Nov  1 15:39 modprobe
>     lrwxrwxrwx   1 root     root            4 Nov  1 15:39 reboot -> halt
>     -rwx--x--x   1 root     root         7492 Nov  1 15:39 rmmod
>     -rwx--x--x   1 root     root        12932 Nov  1 15:39 shutdown
>     lrwxrwxrwx   1 root     root            6 Nov  1 15:39 swapoff -> swapon
>     -rwx--x--x   1 root     root         5124 Nov  1 15:39 swapon
>     lrwxrwxrwx   1 root     root            4 Nov  1 15:39 telinit -> init
>     -rwx--x--x   1 root     root         6944 Nov  1 15:39 update

>     /tmp:

>     /usr:
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 bin
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 lib
>     drwx--x--x   3 root     root         1024 Nov  1 15:39 man
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 sbin
>     drwx--x--x   3 root     root         1024 Nov  1 15:39 share
>     lrwxrwxrwx   1 root     root           10 Nov  1 15:39 tmp -> ../var/tmp

>     /usr/bin:
>     -rwx--x--x   1 root     root        37164 Nov  1 15:39 afio
>     -rwx--x--x   1 root     root         5044 Nov  1 15:39 chroot
>     -rwx--x--x   1 root     root        10656 Nov  1 15:39 cut
>     -rwx--x--x   1 root     root        63652 Nov  1 15:39 diff
>     -rwx--x--x   1 root     root        12972 Nov  1 15:39 du
>     -rwx--x--x   1 root     root        56552 Nov  1 15:39 find
>     -r-x--x--x   1 root     root         6280 Nov  1 15:39 free
>     -rwx--x--x   1 root     root         7680 Nov  1 15:39 head
>     -rwx--x--x   1 root     root         8504 Nov  1 15:39 id
>     -r-sr-xr-x   1 root     bin          4200 Nov  1 15:39 passwd
>     -rwx--x--x   1 root     root        14856 Nov  1 15:39 tail
>     -rwx--x--x   1 root     root        19008 Nov  1 15:39 tr
>     -rwx--x--x   1 root     root         7160 Nov  1 15:39 wc
>     -rwx--x--x   1 root     root         4412 Nov  1 15:39 whoami

>     /usr/lib:
>     lrwxrwxrwx   1 root     root           17 Nov  1 15:39 libncurses.so.4 -> libncurses.so.4.2
>     -rw-r--r--   1 root     root       260474 Nov  1 15:39 libncurses.so.4.2

>     /usr/sbin:
>     -r-x--x--x   1 root     root        13684 Nov  1 15:39 fuser
>     -rwx--x--x   1 root     root         3876 Nov  1 15:39 mklost+found

>     /usr/share:
>     drwx--x--x   4 root     root         1024 Nov  1 15:39 terminfo

>     /usr/share/terminfo:
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 l
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 v

>     /usr/share/terminfo/l:
>     -rw-------   1 root     root         1552 Nov  1 15:39 linux
>     -rw-------   1 root     root         1516 Nov  1 15:39 linux-m
>     -rw-------   1 root     root         1583 Nov  1 15:39 linux-nic

>     /usr/share/terminfo/v:
>     -rw-------   2 root     root         1143 Nov  1 15:39 vt100
>     -rw-------   2 root     root         1143 Nov  1 15:39 vt100-am

>     /var:
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 log
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 run
>     drwx--x--x   2 root     root         1024 Nov  1 15:39 tmp

>     /var/log:
>     -rw-------   1 root     root            0 Nov  1 15:39 wtmp

>     /var/run:
>     -rw-------   1 root     root            0 Nov  1 15:39 utmp

>     /var/tmp:

> `

## 14. Spis plików przykładowej dyskietki narzędziowej.

> `

>     total 579
>     -rwxr-xr-x   1 root     root        42333 Jul 28 19:05 cpio*
>     -rwxr-xr-x   1 root     root        32844 Aug 28 19:50 debugfs*
>     -rwxr-xr-x   1 root     root       103560 Jul 29 21:31 elvis*
>     -rwxr-xr-x   1 root     root        29536 Jul 28 19:04 fdisk*
>     -rw-r--r--   1 root     root       128254 Jul 28 19:03 ftape.o
>     -rwxr-xr-x   1 root     root        17564 Jul 25 03:21 ftmt*
>     -rwxr-xr-x   1 root     root        64161 Jul 29 20:47 grep*
>     -rwxr-xr-x   1 root     root        45309 Jul 29 20:48 gzip*
>     -rwxr-xr-x   1 root     root        23560 Jul 28 19:04 insmod*
>     -rwxr-xr-x   1 root     root          118 Jul 28 19:04 lsmod*
>     lrwxrwxrwx   1 root     root            5 Jul 28 19:04 mt -> mt-st*
>     -rwxr-xr-x   1 root     root         9573 Jul 28 19:03 mt-st*
>     lrwxrwxrwx   1 root     root            6 Jul 28 19:05 rmmod -> insmod*
>     -rwxr-xr-x   1 root     root       104085 Jul 28 19:05 tar*
>     lrwxrwxrwx   1 root     root            5 Jul 29 21:35 vi -> elvis*

> `