NFsec Logo

Przejście z jądra huge na generic

22/01/2008 w Administracja Brak komentarzy.  (artykuł nr 33, ilość słów: 632)

S

tandardowo, podczas instalacji Slackware od wersji 12.0 jądrem systemu jest przewidziana przez jego autora wersja: huge (ang. wielka) dla maszyny z jednym procesorem, bądź huge-smp dla maszyn wieloprocesorowych (Symetric MultiProcessing) lub wielordzeniowych (wtedy technologia SMP traktuje każdy rdzeń jako osobny procesor) – zawierająca w większości wkompilowane w sobie prawie wszystkie sterowniki kontrolerów oraz systemy plików (wszystko oprócz zmywaka ;).

Jeśli szukamy czegoś bardziej lekkiego, niż standardowe jądro, które zostało skompilowane w ten sposób by na początku sprostać większości wymagań sprzętowych (oczywiście możemy dokonać własnej rekompilacji), a fabryczna wersja spisuje się doskonale na naszym sprzęcie, tylko jest trochę za duża – możemy skorzystać w wersji generic lub generic-smp. Do odpowiedniej wersji jądra oczywiście należy dobrać odpowiedni zestaw modułów tj. kernel-modules lub kernel-modules-smp, bez względu czy jest to wersja huge czy generic liczy się kompatybilność względem liczby obsługiwanych procesorów lub rdzeni (zwracamy uwagę na końcówkę -smp). Niestety wersja generic, aby została uruchomiona wymaga pakietu mkinitrd zawierającego, narzędzia umożliwiające stworzenie pliku initrd, co jest skrótem od “initial ramdisk”. Jest to bardzo mały system plików Linuksa, który jest ładowany do pamięci RAM oraz montowany wraz z ładowaniem się jądra systemu, lecz przed zamontowaniem głównego systemu plików. Przeważnie powodem, dla którego wymagane jest używanie initrd jest to, aby załadować moduły jądra przed zamontowaniem głównej partycji systemu. Zazwyczaj moduły te są wymagane przy wsparciu systemu plików używanego przez główną partycję (np. ext2, ext3, XFS) lub może zdarzyć się nawet tak, że wymagana jest obsługa kontrolera, do którego jest podpięty dysk twardy (np. SCSI lub RAID). Poniżej przedstawiony przykład omawia zmianę jądra huge-smp na wersję generic-smp. Zainstalowanymi już pakietami podczas instalacji systemu Slackware są: kernel-huge-smp-[wersja] oraz kernel-modules-smp-[wersja] (wersja – oznacza aktualne oznaczenie serii np. 2.6.23.12). W celu dokonania wymiany należy zainstalować brakujące pakiety z sekcji A (/slackware/a) na dysku DVD lub CD:

installpkg kernel-generic-smp-[wersja].tgz
installpkg mkinitrd-[wersja].tgz
installpkg cpio-[wersja].tgz

Po wykonaniu powyższych czynności w katalogu /boot znajdą się aktualnie dwie wersje jądra systemu: huge oraz generic, gdzie dowiązania symboliczne powinny już wskazywać na wersję generic:

System.map -> System.map-generic-smp-[wersja]
config -> config-generic-smp-[wersja]
vmlinuz -> vmlinuz-generic-smp-[wersja]

Kolejnym krokiem jest budowa obrazu initrd. Dla przykładu można zbudować obraz initrd używając danych wersji modułów jądra dla systemu, którego partycja główna oparta jest o system ext2, znajdując się na drugiej podstawowej partycji dysku podłączonego do pierwszego kontrolera pracującego w trybie master – /dev/hda2:

mkinitrd -c -k [wersja_j±dra]-smp -m ext2 -f ext2 -r /dev/hda2

Komenda ta powinna zostać zakończona komunikatem typu: 3104 blocks. Następnie w katalogu /boot powinien pojawić się katalog initrd-tree zawierający system plików initrd. Następnie ze struktury tego katalogu zostanie stworzony skompresowany plik initrd.gz. Posiadając już tak przygotowany plik należy dopilnować, aby został on załadowany razem z jądrem systemu podczas startu. Jeśli używamy bootloadera typu LILO edytujemy plik /etc/lilo.conf oraz dodajemy stosowny wiersz ładujący initrd:

# Linux bootable partition config begins
image = /boot/vmlinuz
  initrd = /boot/initrd.gz
  root = /dev/hda2
  label = Slackware
  read-only

# Linux bootable partition config ends

Initrd jest ładowany poprzez drugi wiersz zaczynający się od initrd… Linię tą zawsze należy dodawać zaraz za wywołaniem obrazu jądra, którego używamy. W tym przypadku jest to generic, ponieważ dowiązanie symboliczne vmlinuz już odnosi się do poprzednio zainstalowanego obrazu. Należy zachować zmiany w pliku konfiguracyjnym LILO, oraz załadować nowe ustawienia komendą: lilo -v:

Boot image: /boot/vmlinuz -> vmlinuz-generic-smp-[wersja]-smp
Mapping RAM disk /boot/initrd.gz
Added Slackware*

W tym momencie przeprowadzamy restart całego systemu: shutdown -r now. Po poprawnym rozruchu systemu możemy spokojnie usunąć wszystkie pliki z katalogu /boot zawierające w nazwie wyrażenie *huge*. Inne bootloadery typu syslinux również obsługują używanie initrd. Przed zastosowaniem tego rozwiązania należy po prostu zapoznać się z dokumentacją każdego bootloadera, którego używamy w celu upewnienia się, że posiada on wsparcie dla inital ramdisku. Powyższy przykład został wzorowany na maszynie obsługującej dwa procesory. Dla maszyn bez wielu rdzeni i procesorów należy używać pakietów bez oznaczenia: -SMP.

Więcej informacji: Initrd, Geninitrd, /usr/doc/mkinitrd/README.initrd

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , ,

Komentowanie tego wpisu jest zablokowane.