Debiani alglaadimine

Allikas: Kuutõrvaja
Redaktsioon seisuga 4. aprill 2009, kell 15:58 kasutajalt Imre (arutelu | kaastöö) (initrd)

Sissejuhatus

Arvuti, õieti operatsioonisüsteemi kasutamine algab arvuti käivitamisega, tavaliselt toite sisselülitamise teel, seejärel toimub operatsioonisüsteemi nn alglaadimine (ingl. k. booting, bootup, boot) ja lõpuks saab kasutaja süsteemi sisse logida ja hakata arvutit nö tavapärasel viisil kasutama.

Käesolevas tekstis on kirjeldatud seda järgnevust, mille arvuti läbib alglaadimisel

  • toite sisselülitamise järel omandab kontrolli riistvaraline BIOS
  • BIOS käivitab bootloader'i (nt GRUB)
  • GRUB käivitab tuuma ja laadib ramdiski
  • ramdiski annab juhtimise üle operatsioonisüsteemi programmile init
  • operatsioonisüsteemi init käivitab süsteemis protsessid
  • süsteem on kasutamiseks valmis (nt saab kasutaja sisse logida)

Kuigi Debiani kasutamine ei eelda otseselt kasutaja sekkumist alglaadimise protseduuri ja sündmused toimuvad automaatselt, aitab alglaadimisel toimuvatest sündmustest arusaamine paramini tulla toime nt sellistel juhtumitel

  • süsteemi automaatne alglaadimine on tarvis peatada enne lõpulejõudmist (nt millegi kontrolliks soovitakse peatuda enne operatsioonisüsteemi init programmi käivitamist)
  • operatsioonisüsteem on kopeeritud teisele riistvarale kus ta ei käivitu automaatselt (tõenäoliselt on põhjuseks, et ramdisk ei laadi kõvaketta kasutamiseks vajalikke mooduleid)

BIOS

Alglaadur

Alglaaduri (ingl. k. bootloader) ülesanne on laadida sobivate parameetritega operatsioonisüsteemi tuum, st käivitada operatsioonisüsteem. Levinud on mitmeid erinevad alglaadurid, Debiani paigaldamisel pakutakse kasutajale valikut paigaldada GRUB, aga Debiani saab käivitada ka teiste alglaaduritega, nt LILO sh alglaadida võrgust.

Alglaadur GRUB koosseisu kuulub mitu komponenti ja alglaaduri töö toimub mitmeastmeliselt

  • esmalt laadib BIOS alglaaduri nn esimene taseme (ingl. k. stage 1) kõvaketta alguses paiknevalt MBR'ilt (ingl. k. Master Boot Record); esimese taseme laadimise järel kasutajal tavaliselt ei ole veel võimalik sekkuda, automaatselt järgneb suundumine teise taseme juurde; selleks loeb esimene taseme alglaadur alglaaduri paigaldamisel kindlaks määratud kohast kõvakettal alglaaduri teise taseme (ingl. k. stage 2); teise taseme paiknemine on kirjas MBR'is ning on määratud nö füüsilise sektori asukohaga, mitte kasutades failisüsteemi mõisteid, kuna esimene tase ei oska kasutada failisüsteemi
  • teise taseme laadimise järel on kasutajal ees /boot/grub/menu.lst faili alusel genereeritud menüü, kust saab teha edasisi valikuid; oluline on tähele panna, et teise taseme juures on alglaaduril oskus kasutada enamlevinud failisüsteeme, sh ext3; teise taseme töö tulemusena saab kasutaja määrata millist tuuma ja ramdiski ta kasutama hakkab ning näidata tuuma juures erinevaid parameetreid (reeglina juurfailisüsteemi asukoha)
  • alglaadur annab juhtimise üle operatsioonisüsteemi tuumale, laaditakse tuum; siinkohal on oluline, et kuni tuuma laadimisele eelnenud perioodil olid kasutuses nn BIOSi seadmed, nüüd kontrollib seadmeid operatsioonisüsteemi tuum (ja tuuma moodulid); sellise asenduse tulemusena võib vahel esineda nähtus, kus kuni tuuma laadimiseni töötas USB klaviatuur ning oli kasutatav CD seade, seejärel aga enam mitte, arusaadavalt on põhjuseks, et tuumas sel juhul puudub vastavate seadmete toetus

