Webchat IRC #linuxon
Piatok, 18. máj 2012 Meniny majú: Dnes: Viola Zajtra: Gertrúda

LinuxON.sk - Linux a OpenSource portál

Veľkosť písma

Šírka

Nastavenia

Ako to funguje - štart systému Linux

  • PDF

Ako to funguje

Každý používateľ musí raz za čas vyriešiť nejaký problém a problémy sa omnoho lepšie riešia, keď aspoň približne viete ako to, čo používate, funguje. Cieľom tohto textu je poskytnúť informácie a tom, čo kde čo robí a s čím spolupracuje a umožniť tak lepšiu diagnostiku problému.

 




Bootloader

Linux (myslené jadro) neobsahuje tzv. zavádzač.. Na to je potrebná externá aplikácia, ktorá dokáže zaviesť operačný systém, napr. GRUB alebo LILO. Keďže všetky moderné distribúcie (okrem Slackware) používajú GRUB, budeme sa zaoberať tým, zatiaľ len verziou 1.

GRUB pracuje v istých etapách, po anglicky "stages".

 

Stage 1

Keď BIOS skontroluje všetko, čo má, predá riadenie kódu uloženému v MBR (Master Boot Record) zariadenia (disk, disketa, usb, ...), ktoré ma nastavené ako "First boot device". MBR označuje prvých 512 bajtov v tomto zariadení. Vzhľadom na nedostatok miesta kód v MBR len predá riadenie do stage1.5, ktorá opäť len zavedie stage2.

Keďže Windows po inštalácií prepisuje MBR, je dobré mať aktuálnu zálohu MBR. Najjednoduchšie je použiť príkaz dd a to nasledovne:

dd if=/dev/hdx of=zaloha.mbr bs=512 count=1

V súbore zaloha.mbr teraz máte zálohu. Po prepísaní MBR potom vrátite pôvodný stav nasledovne:

dd of=/dev/hdx if=zaloha.mbr bs=512 count=1

Pozor, MBR obsahuje aj tabuľku partícií! Pri každej zmene usporiadania disku si urobte novú zálohu. Ak ste to z nejakých príčin neurobili, nasledovaný príkaz vynechá obnovu tabuľky partícií a obnoví len bootloader.

dd of=/dev/hdx if=zaloha.mbr bs=446 count=1

Stage 2

V tejto etape GRUB nájde konfiguračný súbor (väčšinou /boot/grub/menu.lst) a na základe neho vytvorí tabuľku s výberom operačných systémov. Ak žiadny nenájde, tak zobrazí len príkazový riadok, z ktorého sa dá spustiť ľubovoľný systém a pracuje s rovnakými príkazmi ako konfiguračný súbor. Potom, čo užívateľ zvolí OS, ten sa zavedie tak, ako je uvedené v konfiguračnom súbore, resp. ako užívateľ určil v príkazovom riadku. Tu končí práca GRUB-u a riadenie už prevezme zvolený kernel (jadro).

Jadro

Aj bootovanie jadra sa dá rozdeliť do dvoch častí.

Načítanie

Jadro sa v prvom rade musí "rozbaliť", lebo je skomprimované (zlib, bzip2, lzma). Potom, čo sa rozbalí, obraz sa nahrá do pamäti a predá sa mu riadenie.

Ak ste sa pozreli do svojho konfiguračného súboru /boot/grub/menu.lst, zrejme ste zazreli aj riadok začínajúci initrd. Skratka označuje "Initial Ramdisk".
Initrd je akýsi základný root filesystem (súborový systém, ďalej ako fs), ktorý existuje len v pamäti. Takýto fs sa potom používa na zavedenie modulov potrebných na to, aby bol systém schopný naštartovať. Napr. povedzme, že máte IDE disk, ale ovládače na IDE máte zakompilované ako modul. Potom systém naštartujete len s pomocou initrd, ktorý bude obsahovať insmod a nevyhnutné knižnice a zavedie potrebný modul. Initrd sa nespúšťa hneď, zavedie sa do pamäti spolu z rozbaleným jadrom, kde čaká kým ho jadro spustí.

