Własna dyskietka ratunkowa
1. Wstęp
W ramach niniejszego artykułu przedstawiony zostanie sposób utworzenia dyskietki ratunkowej systemu Linux. O istnieniu dyskietki ratunkowej użytkownicy systemu operacyjnego zazwyczaj przypominają sobie w sytuacji, gdy system ulegnie awarii. Może się zdarzyć, iż nie będzie możliwy prawidłowy rozruch systemu spowodowany np. nadpisaniem obszaru MBR, czy też uszkodzeniem jakieś ważnego pliku, czy też w końcu uszkodzeniem całego systemu plików. W takich bowiem sytuacjach dyskietka ratunkowa staje się bardzo przydatnym narzędziem, które niejednokrotnie umożliwi przywrócenie sprawności systemu operacyjnemu.
W zależności od charakteru awarii używane są różne typy dyskietek ratunkowych. W wielu materiałach poświęconych zagadnieniom dyskietek ratunkowych stosuje się podział na trzy główne typy dysków ratunkowych, a mianowicie na boot disks, root disks oraz wersja łączona, tj. boot/root disks.
Dyskietki typu boot disks zawieją jądro systemu operacyjnego, które po załadowaniu uruchamia system operacyjny znajdujący się na innym dysku.
Dyskietki typu root disks zawierają system plików niezbędny do uruchomienia systemu Linux. Zazwyczaj nie zawierają one jądra ani boot loadera, niemniej jednak są przydatne, gdy chcemy uruchomić system niezależnie od innych dysków zainstalowanych w komputerze. Oczywistym warunkiem aby można było skorzystać z takiego rozwiązania jest konieczność posiadania systemu z którego prawidłowo uruchamiane jest jądro.
Ostatni wymieniony typ dysków jest najczęściej stosowany. Jest to bowiem dysk zawierający jądro, program rozruchowy, system plików oraz niejednokrotnie przydatne narzędzia, co powoduje, że stanowi on praktycznie kompletny system operacyjny, który nie wymaga do pracy żadnych dodatkowych elementów. Niestety ograniczenia pojemności nośnika, jakim jest dyskietka powoduje, iż na ogół liczba narzędzi dostępnych w takim ratunkowym systemie jest mocno ograniczona. Na ogół w dyskietkach tego typu znajdują się programy do sprawdzenia i naprawy systemu plików, jak również proste edytory tekstu, które mogą być użyte do modyfikacji plików.
W dalszej części artykułu pokazany zostanie sposób przygotowania kompletnej dyskietki typu boot/root disk. Z przedstawionych informacji będzie można także skorzystać do stworzenia dyskietek typu boot disk oraz root disk.
2. Tworzenie własnego dysku typu boot/root disk
Stworzenie dysku tego typu polega na skopiowaniu jądra, plików oraz programów systemu
operacyjnego na dyskietkę. Wydaje się to zadaniem prostym, szybko jednak okaże się,
iż pojemność zwykłej dyskietki 3,5” jest zbyt mała, aby wszystko to mogło się nań zmieścić.
Na szczęście odpowiednie mechanizmy kompresji pomogą do pewnego stopnia rozwiązać problem
pojemności dyskietki, który wynosi 1,44 MB. W tym celu zostanie przygotowany system plików
o większym rozmiarze, który zostanie następnie skompresowany. Wykorzystany zostanie mechanizmu
pętli zwrotnej (ang. loopback).
W pierwszej kolejności tworzymy plik, który na dalszym etapie będzie zamontowany jako dysk
o ustalonym rozmiarze. Istotnym jest, aby zawartość pliku składała się z samych zer, a nie
z losowych bajtów, gdyż należy mieć na względzie fakt kompresji, a ta jak wiadomo, bardzo
dobrze radzi sobie z regularnymi fragmentami bajtów. Plik tworzy się za pomocą następującego
polecenia:
dd if=/dev/zero of=~/obrazsp bs=1k count=4096
Powyższe polecenie utworzy plik obrazsp o rozmiarze 4 MB wypełniony zerami.
Następnie należy sformatować obraz tak, aby posiadał jakikolwiek znany jądru system
plików. Można użyć systemu plików ext2 lub Minix, jednakże ten pierwszy
jest bardziej zaawansowany i zostanie zastosowany.
mke2fs -m 0 -b 1024 -N 600 -v -F ~/obrazsp
Powyższe polecenia utworzy w podanym pliku system plików ext2, z liczbą i-węzłów
równą 600, ponadto nie będzie zarezerwowane dodatkowe miejsce dla użytkownika root.
600 i-węzłów w zupełności wystarczy na potrzeby dyskietki, system plików zużyje około 25-30%
z tej liczby. Określono także rozmiar bloku na 1024 bajty, gdyż jest to wartość
wymagana przez jądro. W przypadku innej wartości, jądro nie uruchomi się (błąd kernel panic).
Tak przygotowany system plików można zamontować korzystając z mechanizmu pętli zwrotnej:
mount -o loop -t ext2 ~/obrazsp /mnt/loop
W kolejnym kroku w systemie plików tworzone są niezbędne kartoteki. Należy utworzyć następujące kartoteki:
/dev
– pliki urządzeń,/proc
– kartoteka wymagana przez system plików proc,/etc
– pliki konfiguracyjne,/sbin
– programy superużytkownika,/bin
– programy użytkowników,/lib
– biblioteki dzielone,/mnt
– kartoteka punktów montowania dla innych systemów plików,/usr
– dodatkowe narzędzia,/tmp
– pliki tymczasowe,/root
– kartoteka domowa administratora.
2.1. Kartoteki /bin oraz /sbin
Kartoteki te winny zawierać programy, z których będzie można korzystać podczas pracy z dyskietki ratunkowej. Niezbędne są przynajmniej następujące programy:
- init,
- getty lub odpowiednik,
- login,
- mount,
- interpreter poleceń - powłoka.
Niestety standardowe programy używane przez różne dystrybucje systemu Linux mają dość duże rozmiary. Dzieje się tak dlatego, ponieważ współczesne napędy dyskowe są na tyle pojemne, że np. rozmiar programu init, wynoszący około 600 KB, jest względnie mały. Niestety w sytuacji, gdy programy te mają się znaleźć na dyskietce, okazuje się, że nie starczy dla nich miejsca. Na szczęście istnieje rozwiązanie tego programu za sprawą projektu BusyBox. Projekt ten powstał z myślą o wbudowanych systemach linuksowych, które winny zajmować niewiele miejsca. W jego skład wchodzą standardowe programy oraz narzędzia systemowe, z tą różnicą, że były pisane pod kątem zajmowania jak najmniej przestrzeni dyskowej. Niestety nie ma róży bez kolców. Dla przykładu, dostarczana powłoka systemowa (ash) nie jest aż tak zaawansowana jak powłoka BASH, ale z powodzeniem będzie się nadawała do uruchamiania skryptów startowych na dyskietce, jak również do podstawowej pracy w roli interpretera poleceń.
2.2. Kartoteka /dev
Pliki urządzeń są specjalnymi typami plików, które tworzy się za pomocą polecenia mknod.
Ponieważ tworzenie wszystkich niezbędnych plików może być dość żmudne, więc prościej skopiować
pliki z istniejącej kartoteki /dev
. Należy przy tym użyć parametru -a
programu ls tak, aby nie kopiować zawartości plików. Dla potrzeb budowanej dyskietki
ratunkowej użyto następujących poleceń do skopiowania najważniejszych plików urządzeń:
W nowych systemach linuksowych zawartość kartoteki /dev
nie jest statyczna.
Zawartość tej kartoteki tworzona jest dynamicznie przy pomocy systemu udev. Mechanizm
ten przy każdym uruchomieniu systemu tworzy tylko takie pliki urządzeń, które znalezione
zostały w komputerze oraz które są obsługiwane przez jądro. W takiej sytuacji może się
zdarzyć, że kopiowanie niektórych niezbędnych plików urządzeń nie powiedzie się. Należy
wówczas utworzyć plik urządzenia za pomocą polecenia mknod
. Aby utworzyć
taki plik, należy znać numery major i minor oraz typ urządzenia.
W dokumentacji znaleźć można informacje odnośnie tych parametrów.
Przykład: W systemie nie istnieje plik /dev/ram0
. W dokumentacji
znaleziono, że jest to urządzenie blokowe o numerze major równym 1 i minor
równym 0. Aby utworzyć taki plik urządzenia należy wpisać polecenie:
Uwaga: Program init wchodzący w skład pakietu BusyBox
wymaga pliku konsoli tty5
.
2.3. Kartoteka /etc
W kartotece /etc
znajdują się pliki konfiguracyjne poszczególnych
programów. Ponadto znajdują się w niej także skrypty startowe systemu, jak również
pliki przechowujące informacje o użytkownikach i ich hasłach.
Minimalny, niezbędny zbiór plików będzie miał następującą zawartość:
/etc/inittab
– plik konfiguracyjny pierwszego procesu uruchamianego przez jądro, a więc programu init.
W przypadku użycia programu init z pakietu BusyBox, należy użyć
poniższej zawartości, gdyż ze względu na małe rozmiary nie obsługuje on uniksowej
składni pliku konfiguracyjnego inittab
.
/etc/fstab
– plik konfiguracyjny programu mount, odpowiedzialnego za montowanie dysków.
/etc/rc
– podstawowy skrypt startowy systemu, musi mieć prawo wykonywania!
/etc/passwd
– kopia pliku z działającego systemu, z pousuwanymi zbędnymi użytkownikami.
/etc/shadow
– j.w.
/etc/group
– kopia pliku z działającego systemu, z pousuwanymi zbędnymi grupami.
2.4. Kartoteka /lib
Kartoteka /lib
zawiera pliki bibliotek. Aby dowiedzieć się z jakich
bibliotek korzystają poszczególne programy należy użyć programu ldd. Aby każdy
z wybranych do umieszczenia na dyskietce programów dał się uruchomić, należy skopiować
wszystkie pliki bibliotek z których programy te korzystają. Podczas kopiowania należy
kopiować zarówno pliki bibliotek jak i dowiązania symboliczne do nich. Należy pamiętać,
że pliki bibliotek muszą mieć prawo do wykonywania, w przeciwnym wypadku programy
korzystające z bibliotek nie uruchomią się.
Okazuje się, że pliki bibliotek nie należą do małych. W szczególności biblioteka standardowa języka C ma rozmiar wynoszący około 1,4 MiB. Można jednak zmniejszyć rozmiar pliku biblioteki usuwając z niego niepotrzebne informacje. W tym celu należy użyć następującego polecenia:
Uwaga! Polecenie usuwa także symbole biblioteki, co sprawia, że tak okrojona biblioteka nie będzie mogła zostać użyta do kompilacji innego programu.
2.4.1. Moduły PAM
Może się zdarzyć, że system operacyjny, z którego przygotowywana jest dyskietka
startowa korzysta z modułów PAM (ang. Pluggable Authentication Modules).
Aby dowiedzieć się, czy używany jest system PAM, najprościej jest sprawdzić programem
ldd, czy program login korzysta z biblioteki libpam.so
.
Jeśli tak, znaczy to, iż na dyskietce startowej trzeba będzie zapewnić wsparcie dla systemu PAM.
System PAM jest zaawansowanym modułowym mechanizmem służącym do autoryzacji użytkowników
i kontroli ich dostępu do usług. Dyskietka ratunkowa jednak nie będzie tworzona z myślą
o bezpieczeństwie, toteż mechanizm PAM zostanie na niej wyłączony. Należy utworzyć plik
/etc/pam.conf
i wpisać doń następujące wiersze:
Należy skopiować także plik /lib/security/pam_permit.so
do tworzonego
systemu plików. Plik /lib/libpam.so
jest także konieczny, choć powinien być
już dostępny w systemie plików po wykonaniu czynności opisanych w poprzednim podrozdziale.
2.4.2. Aparat NSS
Jeśli korzysta się z biblioteki glibc (nazywanej także libc6), należy
utworzyć plik /etc/nsswitch.conf
i wpisać doń następujące wiersze:
Aparat NSS (ang. Name Service Switch) umożliwia zmianę źródeł wielu standardowych
plików konfiguracyjnych dla różnych usług systemów uniksowych (np. /etc/passwd
).
Źródłem może zostać np. scentralizowana baza danych, system NIS, etc. Na dyskietce będą
wykorzystywane standardowe pliki konfiguracyjne, dlatego źródło każdej usługi z aparatu
NSS ma wpisaną wartość files
.
Uwaga! Koniecznie należy umieścić w systemie plików bibliotekę
/lib/libnss_files.so.2
.
2.5. Finalizowanie systemu plików
W zależności od tego, czy jądro zostanie skompilowane jako jedna całość, czy też zostaną
wydzielone moduły, należy mieć na uwadze, że w drugim przypadku muszą się dodatkowo znaleźć
na dyskietce programy odpowiedzialne za ładowanie/usuwanie modułów jądra. Należy także pamiętać
o tym, że obsługa systemu plików ext2 oraz RAM dysku nie może być skompilowana jako
moduł jądra, gdyż w takiej sytuacji system się nie uruchomi.
W kartotece /var
utworzyć trzeba pewne pliki logów, gdyż w przeciwnym wypadku
niektóre programy mogą raportować błędy. Pliki te tworzy są następująco:
Na zakończenie należy stworzyć w kartotece /etc
pliki ld.so.cache
oraz ld.so.conf
, które zawierają informację o tym, gdzie szukać plików bibliotek.
W tym celu wykonuje się następujące czynności:
Tak przygotowany system plik należy odmontować i skompresować:
Ostanie polecenie spowoduje skompresowanie pliku obrazsp
za pomocą algorytmu
Gzip. Utworzony zostanie plik obrazsp.gz
. Plik taki będzie mógł zostać przez
jądro rozpakowany i załadowany do RAM dysku.
2.6. Jądro systemu
Kolejnym ważnym etapem przygotowywania dyskietki jest kompilacja jądra. Nie zostanie tutaj omówiony proces kompilacji, gdyż został on dokładnie wytłumaczony w dokumentacji jądra. Przy konfiguracji jądra należy wziąć pod uwagę następujące wskazówki:
- Jądro musi mieć wbudowaną obsługę systemu plików w jakim został zapisany skompresowany obraz systemu plików (ext2).
- Jądro musi mieć włączoną obsługę RAM dysku.
- W celu zmniejszenia rozmiaru jądra należy usuwać zeń obsługę tych urządzeń, z których nie będzie się korzystało. Np. obsługa karty dźwiękowej oraz całego podsystemu dźwiękowego jest z pewnością zbędna na dyskietce ratunkowej.
- Jeśli pewne elementy jądra kompilowane są jako moduły, należy pamiętać, aby dodać pliki modułów do przygotowanego wcześniej systemu plików!
- Jeśli używane są programy z projektu Busybox, należy korzystać z jądra serii 2.4 lub nowszej.
2.7. Kopiowanie plików na dyskietkę
Dysponując plikiem zawierającym jadro systemu oraz skompresowanym obrazem systemu plików, można przystąpić do przygotowania dyskietki. Pierwszym krokiem jest jej sformatowanie w systemie plików MS-DOS (FAT12):
Aby uruchomić jądro niezbędne jest użycie boot loadera. Zastosowany zostanie program
rozruchowy SYSLINUX. Służy on do uruchamiania systemu Linux z dyskietek sformatowanych
w systemie plików MS-DOS. Boot loader SYSLINUX można pobrać z Internetu. Następnie
należy rozpakować archiwum, wejść w świeżo utworzony katalog i skompilować program poleceniem
make
.
W celu zainstalowania programu rozruchowego na dyskietce, należy wejść do podkatalogu
unix
znajdującego się w katalogu, w którym skompilowany został SYSLINUX
i wpisać polecenie:
Następnie należy skopiować pliki jądra oraz skompresowanego obrazu systemu plików na dyskietkę. Dyskietkę należy najpierw zamontować:
Kolejną czynnością jest przejście do katalogu w którym umieszczony został skompresowany obraz systemu plików i skopiowanie go na dyskietkę:
Następnie kopiowany jest plik zawierający jadro systemu. W tym celu należy przejść do kartoteki, w której zostały rozpakowane źródła jądra i wpisać polecenie:
Kolejną czynnością jest zmodyfikowanie pliku jądra tak, aby głównym punktem montowania był RAM dysk:
Można także zmienić domyślny rozmiar RAM dysku (4 MB). Należy pamiętać, aby rozmiar ten był nie mniejszy od rozmiaru pliku obrazu po dekompresji. W przypadku chęci utworzenia RAM dysku o rozmiarze 8 MiB, należy wpisać polecenie:
Ostatnią czynnością jest utworzenie pliku konfiguracyjnego dla boot loadera SYSLINUX. Plik ten zawiera informację dotyczącą nazwy jądra, jak również opcje z jakimi jądro ma zostać uruchomione. Jedyną zastosowaną opcją, będzie opcja uruchomienia RAM dysku ze skompresowanego systemu plików.
Dyskietka jest gotowa, należy pamiętać o jej odmontowaniu:
Tak przygotowana dyskietka powinna się dać uruchomić, oczywiście pod warunkiem, że nie pominięto żadnego kroku, jak również że na dyskietce znajdują się wszystkie niezbędne programy oraz biblioteki.
Wnioski
W niniejszym dokumencie omówiony został proces tworzenia kompletnej dyskietki ratunkowej typu boot/root disk. Okazało się, że wbrew intuicji, proces ten jest dość skomplikowany i czasochłonny. Dzieje się tak za sprawą niezwykle istotnego ograniczenia, jakim jest bardzo mała pojemność dyskietki. Sytuacja taka wymusza stosowanie alternatywnych wersji zarówno programów, jak również bibliotek, które zajmują mniejszą ilość miejsca. W warunkach dyskietki bowiem, każdy zyskany bajt jest na wagę złota.
Jeśli nie ma czasu (lub cierpliwości) do stworzenia dyskietki ratunkowej, można użyć gotowych obrazów dyskietek. Na ogół w skład większości dystrybucji linuksowych wchodzą obrazy dyskietek awaryjnych, które można z powodzeniem zastosować do próby naprawy systemu. Ponadto w sieci dostępnych jest wiele niezależnych dyskietek ratunkowych, stworzonych z myślą o różnych zadaniach. Przykładem niech będzie bardzo udana dyskietka tomsrtbt, którą sam autor określa jako “większość z Linuksa na jednej dyskietce”.
Powoli dyskietki odchodzą do lamusa, coraz mniej komputerów dysponuje napędami dysków
elastycznych. Jest to dobra tendencja, gdyż dyskietki są nośnikami zawodnymi.
Systemy awaryjne umieszczane są obecnie na płytach kompaktowych lub na kluczach USB. Nośniki
tego typu mają jedną wspólną zaletę – oferują znacznie większą pojemność w stosunku do klasycznych
dyskietek. Dzięki temu powstają coraz to bardziej zaawansowane systemy ratunkowe z rozmaitymi
programami. Ponadto są one niejednokrotnie wyposażone w obsługę środowiska graficznego, o czym można
było tylko marzyć w przypadku dyskietek ratunkowych...
Data artykułu: 2007-10-18.
Waszym zdaniem...
Na razie nie ma jeszcze żadnych komentarzy. Bądź pierwszy!
Komentarz nie powinien zawierać tagów HTML. Zostaną one automatycznie usunięte.