Wtorek, 11 grudnia 2018 r.
https://www.pichen.com/

Get Firefox!
Valid XHTML 1.0 Strict
Poprawny CSS!

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:

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:

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ń:

cp -a /dev/sda* /mnt/loop/dev/ cp -a /dev/fd0 /mnt/loop/dev/ cp -a /dev/tty[0-4] /mnt/loop/dev/ cp -a /dev/hda* /mnt/loop/dev/ cp -a /dev/hdb /mnt/loop/dev/ cp -a /dev/hdc /mnt/loop/dev/ cp -a /dev/hdd /mnt/loop/dev/ cp -a /dev/sr0 /mnt/loop/dev/ cp -a /dev/console /mnt/loop/dev/ cp -a /dev/kmem /mnt/loop/dev/ cp -a /dev/mem /mnt/loop/dev/ cp -a /dev/null /mnt/loop/dev/ cp -a /dev/ram0 /mnt/loop/dev/ cp -a /dev/zero /mnt/loop/dev/

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:

mknod /dev/ram0 b 1 0

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ść:

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

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.

::sysinit:/etc/rc tty1::respawn:/sbin/getty 9600 tty1 tty2::respawn:/sbin/getty 9600 tty2
/dev/ram0 / ext2 defaults /proc /proc proc defaults
#!/bin/sh /bin/mount -av /bin/hostname komputer

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:

strip /lib/libc-2.5.so -o /mnt/loop/lib/libc-2.5.so

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:

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

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:

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

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:

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

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:

touch /mnt/loop/etc/ld.so.conf ldconfig -r /mnt/loop

Tak przygotowany system plik należy odmontować i skompresować:

umount /mnt/loop gzip -9 ~/obrazsp

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:

  1. Jądro musi mieć wbudowaną obsługę systemu plików w jakim został zapisany skompresowany obraz systemu plików (ext2).
  2. Jądro musi mieć włączoną obsługę RAM dysku.
  3. 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.
  4. 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!
  5. 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):

fdformat /dev/fd0 mkdosfs /dev/fd0

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:

./syslinux /dev/fd0

Następnie należy skopiować pliki jądra oraz skompresowanego obrazu systemu plików na dyskietkę. Dyskietkę należy najpierw zamontować:

mount -t msdos /dev/fd0 /mnt/floppy

Kolejną czynnością jest przejście do katalogu w którym umieszczony został skompresowany obraz systemu plików i skopiowanie go na dyskietkę:

cp obrazsp.gz /mnt/floppy

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:

cp arch/i386/boot/bzImage /mnt/floppy/jadro

Kolejną czynnością jest zmodyfikowanie pliku jądra tak, aby głównym punktem montowania był RAM dysk:

rdev /mnt/floppy/jadro /dev/ram0

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:

rdev -r /mnt/floppy/jadro 8192

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.

echo "DEFAULT jadro initrd=obrazsp.gz" > /mnt/floppy/syslinux.cfg

Dyskietka jest gotowa, należy pamiętać o jej odmontowaniu:

umount /mnt/floppy

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!

Aktualności

2017-05-14

Od dzisiaj strona jest dostępna wyłącznie w połączeniu szyfrowanym (bezpiecznym). Naprawiłem niedziałające odnośniki do galerii, usunąłem problem z wyświetlaniem znaków na starszych stronach relacji z Rosji, Ukrainy i Chin. Dodałem zdjęcia do mojego bloga o Malezji.

2017-05-07

Tydzień przeprowadziłem się do pracy do Kuala Lumpur w Malezji. Zapraszam do przeczytania mojego bloga dotyczącego tej przygody.

2017-03-21

Dodałem obsługę protokołu SSL. Strona dostępna jest także w bezpiecznej, zaszyfrowanej wersji. Drobne korekty w artykułach (dzięki Chris!). Zaktualizowałem sekcję Podróże.

2012-06-06

Dodałem relację z mojej podróży na wschód Kanady w 2010 r. Wzbogaciłem stronę o obsługę komentarzy. Naprawiłem formularz kontaktowy – odtąd korzysta z technologii AJAX. Przeszedłem na użycie tzw. „przyjaznych linków”.

2010-03-30

Dodałem wg mnie ciekawy artykuł opisujący sposób instalacji systemu openSUSE bez użycia nośników instalacyjnych. Do tego celu użyta zostanie technologia PXE umożliwiająca rozruch komputera z sieci. Zapraszam do przeczytania artykułu.

2009-07-18

Zaaktualizowałem informacje o sobie oraz dane kontaktowe. Dodałem nowe podstrony, tj. strony zawierające arytykuły dotyczące systemów UNIX oraz Linux. Ponadto dodałem odnośniki do moich profili na popularnych portalach społecznościowych. Na stronie pojawił się także odnośnik do mojej galerii zdjęć w systemie Google Picasa. Zaktualizowałem zbiór odnośników do relacji z podróży do Chin, Rosji i Mongolii.

2008-07-29

Dodałem podstronę, na której umieściłem przykładowe skrypty systemów uniksowych. Strona została przeniesiona na nowy serwer. Zmieniłem także kodowanie znaków strony na UTF-8.

2006-09-02

Dodałem galerię zdjęć. W galerii umieściłem zdjęcia z podróży do Chin, która odbyła się w 2005 roku. Jako, że aktualnie służę w wojsku, to w galerii umieściłem 4 zdjęcia z przysięgi wojskowej.
Osoby oczekujące na relację z Chin informuję, że jeszcze w tym roku powinna się pojawić na stronie.
 
© Copyright 2000 - 2018 Dawid Pichen. All rights reserved.