Štart

Potom, čo je rozbalené jadro nahraté v pamäti spolu z voliteľným ramdiskom kernel v prvom rade inicializuje všetky veci spojené s pamäťou a jej správou a deteguje CPU. To bola tá hardwarovo najzávislejšia časť. Potom nasledujú tie hardwarovo menej závislé veci a tých je naozaj mnoho (stačí sa pozrieť do zdrojových kódov ./init/main.c), preto vyberám len niektoré.

  • analyzuje parametre, ktoré mu boli dané pri boote (v /boot/grub/menu.conf)
  • inicializuje prerušenia používané na komunikáciu s hardware
  • inicializuje plánovač procesov
  • inicializuje VFS (virtual filesystem - rozhranie ku všetkým fs v systéme)
  • ak je použitý initrd, pripojí ho ako rootfilesystem (/)
  • inicializuje signály
  • inicializuje súborový systém proc, ak je použitý
  • inicializuje všetky ovládače

Práca jadra končí pri vytvorení procesu init (/sbin/init).

Init

Init je prvý spustený proces a má PID 1. Po spustení initu mu jadro predá všetko riadenie. Init je samozrejme proces ako každý iný, takže sa mu dajú posielať signály, teda sa dá aj zabiť. Chová sa podľa vopred určených pravidiel, ktoré mu nastavíme v konfiguračnom súbore /etc/inittab. Môže bežať v 7 úrovniach. V poradí od 0 do 6 sú to:

  • Vypnutie systému,
  • jednoužívateľský režim,
  • 3 úroveň sa nepoužíva
  • viac užívateľský režim
  • 4 sa opäť nepoužíva
  • režím X11 (grafický)
  • reštartovnie systému.
To, v akej úrovni init pobeží, nastavíme v spomínanom /etc/inittab. V tomto súbore sú aj definované skripty (väčšinou shell skripty), ktoré sa spúšťajú pri prechode na nejakú úroveň. Tieto skripty sa starajú o spustenie všetkých démonov potrebných na plnohodnotnú prácu zo systémom (hal, udev, dbus, ...), nastavenie siete a pod. Väčšina init-ov je nakonfigurovaná tak, aby po spustení všetkých nutných skriptov spustil program gettty (v prípade úrovne 5 grafický login manager), ktorý zobrazí výzvu na meno a heslo užívateľa. Potom sa spustí program login a užívateľ je prihlásený.

Konfigurácia

Spomínaný súbor /etc/inittab určuje aká úroveň behu bude východzia a aké skripty sa majú spúšťať pri prechode do jednotlivých úrovní. Vyplatí sa poznať jeho formát aj keď je celkom intuitívny. Každý riadok v ňom má nasledujúci formát

id:úroveň behu:akcia:proces

id je jednoznačný identifikátor danej položky, do poľa úroveň behu môžeme za sebou napísať čísla úrovní, pre ktoré táto položka platí, akcia definuje, čo sa má robiť s procesom danom v poslednom poli. Akcií je mnoho (vyskúšajte man inittab).
Najpoužívanejšie sú:

  • initdefault - definuje východziu úroveň behu
  • sysinit - proces sa spúšťa vždy pri štarte systému, nie je potrebné definovať úroveň behu
  • wait - proces sa spustí raz pri prechode danej úrovne a init počká, kým sa skončí
  • respawn - proces sa spustí a znova bude spustený vždy, keď skončí
  • once - proces sa spustí raz pri prechode do danej úrovne

Ak stále nerozumiete, o čo sa ide, nasledujúci príklad konfiguračného súboru vám to ozrejmí (jedná sa o defaultný súbor archlinuxu) Riadky začínajúce # sú komentáre.

# východzia úroveň behu 3 (Multiužívateľský režim)
id:3:initdefault:

# pri štarte spusti skript /etc/rc.sysinit
rc::sysinit:/etc/rc.sysinit

# pri prechode do úrovne 1 (môže sa označiť aj ako S - Single user mode) spusti /etc/rc.single a počkaj, kým skončí
rs:S1:wait:/etc/rc.single