Tuum ja initrd

Kuigi praktiliselt on võimalik süsteem ettevalmistada ka nii, et alglaadur laadib tuuma ning tuuma laadimise lõpus käivitatakse otse operatsioonisüsteemi init protsess toimub reeglina Debiani puhul alglaadimisel selline järgnevus

  • alglaadur laadib tuuma
  • tuum laadib mällu spetsiaalselt ettevalmistatud arhiivist failisüsteemi (ingl. k. initramdisk ehk initrd)
  • initrd on iseenesest miniatuurne operatsioonisüsteem, millelt käivitatakse init skript
  • init skripti töö tulemusena toimub rida täiendavaid initsialiseerimisi (nt plokkseadmete, tarkvara raidi, krüptitud plokkseadmete või lvm moodulite laadime ja vastavate ressursside kasutuselevõtmine)
  • ühendatakse külge nö päris operatsiooni juurfailisüsteem
  • operatsioonisüsteemi juurfailisüsteemilt käivitatakse init programm

Alltoodud näidetes on kasutatud operatsioonisüsteemi alglaadimisel mitte füüsilist arvutit vaid Xeni domU virtaalset operatsioonisüsteemi.

initrd

initrd arhiiv on nn newc formaadis cpio arhiiv, mis on gzip'ga kokkupakitud. Olemasolevad initrd lahtipakkimiseks tuleb öelda

 # mkdir /tmp/initrd && cd /tmp/initrd
 # gunzip -c /boot/initrd.img-2.6.26-1-xen-amd64 | cpio -dmi
 42750 blocks
 # ls -l
 total 36
 drwxr-xr-x 2 root root 4096 2009-04-04 15:50 bin
 drwxr-xr-x 3 root root 4096 2009-04-04 15:50 conf
 drwxr-xr-x 5 root root 4096 2009-04-04 15:50 etc
 -rwxr-xr-x 1 root root 4238 2009-01-07 16:14 init
 drwxr-xr-x 4 root root 4096 2009-04-04 15:50 lib
 drwxr-xr-x 2 root root 4096 2009-04-04 15:50 lib64
 drwxr-xr-x 2 root root 4096 2009-04-04 15:50 sbin
 drwxr-xr-x 7 root root 4096 2009-04-04 15:50 scripts

Kokkupakkimiseks sobib öelda, arusaadavalt peab olema ettevaatlik, et mitte töötavat initrd arhiivi üle kirjutada

 # find . | cpio -H newc -o | gzip > /boot/initrd.img

uue initrd ahiivi kasutamiseks tuleb Xeni domU seadistusfailis kasutada rida

 ramdisk='/boot/initrd.img'

Bootimisel esitab tuum konsoolile järgmised teated

Operatsioonisüsteemi init

Operatsioonisüsteemi init programmi käivitamisel tekib esimene süsteemis töötav protsess, kõik muud protsessid on selle protsessi poolt otseselt või kaudselt käivitatud. init programmi tööd kontrollib seadistusfail /etc/inittab, mille alguses on kirjas

 # egrep -v "^#|^$" /etc/inittab
 id:2:initdefault:
 si::sysinit:/etc/init.d/rcS
 ~~:S:wait:/sbin/sulogin
 l0:0:wait:/etc/init.d/rc 0
 l1:1:wait:/etc/init.d/rc 1
 l2:2:wait:/etc/init.d/rc 2
 l3:3:wait:/etc/init.d/rc 3
 l4:4:wait:/etc/init.d/rc 4
 l5:5:wait:/etc/init.d/rc 5
 l6:6:wait:/etc/init.d/rc 6
 z6:6:respawn:/sbin/sulogin
 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
 pf::powerwait:/etc/init.d/powerfail start
 pn::powerfailnow:/etc/init.d/powerfail now
 po::powerokwait:/etc/init.d/powerfail stop
 1:2345:respawn:/sbin/getty 38400 tty1
 2:23:respawn:/sbin/getty 38400 tty2
 3:23:respawn:/sbin/getty 38400 tty3
 4:23:respawn:/sbin/getty 38400 tty4
 5:23:respawn:/sbin/getty 38400 tty5
 6:23:respawn:/sbin/getty 38400 tty6

