Webchat IRC #linuxon
Streda, 8. február 2012 Meniny majú: Dnes: Zoja Zajtra: Zdenko
Slovak English French German Hungarian Italian Polish Russian Spanish

LinuxON.sk - Linux a OpenSource portál

Veľkosť písma

Šírka

Nastavenia
Vitajte, návštevník
Užívateľské meno Heslo: Pamätať si ma

Ako to funguje - štart systému Linux
(1 prehliadajúci) (1) hosť
  • Strana:
  • 1
  • 2
  • 3

TÉMA: Ako to funguje - štart systému Linux

Ako to funguje - štart systému Linux 19.11.2009 12:55 #2821

  • xchg
  • NEPRÍTOMNÝ
  • Platinum Boarder
  • Príspevky: 463
  • Karma: 23
** Diskusia k článku: Ako to funguje - štart systému Linux **

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, s 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 jedná 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.


Oliver Kindernay - xchg

Re:Ako to funguje - štart systému Linux 19.11.2009 13:11 #2822

  • joka
  • NEPRÍTOMNÝ
  • Senior Boarder
  • Sabayon
  • Príspevky: 64
  • Karma: 1
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í
------------------------------
joka

Re: Ako to funguje - štart systému Linux 19.11.2009 17:34 #2829

  • michal6103
  • NEPRÍTOMNÝ
  • Nováčik
  • Príspevky: 12
  • Karma: 4
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/

Re: Ako to funguje - štart systému Linux 19.11.2009 17:39 #2830

  • xchg
  • NEPRÍTOMNÝ
  • Platinum Boarder
  • Príspevky: 463
  • Karma: 23
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.

Re:Ako to funguje - štart systému Linux 19.11.2009 17:42 #2831

  • xchg
  • NEPRÍTOMNÝ
  • Platinum Boarder
  • Príspevky: 463
  • Karma: 23
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
Posledná úprava: 19.11.2009 17:45 Napísal xchg.

Re:Ako to funguje - štart systému Linux 19.11.2009 17:56 #2833

  • joka
  • NEPRÍTOMNÝ
  • Senior Boarder
  • Sabayon
  • Príspevky: 64
  • Karma: 1
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)?
------------------------------
joka

Re:Ako to funguje - štart systému Linux 19.11.2009 18:04 #2834

  • trebor
  • NEPRÍTOMNÝ
  • Administrator
  • SABAYON 64bit KDE
  • Príspevky: 266
  • Karma: 16
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.
Tvorba internetových stránok - redakčný systém Joomla - voľnešíriteľný softvér.

Re:Ako to funguje - štart systému Linux 19.11.2009 18:27 #2835

  • xchg
  • NEPRÍTOMNÝ
  • Platinum Boarder
  • Príspevky: 463
  • Karma: 23
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?
  • Strana:
  • 1
  • 2
  • 3
Doba nahrávania stránky: 0.53 sekúnd
Navigácia Forum
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
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: 1310