# pri prechode do úrovne 2, 3, 4 alebo 5 spusti /etc/rc.multi a počkaj, kým # skončí
rm:2345:wait:/etc/rc.multi

# pri prechode do úrovne 0 (vypnutie systému) alebo 6 (reštart systému) spusť /etc/rc.shutdown a počkaj, kým skončí

rh:06:wait:/etc/rc.shutdown

# pri prechode do úrovne 1 spusti /sbin/sulogin -p
su:S:wait:/sbin/sulogin -p

# pri prechode do úrovní 2345 spusť /sbin/agetty -8 38400 tty* linux (alternative getty) a po jeho ukončení ho spusť znova
c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 38400 tty2 linux
c3:2345:respawn:/sbin/agetty -8 38400 tty3 linux
c4:2345:respawn:/sbin/agetty -8 38400 tty4 linux
c5:2345:respawn:/sbin/agetty -8 38400 tty5 linux
c6:2345:respawn:/sbin/agetty -8 38400 tty6 linux

# pri stlačení ctraltdel pockaj, restartuj pocitac
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# Pri prechode do úrovne 5 (X11) spusť vybraného login managera a po jeho ukončení ho spusť znova

#x:5:respawn:/usr/sbin/gdm -nodaemon
#x:5:respawn:/usr/bin/kdm -nodaemon
#x:5:respawn:/usr/bin/slim >& /dev/null



Úrovne init sa dajú prepínať aj za behu. Použijeme na to program telinit (v skutočnosti je to len link na init). Telinit berie jeden povinný argument a to úroveň behu, do ktorej má init prejsť a voliteľný argument -t, ktorým nastavíme počet sekúnd, za ktoré sa má akcia vykonať. Napr. počkáme 5 sekúnd a prejdeme do úrovne 0. Pozor! Toto vám vypne systém :).

telinit -t 5 0

Takto priamo sa systém vypína málokedy, väčšinou sa používa program shutdown. Výsledok je ale viac menej rovnaký. Pri prechode z úrovne do úrovne init najprv spustí skript definovaný v /etc/inittab (alebo nič) a neukončeným procesom pošle signál SIGTERM (požiada ich, aby sa ukončili). Neukončené procesy potom zabije signálom SIGKILL.

 

 

Trojfázový štart OS Linux.


Záver

Sme na konci. Dúfam, že tieto informácie vám budú užitočné a zas o niečo lepšie poznáte svoj systém. Články "Ako to funguje" sa budem snažiť písať častejšie a pridať sa môže ktokoľvek, ide o to, ja tebe, ty mne. Dovtedy však ostávam s pozdravom.

Ako to funguje - Správa Hardware

Publikované: 19.11.2009 13:11 od joka #2822
Pekný článok

Mám otázku, ale skôr ako ju položím, tak trocha opíšem prostredie, ktorého sa to týka.

HDD: 2xSATA 1xIDE
BIOS: Boot nastavený na prvý SATA
SATA 1: 2 partície - 1 NTFS VISTA - 2 NTFS DATA
SATA 2: 3 partície - 1 NTFS DATA - 2,3 UBUNTU (myslím že SWAP a HOME+ROOT a možno BOOT neviem presne )
IDE: 1 partícia - NTFS DATA

Momentálny stav je GRUB (UBUNTU) na SATA 1

Toto je všetko OK. Čo, ale v tomto prípade:
SATA 1 - BOOT WINDOWS (MBR aj BOOT nastavené ako po inštalácií Win)
SATA 2 - partícia 1(primary) NTFS DATA, part2(primary) - BOOT (ext2), part3(logical) - Linux Swap, part4(log) - root (ext4), part5(log) - home (ext4)

BOOT Win na SATA 1 je nastavený cez boot.ini (utilita Ease BCD) na spúšťanie Win Vista a opálenie GRUB na inej partícií.

Problém je ten, že pokiaľ nainštalujem GRUB na SATA 2 (MBR), tak ho neviem odpáliť cez boot.ini. Pokiaľ ho nainštalujem na part1 SATA2, tak ho nasviť viem, ale sprzdní mi part1 tak, že Win ju nevidia (je poškodená).