ja mis vaikimisi korraldab sellises järjekorras edasise süngmuste toimumise

  • käivitatakse skript /etc/init.d/rcS
 #! /bin/sh
 #
 # rcS
 #
 # Call all S??* scripts in /etc/rcS.d/ in numerical/alphabetical order
 #
 
 exec /etc/init.d/rc S
  • tähestikulises järjekorras käivitatakse skriptid kataloogist /etc/rcS.d, tegelikult on need lingid /etc/init.d kataloogi skriptidele
 # find /etc/rcS.d -type l | sort
 /etc/rcS.d/S01glibc.sh
 /etc/rcS.d/S02hostname.sh
 /etc/rcS.d/S02mountkernfs.sh
 /etc/rcS.d/S03udev
 /etc/rcS.d/S04mountdevsubfs.sh
 /etc/rcS.d/S05bootlogd
 /etc/rcS.d/S05keymap.sh
 /etc/rcS.d/S08hwclockfirst.sh
 /etc/rcS.d/S10checkroot.sh
 /etc/rcS.d/S11hwclock.sh
 /etc/rcS.d/S12mtab.sh
 /etc/rcS.d/S18ifupdown-clean
 /etc/rcS.d/S20module-init-tools
 /etc/rcS.d/S25mdadm-raid
 /etc/rcS.d/S26cryptdisks-early
 /etc/rcS.d/S26lvm2
 /etc/rcS.d/S28cryptdisks
 /etc/rcS.d/S30checkfs.sh
 /etc/rcS.d/S30procps
 /etc/rcS.d/S35mountall.sh
 /etc/rcS.d/S36mountall-bootclean.sh
 /etc/rcS.d/S36udev-mtab
 /etc/rcS.d/S37mountoverflowtmp
 /etc/rcS.d/S39ifupdown
 /etc/rcS.d/S40networking
 /etc/rcS.d/S43portmap
 /etc/rcS.d/S44nfs-common
 /etc/rcS.d/S45mountnfs.sh
 /etc/rcS.d/S46mountnfs-bootclean.sh
 /etc/rcS.d/S48console-screen.sh
 /etc/rcS.d/S55bootmisc.sh
 /etc/rcS.d/S55urandom
 /etc/rcS.d/S70x11-common
 /etc/rcS.d/S99stop-bootlogd-single
  • tähestikulises järjekorras käivitatakse skriptid kataloogist /etc/rc2.d, tegelikult on need lingid /etc/init.d kataloogi skriptidele
 # find /etc/rc2.d -type l | sort
 /etc/rc2.d/S10rsyslog
 /etc/rc2.d/S12acpid
 /etc/rc2.d/S16ssh
 /etc/rc2.d/S20exim4
 /etc/rc2.d/S20nfs-common
 /etc/rc2.d/S20openbsd-inetd
 /etc/rc2.d/S20rsync
 /etc/rc2.d/S20smartmontools
 /etc/rc2.d/S20sysstat
 /etc/rc2.d/S20xend
 /etc/rc2.d/S23ntp
 /etc/rc2.d/S25mdadm
 /etc/rc2.d/S89atd
 /etc/rc2.d/S89cron
 /etc/rc2.d/S99rc.local
 /etc/rc2.d/S99rmnologin
 /etc/rc2.d/S99stop-bootlogd

Süsteemi peatamine

TODO

  • hibernate and resume