Linux Boots

Jak to dopadá, tam není moc co natahování:

1. Boot loader Najde obraz jádra na disku, načte do paměti, a spustí ji.
2. Jádro inicializovat zařízení a STI ovladače.
3. Jádro připojí kořenový souborový systém.
4. Jádro začne init Volat naplánovat.
5. init nastaví zbytek procesů v pohybu.
6. Poslední procesům, které init spustí jako součást zavádění systému vám umožní přihlášení.

Identifikace každé fázi procesu zavádění je neocenitelná při stanovení spouštěcích problémů a porozumění systému jako celku. Chcete-li začít, soustředit se na zavaděč, který je úvodní obrazovka nebo vyzvat dostanete po počítače se STI power-on self-test, žádá Jaký operační systém spustit. Po provedení volby, boot loader spustí linuxové jádro, doručovat kontrolu systému do jádra.

K dispozici je podrobná diskuse o jádra jinde v této knize, z nichž je výňatek tento článek. Tento článek se vztahuje na Jádro inicializace fáze, Fázi, kdy jádro vytiskne spoustu zpráv o hardwaru v systému. Jádro začíná init těsně poté, co se zobrazí zpráva prohlašovat, že jádro je připojen kořenový souborový systém:

VFS: Mounted root (ext2 souborový systém) readonly.

Brzy poté, uvidíte zprávu o init startování, NÁSLEDOVANÉ systémových zpráv spuštění služby, a nakonec dostanete login prompt nějakého druhu.

POZNÁMKA : On Red Hat Linux, Init poznámka je zřejmé obzvláště, protože to "vítá" vám "Red Hat Linux." Všechny zprávy poté ukázat úspěch nebo neúspěch v závorce na pravé straně obrazovky.

Většina z této kapitoly se zabývá init, protože to je součástí spouštěcí sekvenci, kde máte největší kontrolu.
init

Na tom není nic zvláštního init. Jedná se o software, stejně jako jakýkoli jiný na systému Linux, a zjistíte, že v / sbin spolu s dalšími systémovými binární soubory. Hlavním účelem init je spuštění a zastavení jiných programů v určitém pořadí. Jediné, co musíte vědět je, jak tato sekvence funguje.

Existují různé varianty málo, ale většina linuxových distribucí použijte System V styl popsána zde. Některé distribuce používají jednodušší verze, která se podobá BSD init, ale je nepravděpodobné, že dojde to.

Runlevels

V daném okamžiku na systému Linux, určité základní sada procesů běží. Tento stav stroje se nazývá jeho runlevel, a je označena číslem z 0 přes 6. Systém stráví většinu času STI v jednom runlevelu. Však při odstavování zařízení dolů, init přepnutí do jiné runlevelu s cílem ukončit systémové služby v spořádaně rok a říci jádru zastavit. Yet Another runlevel je pro single-user módu, probereme později.

Nejjednodušší způsob, jak získat handle na runlevelů je zkoumat init konfigurační soubor / etc / inittab. Podívejte se na řádek, jako je následující:

id: 5: initdefault:

Že tato linka znamená, výchozí runlevel na systému 5. Všechny řádky v souboru inittab tuto formu, se čtyřmi polí oddělených dvojtečkou se vyskytují v následujícím pořadí:
# Jedinečný identifikátor (krátký řetězec, například id v předchozím příkladu)
# Použitelné runlevel číslo (čísla)
# Init, která by měla přijmout opatření (v předchozím příkladu, že žaloba je nastavit výchozí runlevel na 5)
# Příkaz k provedení (volitelně)

Neexistuje žádný příkaz k vykonání v předchozím příkladu initdefault Protože příkaz nemá smysl v rámci stanovení výchozí runlevel. Podívejte se trochu dále v inittab, až uvidíte řádek podobný tomuto:

l5: 5: wait :/ etc / rc.d / rc 5

Tato položka aktivuje většinu konfiguraci systému a služeb prostřednictvím * rc. D a init.d adresáře. Že můžete vidět init je nastavena na spuštění příkazu / etc / rc.d / rc 5 Když v runlevelu 5. Čekání akce říká Kdy a jak init spustí příkaz: spuštění rc 5 Při zadání runlevelu 5 jednou, a pak čekat na tento příkaz pro dokončení než dělat něco jiného.

Existuje několik různých akcí v Kromě initdefault a čekat, zejména vztahující se k řízení spotřeby energie, a inittab (5) manuálovou stránku vám řekne vše o nich. Ty, které jste s největší pravděpodobností setkat, je vysvětleno v následujících kapitolách.

respawn

Respawn akce init spustit příkaz způsobí, který následuje, a je-li příkaz dokončí provádění, spustit jej znovu. Budete pravděpodobně vidět něco podobného na tento řádek ve vašem souboru inittab:

1: 2345: respawn :/ sbin / mingetty tty1