Celý tento problém nastava pri inštalácií ArchLinuxu s tým, že partície robím ručne pred inštaláciou cez gparted. Pokiaľ opravím chybnú partíciu, tak mi to odpáli Grub....

Ide mi o to, aby som si neprepísal na SATA 1 MBR Grubom, ale aby tam zostal MBR z Win Vista.

Dôvod je ten, že ide o domáci desktop, kde 90% sa robí vo Win a zbytok, keď ma pustia, tak sa dostanem k Linuxu.

Teraz tam fičím na Ubuntu, ale chcem tam ArchLinux.

Tá istá situácia na NB s jedným SATA fungovala bez problémov, ale teraz rozmýšľam, že netuším už kde sa mi Grub nainštaloval

Táto moja konfigurácia diskov má ešte ďalšiu pikošku, Ubuntu dáva Grub na SATA1 (hd0), ale openSuse na IDE1 (tiež ako hd0)

Nevadí
Publikované: 19.11.2009 17:34 od michal6103 #2829
Pekny clanok. Len by som chcel doplnit, ze v distribuciach aako Debian, Ubuntu uz inittab nenajdete. Namiesto sysvinit, pouzivaju upstart. Ktory je zalozeny na udalostiach.

Konfiguraky by mali byt kompatibilne a pokial ste mali sysvinit scripty tak vam budu fungoivat aj pod upstartom.

Viac o teme napriklad na wiki.ubuntu.com/FoundationsTeam/BootPerf...e/DebianUbuntuSprint alebo upstart.ubuntu.com/getting-started.html

Vacsina konfigurakov je v /etc/init a /etc/init.d/
Publikované: 19.11.2009 17:39 od xchg #2830
michal6103 napísal:
Pekny clanok. Len by som chcel doplnit, ze v distribuciach aako Debian, Ubuntu uz inittab nenajdete. Namiesto sysvinit, pouzivaju upstart. Ktory je zalozeny na udalostiach.

Konfiguraky by mali byt kompatibilne a pokial ste mali sysvinit scripty tak vam budu fungoivat aj pod upstartom.

Viac o teme napriklad na wiki.ubuntu.com/FoundationsTeam/BootPerf...e/DebianUbuntuSprint alebo upstart.ubuntu.com/getting-started.html

Vacsina konfigurakov je v /etc/init a /etc/init.d/


Jasné, ja som vedel ze som nieco zabudol spomenut. V /etc/init a init.d niesú konfiguráky ale spomínané skripty spúštané pri prepínaní úrovní, boote a pod.
Publikované: 19.11.2009 17:42 od xchg #2831
joka napísal:
Pekný článok

Mám otázku, ale skôr ako ju položím, tak trocha opíšem prostredie, ktorého sa to týka.

HDD: 2xSATA 1xIDE
BIOS: Boot nastavený na prvý SATA
SATA 1: 2 partície - 1 NTFS VISTA - 2 NTFS DATA
SATA 2: 3 partície - 1 NTFS DATA - 2,3 UBUNTU (myslím že SWAP a HOME+ROOT a možno BOOT neviem presne )
IDE: 1 partícia - NTFS DATA

Momentálny stav je GRUB (UBUNTU) na SATA 1

Toto je všetko OK. Čo, ale v tomto prípade:
SATA 1 - BOOT WINDOWS (MBR aj BOOT nastavené ako po inštalácií Win)
SATA 2 - partícia 1(primary) NTFS DATA, part2(primary) - BOOT (ext2), part3(logical) - Linux Swap, part4(log) - root (ext4), part5(log) - home (ext4)

BOOT Win na SATA 1 je nastavený cez boot.ini (utilita Ease BCD) na spúšťanie Win Vista a opálenie GRUB na inej partícií.

Problém je ten, že pokiaľ nainštalujem GRUB na SATA 2 (MBR), tak ho neviem odpáliť cez boot.ini. Pokiaľ ho nainštalujem na part1 SATA2, tak ho nasviť viem, ale sprzdní mi part1 tak, že Win ju nevidia (je poškodená).

