SVN: PLD-doc/book/pl_book__kernel-urzadzenia/pl_kernel-urzadzenia__geninitrd.sec
qwiat
qwiat w pld-linux.org
Nie, 14 Sty 2007, 20:18:50 CET
Author: qwiat
Date: Sun Jan 14 20:18:49 2007
New Revision: 8164
Modified:
PLD-doc/book/pl_book__kernel-urzadzenia/pl_kernel-urzadzenia__geninitrd.sec
Log:
- poprzenoszone akapity pomiedzy sekcjami
- bardziej szczegolowe opisy
- wiecej informacji o geninitrd
- mniej chrooto-centrycznie
- masa kosmetyki
Modified: PLD-doc/book/pl_book__kernel-urzadzenia/pl_kernel-urzadzenia__geninitrd.sec
==============================================================================
--- PLD-doc/book/pl_book__kernel-urzadzenia/pl_kernel-urzadzenia__geninitrd.sec (original)
+++ PLD-doc/book/pl_book__kernel-urzadzenia/pl_kernel-urzadzenia__geninitrd.sec Sun Jan 14 20:18:49 2007
@@ -7,78 +7,98 @@
W PLD wszystkie możliwe sterowniki są dostępne w
postaci tzw. modułów, przez co nie są one "widoczne" dla
jądra w trakcie startu systemu. Aby system wystartował
- wymaganych jest kilka modułów koniecznych do zamontowania
- głównego systemu plików, są to moduły kontrolera urządzeń
- masowych (IDE/SCSI/RAID) oraz systemu plików na głównej
- partycji systemowej (rootfs): "/".
+ wymaganych jest kilka modułów i innych komponentów
+ koniecznych do zamontowania głównego systemu plików
+ (root filesystem):
+ <itemizedlist>
+ <listitem>
+ <para>
+ moduły kontrolera urządzeń
+ masowych (IDE/SATA/SCSI) np.: <literal>sata_nv</literal>,
+ <literal>sata_sil</literal>, <literal>sd_mod</literal>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ systemu plików na głównej
+ partycji systemowej np.: <literal>xfs</literal>,
+ <literal>reiserfs</literal>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ elementy konieczne do złożenia woluminów
+ opartych o LVM lub programowy RAID
+ </para>
+ </listitem>
+ </itemizedlist>
</para>
<para>
Jedynym sposobem dostarczenia tych sterowników jest
umieszczenie ich w specjalnym "obrazie" zwanym
<literal>initrd</literal> (initial ramdisk). Obraz ten jest
- plikiem wczytywanym przez bootloader, tak więc oprócz initrd
- musimy właściwie skonfigurować bootloader.
+ plikiem wczytywanym przez bootloader, tak więc dodatkowo
+ musimy właściwie skonfigurować bootloader - wskazać położenie obrazu.
Obraz przechowywany jest w katalogu <filename>/boot</filename>
- i zwykle nazywa się <filename>initrd-{$wersja_jądra}.gz</filename>,
+ i ma nazwę <filename>initrd-{$wersja_jądra}.gz</filename>,
do niego zaś prowadzi łącze o nazwie <filename>initrd</filename>.
</para>
<para>
- Initrd jest tworzony przy każdej instalacji
- systemu, lub instalacji/aktualizacji kernela. Bywa jednak, że
- nasz obraz nie jest wygenerowany prawidłowo i jesteśmy
- zmuszeni do utworzenia go samodzielnie. Źle utworzony
- uniemożliwi uruchomienie systemu, ujrzymy wtedy następujący
- komunikat:
+ Initrd jest tworzony przy każdej instalacji/aktualizacji
+ kernela. Bywa jednak, że nasz obraz nie jest wygenerowany
+ prawidłowo i jesteśmy zmuszeni do utworzenia go samodzielnie.
+ Źle utworzony uniemożliwi uruchomienie systemu, ujrzymy
+ wtedy następujący komunikat:
<screen>Kernel panic: VFS: Unable to mount root fs...</screen>
Jądro mówi nam, że nie może zamontować głównego systemu plików,
- gdyż brakuje mu jakiegoś sterownika. Może się to zdarzyć
- jeśli nasz sprzęt nie został prawidłowo wykryty lub próbujemy
+ gdyż brakuje mu jakiegoś komponentu. Może się to zdarzyć,
+ że nasz sprzęt nie został prawidłowo wykryty lub próbujemy
uruchomić PLD z naszego dysku na innym komputerze
(o innym kontrolerze urządzeń masowych).
</para>
+ <para>
+ Systemu nie można uruchomić więc musimy skorzystać z operacji
+ chroot-a, możemy w tym celu użyć dowolnej dystrybucji
+ linuksa jednak chyba najwygodniejsze będzie użycie
+ <productname>PLD-Live</productname> lub
+ <productname>RescueCD</productname>.
+ </para>
</section>
+
<section id="kernel-urzadzenia_geninitrd_przygotowanie">
<title>Przygotowanie</title>
<para>
Poniżej przedstawiono trzy metody generowania initrd. W
- większości wypadków najwygodniejszy będzie pierwszy sposób, w
- przypadku dwóch pozostałych musimy znać nasz sprzęt i system
- plików partycji "/" aby wskazać nazwy właściwych modułów.
+ większości wypadków wystarczy nam pierwszy ze sposobów,
+ pozostałe są trudniejsze gdyż musimy znać nasz sprzęt i
+ system plików partycji "/".
Jeśli obraz nie jest tworzony prawidłowo przez pierwszą
- metodę musimy się zadowolić dwoma pozostałymi, co więcej
- będziemy musieli powtarzać całą operację po każdorazowej
- instalacji nowej wersji jądra. Druga i trzecia metoda
- mają jedną zasadniczą przewagę nad pierwszą - mogą być
- przeprowadzane na dowolnej maszynie.
+ metodę musimy się zadowolić dwoma pozostałymi. Druga
+ i trzecia metoda mają jedną zasadniczą przewagę nad
+ pierwszą - mogą być przeprowadzane na dowolnej maszynie.
</para>
<para>
+ W dwóch pierwszych metodach użyjemy skryptu
+ <filename>/sbin/geninitrd</filename> z pakietu
+ <filename>geninitrd</filename>. Jest to wygodny automat,
+ który stara się wykryć sprzęt, system plików i czy główny
+ system plików jest stworzony na LVM/soft RAID. Skrypt geninird wymaga
+ prawidłowych wpisów w <filename>/etc/fstab</filename> i
+ podmontowanwego <filename>/proc</filename>. Tak więc jeśli
+ generujemy initrd w systemie typu chroot to wydajemy
+ polecenie (z chroota):
+ </para>
+ <screen># mount /proc</screen>
+ <para>
Opis wykrywania sprzętu i dobierania właściwych modułów
- opisano w <xref linkend="kernel-urzadzenia_moduly_zarzadzanie" />. Przy
- tworzeniu initrd przeważnie musimy skorzystać z operacji
- chroot-a, możemy użyć dowolnej dystrybucji linuksa jednak chyba
- najwygodniejsze będzie użycie systemu uruchamianego z
- płyty CD np.: <productname>PLD-Live</productname> lub
- <productname>RescueCD</productname>. Opis procedury chroota
- z płyty typu Live znajdziemy w <xref linkend="administracja_rescue" />.
+ opisano w <xref linkend="kernel-urzadzenia_moduly_zarzadzanie" />.
</para>
</section>
-
-
<section id="kernel-urzadzenia_geninitrd_automatyczna">
<title>Automatyczne generowanie initrd</title>
<para>
- Przeważnie sprzęt i używany system plików partycji
- "/" mogą zostać wykryte automatycznie. Proces ten zaczynamy
- od podłączenia dysku twardego do docelowej maszyny i
- posłużenia się inną dystrybucją w celu wykonania operacji
- chroota.
- </para>
- <para>
- Jeśli zmieniły się nazwy urządzeń masowych po podłączeniu dysku
- twardego do innej maszyny, należy dokonać stosownych
- poprawek w pliku <filename>/etc/fstab</filename>. W razie
- potrzeby edytujemy też plik <filename>/etc/sysconfig/geninitrd</filename>
+ W razie potrzeby edytujemy plik <filename>/etc/sysconfig/geninitrd</filename>
i ustawiamy jaki rodzaj urządzenia (<hardware>SCSI</hardware>,
<hardware>IDE</hardware>, <hardware>RAID</hardware>) ma
być automatycznie wykrywany:
@@ -90,31 +110,28 @@
## Do install RAID modules (if RAID is used)?
PROBERAID=yes</screen>
- Następnie montujemy pseudo-system plików <filename>/proc</filename>:
+ Teraz przyszedł czas na wygenerowanie obrazu wg schematu
</para>
- <screen># mount /proc</screen>
<para>
- Teraz przyszedł czas na wygenerowanie obrazu. Używamy do tego
- programu <command>geninitrd</command>:
+ <command>geninitrd [opcje] {$initrd} {$wersja_jądra}</command>
+ np.:
</para>
+ <screen># geninitrd -v -f /boot/initrd-2.6.16.35-1.gz 2.6.16.35-1</screen>
<para>
- <command>geninitrd [opcje] {$nowy_initrd} {$wersja_jądra}</command>
- np.:
+ Parametr <option>-v</option> odpowiada za "gadatliuwość" programu,
+ zaś <option>-f</option> wymusza nadpisanie istniejącego obrazu.
</para>
- <screen># geninitrd -v /boot/initrd_nowy 2.6.7</screen>
</section>
<section id="kernel-urzadzenia_geninitrd_reczna">
<title>Ręczne generowanie initrd</title>
<para>
- Jeśli nie jest to macierzysta maszyna użyjemy dowolnej
- dystrybucji i operacji chroot-a. Metoda ta wymaga precyzyjnej
- znajomości używanego sprzętu i systemu plików, gdyż sami
- musimy wskazać odpowiednie moduły. Jest jednak konieczna,
- w przypadku problemów z automatycznym wykryciem wymaganych
- sterowników lub jeśli chcemy operację wykonać na innej
- maszynie niż docelowa.
+ Metoda ta wymaga precyzyjnej znajomości używanego sprzętu
+ i systemu plików, gdyż sami musimy wskazać odpowiednie
+ moduły. Jest jednak konieczna, w przypadku problemów z
+ automatycznym wykryciem wymaganych sterowników lub jeśli
+ chcemy operację wykonać na innej maszynie niż docelowa.
</para>
<para>
Możemy wpisać listę koniecznych modułów do odpowiedniej
@@ -132,7 +149,7 @@
</para>
<para>
<command>geninitrd [opcje] --with={$nazwa_modułu}
- {$nowy_initrd} {$wersja_jądra}</command>
+ {$initrd} {$wersja_jądra}</command>
</para>
<para>
Dużym ułatwieniem zadania jest automatyczne dołączanie
@@ -141,24 +158,25 @@
systemu plików ext3 i kontrolera <hardware>IDE</hardware>
PDC20268 firmy Promise:
</para>
-<screen># geninitrd -v --with=ext3 --with=pdc202xx_new /boot/initrd_nowy 2.6.7</screen>
+<screen># geninitrd -v --with=ext3 --with=pdc202xx_new /boot/initrd-2.6.16.35-1.gz 2.6.16.35-1</screen>
</section>
<section id="kernel-urzadzenia_geninitrd_modyfikacja">
<title>Gdy zawiedzie geninitrd</title>
<para>
- Możemy zmodyfikować zawartość obrazu bez użycia skryptu
- geninitrd, aby to zrobić rozpoczynamy od skopiowania initrd
- w inne miejsce i rozpakowania go:
-<screen># gzip -d initrd-2.6.8.gz</screen>
+ Możemy zmodyfikować zawartość obrazu wygenerowanego
+ przez geninitrd, aby to zrobić rozpoczynamy od skopiowania
+ initrd w inne miejsce i rozpakowania go:
+<screen># gunzip initrd-2.6.16.35-1.gz</screen>
rozpakowany plik montujemy jako loop:
-<screen># mount -o loop initrd-2.6.8 initrd-src</screen>
+<screen>mkdir /tmp/initrd-src
+# mount -o loop initrd-2.6.16.35-1 /tmp/initrd-src</screen>
</para>
<para>
Tworzenie initrd rozpocznijmy od skopiowania zawartości
katalogu w inne miejsce:
-<screen># cp -a initrd-src initrd-moje
+<screen># cp -a /tmp/initrd-src initrd-moje
cp: czytanie `initrd-src/bin/sh': Błąd wejścia/wyjścia</screen>
Pomimo tego błędu dobrze się skopiowało, warto jednak sprawdzić
uprawnienia i atrybuty pliku (ewentualnie poprawić na takie
@@ -178,33 +196,19 @@
Kompresujemy nowy initrd:
<screen># gzip -9 initrd-nowy</screen>
Teraz już pozostało tylko skopiowanie pliku
- <filename>initrd-nowy.gz</filename> do
- <filename>/boot</filename>.
+ <filename>initrd-nowy.gz</filename> do
+ <filename>/boot</filename> i nadanie mu odpowiedniej
+ nazwy.
</para>
</section>
- <section id="kernel-urzadzenia_geninitrd_zakonczenie">
- <title>Operacje końcowe</title>
- <para>
- Musimy usunąć łącze symboliczne o nazwie
- "<filename>/boot/initrd</filename>" wskazujące
- na stary obraz i tworzymy łącze wskazujące na nowy:
- </para>
- <screen># rm /boot/initrd
-# ln -s /boot/initrd_nowy /boot/initrd</screen>
- <para>
- Ostatnią czynnością jest odświeżenie bootloader-a, wcześniej
- jednak musimy się upewnić, że wskazuje on na nowy initrd. Dowiemy
- się tego przeglądając jego plik konfiguracji, w przypadku
- <productname>LILO</productname> w pliku
- <filename>/etc/lilo.conf</filename> odszukujemy linijkę
- zaczynającą się od słowa "<literal>initrd</literal>", która
- może wyglądać następująco:
- </para>
- <screen>initrd = /boot/initrd</screen>
+ <section id="kernel-urzadzenia_geninitrd_bootloader">
+ <title>Bootloader</title>
<para>
- Następnie (o ile mamy zainstalowane LILO) wydajemy polecenie:
+ Musimy się upewnić czy łącze symboliczne
+ <filename>/boot/initrd</filename> wskazuje na prawidłowy obraz.
+ Jeśli używamy <productname>LiLo</productname> wydajemy polecenie:
</para>
<screen># lilo</screen>
<para>
@@ -231,8 +235,7 @@
## Modules that should be loaded before anything (i.e. jbd for ext3)
PREMODS=""</screen>
możemy też użyć opcji
- <emphasis>--with</emphasis> programu geninitrd, lub dodać
- dodatkowe moduły przy "ręcznym" budowaniu obrazu.
+ <emphasis>--with</emphasis> programu geninitrd.
Warto pamiętać żeby nie przesadzać z ich ilością, może
to spowodować wolniejszy start systemu i niepotrzebne
zużycie pamięci operacyjnej przez nieużywane
Więcej informacji o liście dyskusyjnej pld-doc