Práce v prostředí ramdisku

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Zavaděč

Start systému začíná zavedením binárního jádra do paměti počítače. O to se stará speciální aplikace - zavaděč. Zavaděč je aplikace, která není závislá na žádném konkrétním operačním systému, ale aby jej mohla spustit, musí být schopna načíst jeho jádro do paměti.

Pokud je toto jádro uloženo lokálně, na fyzickém disku, tak musí být schopen tento disk rozpoznat a data z něj přečíst. K tomu ovšem potřebuje příslušné ovladače.

Nejrozšířenějším linuxovým zavaděčem je v současné době GRUB2, který má oproti staršímu zavaděči LILO výhodu především v tom, že proces zavádění probíhá ve dvou krocích:

  1. Nejdřív se spouští modulární prostředí zavaděče, které má v sobě integrovaný shell
  2. a teprve pak se zavádí operační systém

Způsob jakým funguje GRUB je velmi podobný tomu, jak funguje zavádění linuxového systému. Ostatně inspirace linuxovým prostředím je u tohoto zavaděče víc než zřejmá.

Zavádění linuxového systému

Zavaděč načte z úložiště do paměti soubor s linuxovým jádrem (jeho jméno podle obvyklého úzu začíná řetězcem vmlinuz), spustí ho a předá mu příslušné konfigurační volby.

Spuštěné jádro se pokusí identifikovat a připojit zařízení, na kterém má být uložen systém a z něj spustit spouštěč dalších procesů - init. Aby to bylo možné, musí mít zakompilované všechny potřebné ovladače. U distribucí, které si kompilují jádro podle aktuální konfigurace stroje, s tím obvykle není problém. Ale u distribucí které mají fungovat univerzálně, by optimální konfigurace takového jádra mohla představovat neřešitelný problém. Proto vužívají modulární jádro, které při zavádění využívá tzv. RAM disk.

Poznámka Monolitické jádro, tj. to které je kompilované na míru, má výhodu v tom, že může být lépe optimalizované a tím pádem i o něco výkonnější.

RAM disk

Je čistě technicky vzato další kus operační paměti (odtud RAM disk), kam zavaděč vybalí z komprimovaného cpio archívu minimalistické linuxové prostředí. Jádro s ním pak pracuje jako by šlo o normální systémový disk. Tzn. že si jej připojí, a spustí z něj init. V tomto případě však nejde o binární spouštěč procesů, ale shellový skript co postupně spouští další skripty. Skript init obsahuje podmínky, které umožňují proces zavádění cíleně přerušit.

K takovému přerušení zaváděcího procesu obvykle dojde, když některý ze skriptů vrátí chybu. Prostředí a nástroje v ramdisku, umožňují zjistit příčinu chyby a případně provést její opravu. Někdy ale může být v okamžiku selhání pozdě na to zjišťovat, kde je problém, proto je dobré vědět jak takovou situaci navodit a co se dá dělat.

Přerušení zaváděcího procesu lze záměrně docílit tím, že se přes zavaděč předá jádru před jeho zavedením volba break. Nemá-li tato volba uveden žádný další parametr, dojde k přerušení ve fázi #premount - tj. před připojením kořenového souborového systému.

Že jsme v prostředí ramdisku se pozná tak, že se místo obvyklého přihlášení rovnou objeví textová konzole

(initramfs)

Pokud konzoli opustíme příkazem exit, bude zaváděcí proces dál pokračovat.

Poznámka Skript init, který je v kořeni ramdisku, se generuje na základě konfigurace v souboru /etc/initramfs-tools/initramfs.conf při sestavení souboru initrd. Ostatní skripty, které má ramdisk v adresáři /scripts. Se při jeho sestavení, či aktualizaci kopírují z adresáře /etc/initramfs-tools/scripts.

top

Parametr #top přeruší zaváděcí proces před spuštěním prvního skriptu. Jediná operace, která se realizuje dřív, je načtení obsahu paměti z disku, pokud byl systém při předchozím spuštění uspán na disk.

modules

Do ramdisku jsou nakopírované další moduly jádra (ovladače), které se do jádra zavádějí pouze pokud jsou zapotřebí.

Při inicializaci se každé existující fyzické zařízení ohlašuje svým specifickým kódem, kterým je identifikován příslušný ovladač a na základě této identifikace a tabulky vzájemných závislostí se pak zavedou všechny potřebné moduly ve správném pořadí.

Kromě jaderných modulů a nástrojů potřebných pro jejich zavedení, obsahuje ramdisk také další staticky kompilované nástroje a utility, které se mohou hodit, když je něco špatně a dojde k přerušení zaváděcího procesu.

premount

Nejčastěji vzniká problém v okamžiku, kdy z nějakého důvodu selže připojení blokového zařízení, na kterém má být uložen kořenový adresář zaváděného systému. Jak se jmenuje toto zařízení, se jádru předává při zavádění prostřednictvím volby root=. Předaná hodnota se uloží do proměnné ${ROOT}, kterou si lze přes echo vypsat.

Pokud se jeví v pořádku, je třeba zjistit pomocí ls, zda-li takové zařízení v adresáři /dev skutečně existuje.

Pokud neexistuje, tak to může znamenat že..

  • jádru chybí potřebný ovladač (po kompilaci modulu nebyl aktualizován příslušný ramdisk)
  • došlo k přejmenování zařízení (kupř. po přidání dalšího blokového zařízení do počítače, nebo při změně pořadí diskových oddílů)
  • nedošlo z nějakého důvodu k sestavení blokového zařízení (v případě RAID pole či LVM skupiny)
Poznámka Některé zavaděče, jako např. GRUB, umožňují provést manuální opravu ještě před spuštěním zaváděcího procesu, ale jsou situace, kdy to udělat nelze.

mount

K přerušení zavádění může dojít i v případě, že je chyba v souboru /etc/fstab.

bottom

Většinu souborových systémů nelze opravit, pokud se s nimi pracuje. Systém uložený v ramdisku je tak ideálním prostředím pro takové operaci, protože

init