Celý tento problém nastava pri inštalácií ArchLinuxu s tým, že partície robím ručne pred inštaláciou cez gparted. Pokiaľ opravím chybnú partíciu, tak mi to odpáli Grub....

Ide mi o to, aby som si neprepísal na SATA 1 MBR Grubom, ale aby tam zostal MBR z Win Vista.

Dôvod je ten, že ide o domáci desktop, kde 90% sa robí vo Win a zbytok, keď ma pustia, tak sa dostanem k Linuxu.

Teraz tam fičím na Ubuntu, ale chcem tam ArchLinux.

Tá istá situácia na NB s jedným SATA fungovala bez problémov, ale teraz rozmýšľam, že netuším už kde sa mi Grub nainštaloval

Táto moja konfigurácia diskov má ešte ďalšiu pikošku, Ubuntu dáva Grub na SATA1 (hd0), ale openSuse na IDE1 (tiež ako hd0)

Nevadí


Mierne som sa stratil, ale ak som vyrozumel tak tvoj problem je len ze archlinux ti prepisuje MBR na disku a chces tam mat zavadzac z Visty. Pri instalacii archlinuxu sa da vybrat ci chces instalovat GRUB alebo nie. Otazka je preco by si tak robil keby si potom nemohol ten arch nabootovat (mozno nejaka sputacia disketa/usb ..). Kazdopadne nie je problem tam ten GRUB nechat nainstalovat a potom v /boot/grub/menu.conf pridat Vistu do vyberu os pri starte.

Tomas, diky za pekne obrazky . Ten úvod sa niekde stratil či som ho tam zabudol dať? :-/ Pridávam ho tam ak to bol umysel ho s tade vymazat tak povedz a pojde het
Publikované: 19.11.2009 17:56 od joka #2833
Mierne som sa stratil, ale ak som vyrozumel tak tvoj problem je len ze archlinux ti prepisuje MBR na disku a chces tam mat zavadzac z Visty.

No v tom by sa stratil každý Áno chcem zachovať zavádzač Vista, s tým, že používam úpravu boot.ini súboru z bootu Windows. Je jasné, že keď tam plácne inštalačka Grub, tak si zmení MBR.


Pri instalacii archlinuxu sa da vybrat ci chces instalovat GRUB alebo nie. Otazka je preco by si tak robil keby si potom nemohol ten arch nabootovat (mozno nejaka sputacia disketa/usb ..).

Áno. Presne. Situácia v cielenom stave vyzerá nasledovne: Boot Vista, podľa boot.ini sa zobrazí výber 1. Vista, 2. Grub Arch.
Kazdopadne nie je problem tam ten GRUB nechat nainstalovat a potom v /boot/grub/menu.conf pridat Vistu do vyberu os pri starte.

Áno. To viem. Toto nie je problém. Ten nastave vtedy, keď zruším Linux a Grub začne ukazovať do prázdna a nenabootuje nič. Preto chcem zachovať boot s Windows (áno viem bootrec /fixboot a bootrec /fixmbr z inštaláčného DVD Vista na vrátenie Windows Boot).

Mne išlo o to, že pokiaľ Grub nainštalujem na existujúcu NTFS partíciu, tak jej zlikviduje tabuľku a partícia nie je z Win vidieť.

Otázka preto znie, môžem Grub nainštalovať na linux partíciu boot(ext2), root(ext4) alebo home(ext4)?
Publikované: 19.11.2009 18:04 od trebor #2834
Nainštalujem ten grub do particii s Archom. Tak som kedysi šachoval s mandrivou mal som jedno lilo hlavne a odkazoval som len na patricie kde čakali ďalšie lila . Vtedy virtualbox ešte nebol. Často som menil inštalacie a tak sa mi nechcelo stále zapisovať do hlavného Lila.
Publikované: 19.11.2009 18:27 od xchg #2835
Nevidím dôvod prečo by mal grub poskodzovat tabulku partici. Ako tam ten grub instalujes? A mohol by si hodit vypis "fdisk -l" nech sa potom lepsie formuluju prikazy?
Publikované: 19.11.2009 19:07 od joka #2836
teraz to nemám tak nainštalované, ale naozaj mi to zhodilo partíciu NTFS, musel som ju dať opraviť aby som sa na ňu dostal, bola tam nejaká chyba v nastavení partície. Chystám sa to robiť znova, takže to skúsim dať na paríciu boot(ext2) alebo root(ext4) a uvidím ako sa to bude chovať.