Getty programy poskytují přihlásit výzvy. Předchozí linka je na první virtuální konzoli (/ dev / tty1), kterou vidíte-li klávesu ALT nebo CONTROL-ALT-F1 F1. Respawn akce přináší přihlašovací řádek zpět po odhlášení.

ctrlaltdel

V ctrlaltdel akce určuje, co systém dělá, když stisknete CONTROL-ALT-DELETE na virtuální konzoli. Na většině systémů, to je nějaký druh restartu příkazu pomocí příkazu shutdown.

sysinit

Sysinit akce je první věc, kterou init, která by měla běžet, když to nastartuje, před zadáním runlevely.

Jak procesy v runlevelů kdo

Nyní jste připraveni se učit, jak init spustí systémové služby, těsně před tím, než vám umožní přihlásit. Připomeňme tento inittab řádek z Dřívější:

l5: 5: wait :/ etc / rc.d / rc 5

Tato malá linka vyvolá mnoho dalších programů. rc znamená rozběhu, a uslyšíte lidé se odkazují na příkazy jako skripty, programy nebo službami. Tak, kde jsou tyto příkazy, vlastně je?

Pro runlevelu 5, v tomto příkladu, příkazy mají pravděpodobně buď v / etc / rc.d / rc5.d nebo / etc / rc5.d. 1 runlevel používá rc1.d runlevel 2 rc2.d použití, a tak dále. By se vám mohlo nalézt následující položky v rc5.d adresáři:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

Rc 5 příkaz spustí programy v tomto runlevelu adresáři spuštěním příkazů následujících:

S10sysklogd home
S12kerneld home
S15netstd_init home
S18netbase home

S99sshd home

Všimněte si, že počáteční tvrzení v každém příkazu. S v prostředku název příkazu, který by měl běžet na příkaz Start režimu, a počet (00 přes 99) určuje, kde v pořadí rc spustí příkaz.

* Rc. D příkazů je Obvyklé Start Programy, že Shell skripty v / sbin nebo / usr / sbin. Normálně, můžete zjistit, co jeden z příkazů skutečně se při pohledu na scénář s menším nebo pager Další programu.

Můžete některou z těchto služeb začít rukou. Například, pokud chcete spustit httpd webového serveru software ručně, spusťte S99httpd domů. Podobně, pokud budete někdy potřebovat zabít jednu ze služeb-li stroj zapnutý, můžete spustit příkaz v RC *. D adresář s brzdovou argumentu (S99httpd zastávka, například).

Někteří * rc. D adresáře, které obsahují příkazy začínají K (pro "zabíjet" nebo režimu zastavení). V tomto případě, rc spustí příkaz s brzdovou argumentem místo toho, aby domácí. Jste s největší pravděpodobností setkat K příkazů v runlevels Vypnout systém.

Přidávání a odebírání služeb

Chcete-li přidat, odstranit, nebo upravit služby v rc adresářů *. D, co potřebujete, aby se blíže podívat na soubory uvnitř. Dlouhý seznam ukazuje strukturu, jako je tento:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase

Příkazy v roce rc *. D adresář je vlastně symbolické odkazy na soubory v adresáři init.d rok, obvykle v / etc nebo / etc / rc.d. Tyto odkazy OBSAHOVAT linuxové distribuce tak, aby mohli používat stejné spouštěcí skripty pro všechny adresáře. Tato úmluva je v žádném případě požadavku, ale to je organizační často trochu jednodušší.

Chcete-li zabránit jeden z příkazů v init.d adresáři spuštění v určitém runlevelu, možná si myslíte, odstranění symbolický odkaz v VHODNÉ RC *. D adresáře. To funguje, ale pokud uděláte chybu a někdy potřebovat dát odkaz zpět na místo, můžete mít potíže s Vzpomínka na přesný název odkazu. Proto byste neměli odstranit odkazy v * RC D adresáře, ale spíše, přidejte podtržítko (_) na počátku název odkazu, jako je tento.:

mv S99httpd _S99httpd

Při startu, rc ignoruje _S99httpd Protože to nezačíná S nebo K. Navíc, původní název je stále zřejmé, a máte rychlý přístup k příkazu, pokud jste v nouzi a potřebujete jej spustit ručně.

Chcete-li přidat službu, musíte vytvořit skript jako ostatní v init.d adresáře a pak vytvářejí symbolický odkaz ve správném RC *. D adresáře. Nejjednodušší způsob, jak napsat skript je zkoumat skripty již v init.d, vytvořit kopii jednoho, že jste pochopili, a upravit kopii.

Při přidávání služby, ujistěte se, že si vyberete ten rok VHODNÉ jako v bootovací sekvenci spustit službu. Pokud služba spustí příliš brzy, může to fungovat, vzhledem k závislosti na jinou službu. Pro non-základních služeb, většina systémů správců dává přednost čísla v 90s, po většině ze služeb, které vačky se systémem.

