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.
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:
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:
fsck na wszystkich dyskach,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.
Po zapoznaniu się z podstawami procesu startowania systemu, możemy zdefiniować różne typy dyskietek. Dzielimy je na cztery rodzaje.
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ą).
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ą.
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.
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.