Inštalácia grub bola robená štandartne inštalátorom Arch, akurát som zmenil cieľ inštalácie na iný ako mal pôvodne nastavený.

Napríklad pri Ubuntu s Grub 2 (1.97 beta ) si to zase sám po update inicializuje a keď napríklad mám Vistu ako default prvú, tak to rozbije a musím to ručne meniť v grub.cfg. V diskusiách hovorili o nejakom default nastavení v etc, kukal som to, ale fakt som z toho jeleň.... zlatý menu.lst
Publikované: 19.11.2009 19:17 od xchg #2837
Preco to instalujes k samostatnym particiam? Ved to zapis do mbr disku. Nepametam si instalaciu archu tak dobre ale ked budes volit ciel tak daj napr. ako ciel /dev/hdb nie /dev/hdb1(2,3,4, ...). Teda aspon myslim ze tvoj problem chapem spravne . Zriekam sa akejkolvek zodpovednosti za stratu dat
Publikované: 19.11.2009 19:22 od joka #2838
to som presne skúšal, dať do do MBR na SATA2 disk. Problém bol ten, že to nevedel zase odtiaľ naštartovať Windows boot (utilita Easy BCD), win to vie ďalej odpáliť iba z partície. Je to asi dané tým, že už MBR raz nabootoval, takže to chce len presmerovať ďalej.

Jasne, že môžem ten Grub hodiť na SATA1 do MBR a pridať tam Vista, to nie je problém, len to presne nechcem
Publikované: 19.11.2009 20:15 od xchg #2839
Nepoznám NTLDR ale čo tak ten grub hodiť normálne do tej MBR na SATA2 a nastaviť jej bootflag? Možno to je dôvod prečo je ten microsoftacky zavadzac nechce bootovat.
Publikované: 19.11.2009 22:35 od TomasHanzel #2845
Že sa Vám pletiem do témy ale odpovedám na xchg.
Tomas, diky za pekne obrazky . Ten úvod sa niekde stratil či som ho tam zabudol dať? :-/ Pridávam ho tam ak to bol umysel ho s tade vymazat tak povedz a pojde het

V pohode, chcel som nejak oživiť článok od textu. ÚVod - ako som dostal, tak bolo, nič mi nechýbalo a nezdalo sa žeby som stratil. :-/

Páni, viem že téma Vám sedí na riešenie, ale nabudúce prosím držte sa špecifikácie problému. Zaradiť do sekcie vo fóre a tam riešiť, pretože komentáre ku článku patria článku a nie riešeniu problému.Ešte si to doriešte, potom to presuniem.

Za pochopenie vopred ďakujem.
Publikované: 19.11.2009 22:40 od joka #2846
xchg napísal:
Nepoznám NTLDR ale čo tak ten grub hodiť normálne do tej MBR na SATA2 a nastaviť jej bootflag? Možno to je dôvod prečo je ten microsoftacky zavadzac nechce bootovat.


No neviem neviem, ale možné to je, že to ignoruje kôli tomu. Keď sa k tomu dostanem, skúsim.

Ďakujem.

Navigácia Články Softvér Ako to funguje - štart systému Linux
Internetový portál pre užívateľov, fanúšikov, záujemcov operačného systému linux a voľne šíriteľného softvéru. Viac... | Podporte nas... | Reklama Partneri: www.megainzercia.eu www.arianesport.sk
LinuxOn.sk IRC Buďte s nami aj na IRC. #linuxon@irc.freenode.net
Ako nato sa dočítate tu alebo použite IRCwebchat
 Hostia: 857