Obvykle distribucí Linuxu s příkazem k povolení a zakázání služby v * RC. D adresáře. Například, v Debianu, příkaz update-rc.d, a Red Hat Linux, příkaz chkconfig. Grafická uživatelská rozhraní je také k dispozici. Použití POMÁHÁ Tyto programy udržet spuštění adresáře konzistentní a pomáhá při upgrade.

TIP: Jedním z nejčastějších problémů při instalaci Linuxu je nesprávně nakonfigurováno rok serveru XFree86 To šlehne zapnutí a vypnutí, takže systém nepoužitelný na konzole. Chcete-li zastavit toto chování, bota v single-user módu a změnit svůj runlevel nebo runlevel služby. Podívejte se na něco, co obsahuje XDM, GDM nebo KDM, ve vašem rc *. D adresáře, nebo váš / etc / inittab.

Ovládání init

Občas, co potřebujete, aby init trochu kop říct, že přejít runlevely, znovu přečíst souboru inittab, nebo jen k vypnutí systému. Vzhledem k tomu, init je vždy první proces v systému, STI ID procesu je vždy 1.

Můžete ovládat init s celerem. Například, pokud chcete přejít na runlevelu 3, použijte tento příkaz:

telinit 3

Při přepínání runlevely, init se pokusí zabít nějaké procesy, které nenajdeme v souboru inittab pro nového runlevelu. Proto, měli byste být opatrní o změně runlevely.

Když potřebujete přidat nebo odebrat respawning zaměstnání nebo provést jiné změny souboru inittab, musíte říct init o změně a způsobit, že re-číst soubor. Někteří lidé používají kill-HUP 1 říct init jak to udělat. Tato tradiční metoda funguje na většině verzí Unixu, tak dlouho, jak budete psát správně. Nicméně, můžete také spustit tento telinit příkaz:

telinit q

Můžete také použít telinit s přepnout do single-user módu.

Vypínání

Také init kontroly, jak systém vypne a restartuje. Správný způsob, jak vypnout Linux stroj je použití příkazu shutdown.

Existují dva základní způsoby, jak používat vypnutí. Pokud zastaví systém, to vypne stroj dolů a udržuje ho. Chcete-li, aby se stroj zastavil ihned, použijte tento příkaz:

shutdown-h now

Na většině moderních strojích s přiměřeně posledních verzí Linuxu, zastavení přeruší napájení přístroje. Můžete také restartovat počítač. Pro restartování počítače, use-r INSTEAD of-h.

Vypnutí proces trvá několik sekund. Nikdy byste neměli obnovit nebo vypnout počítač, v této fázi.

V předchozím příkladu, nyní je čas vypnout. Tento argument je povinný, ale je tu mnoho způsobů, jak Určení ji. Pokud chcete, aby přístroj jít dolů někdy v budoucnu, jedním ze způsobů je použití + n, kde n je počet minut vypnutí čekání Předtím ITS by měly fungovat. Další možnosti, podívejte se na vypnutí (8) manuálové stránce.

Chcete-li, aby systém restartuje 10 minut, spusťte tento příkaz:

shutdown-r + 10

Na Linuxu, vypnutí upozorní kdokoliv přihlášený na tom, že stroj klesá, ale to dělá málo skutečnou práci. Pokud zadáte jiné době než nyní, shutdown Called Vytvoří soubor / etc / nologin. Pokud je tento soubor přítomen, systém zakazuje přihlášení kýmkoli kromě superuživatele.

Při vypnutí systému čas konečně dorazí, shutdown řekne init přejít na runlevelu 0 k zastavení a runlevelu 6 pro restartu. Když init vstoupí runlevelu 0 nebo 6, všechny Následující události se jako, což je možné ověřit při pohledu na skriptů uvnitř rc0.d a rc6.d:

1. init zabije každého procesu, který je v jeho silách (jako by při přechodu k jinému runlevelu).

# Počáteční rc0.d / rc6.d příkazy spustit, zamykání systémové soubory na místo a dělat jiné přípravky pro vypnutí.
# Následující rc0.d / příkazy odpojit všechny souborové systémy jiných rc6.d než kořenový.
# Dále rc0.d / příkazy remount kořenový souborový systém rc6.d pouze pro čtení.
# Stále více rc0.d / rc6.d příkazy zapisovat všechny uložené na ven do souborového systému s synchronizačního programu.
# Konečné rc0.d / rc6.d příkazy říct, že jádro restartovat nebo zastavit s restartem, zastavení nebo vypínání programu.

Restartu a zastavení programů chovat odlišně pro každou runlevelu, případně vyvolat zmatek. Ve výchozím nastavení, Tyto programy volání shutdown s-r nebo-h možnosti, ale pokud je systém již při zastavení nebo restart runlevelu, programy říct, že jádro se vypnout ihned. Pokud opravdu chcete zavřít zařízení se ve spěchu (bez ohledu na jakékoliv poškození z nesourodé vypnutí je to možné), použijte volbu-f.

Zanechat komentář

Tyto stránky používají Akismet k omezení spamu. Zjistěte, jak jsou vaše údaje komentářů zpracovávány.