Erinevus lehekülje "Debiani alglaadimine" redaktsioonide vahel
(→Sissejuhatus) |
(→BIOS) |
||
22. rida: | 22. rida: | ||
===BIOS=== | ===BIOS=== | ||
− | Arvuti alglaadimise seisukohast on BIOS'is (Basic Input Output System) tarvis näidata, milliselt ressursilt toimub alglaaduri kasutamine. Tavaliselt on see lokaalne kõvaketas, kuid võib olla ka nt PXE võimelise võrgukaardi abil tftp server. | + | Arvuti alglaadimise seisukohast on BIOS'is (Basic Input Output System) tarvis näidata, milliselt ressursilt toimub alglaaduri kasutamine. Tavaliselt on see lokaalne kõvaketas, kuid võib olla ka nt CD/DVD meedia või PXE võimelise võrgukaardi abil tftp server. |
===Alglaadur=== | ===Alglaadur=== |
Redaktsioon: 6. aprill 2009, kell 21:04
Sisukord
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 püsimälus olev firmware (PC puhul BIOS)
- BIOS laadib ja käivitab alglaaduri (nt GRUB - GRand Unified Bootloader)
- GRUB laadib tuuma ja initrd/initramfs (initial ramdisk/initial ram file system)
- GRUB käivitab tuuma
- tuum käivitab esialgse init-programmi initramfs pealt
- initramfs monteerib oma töö käigus juurfailisüsteemi
- initramfs annab oma töö lõpuks 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 aru saamine paremini 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 initramfs ei laadi kõvaketta kasutamiseks vajalikke mooduleid)
BIOS
Arvuti alglaadimise seisukohast on BIOS'is (Basic Input Output System) tarvis näidata, milliselt ressursilt toimub alglaaduri kasutamine. Tavaliselt on see lokaalne kõvaketas, kuid võib olla ka nt CD/DVD meedia või PXE võimelise võrgukaardi abil tftp server.
Alglaadur
Alglaaduri (ingl. k. bootloader) ülesanne on laadida sobivate parameetritega operatsioonisüsteemi tuum ja initramfs, 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
Alglaaduri GRUB paketi koosseisu kuuluvate failide nimekirja saab vaadata öeldes
# dpkg -L grub
Tuum ja initramfs
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 programm, toimub reeglina Debiani puhul alglaadimisel selline järgnevus
- alglaadur laadib tuuma ja initramfs kujutise
- tuum pakib initramfs kujutisest mällu lahti spetsiaalselt ettevalmistatud nn. init-failisüsteemi (ingl. k. initramfs ehk initramfs)
- initramfs peal on iseenesest miniatuurse operatsioonisüsteemi juurfailisüsteem, millelt käivitatakse init skript
- init skripti töö tulemusena toimub rida täiendavaid initsialiseerimisi (nt plokkseadmete st kõvaketaste, tarkvaralise raidi, krüptitud plokkseadmete või lvm kasutamise jaoks vastavate tuuma moodulite laadimine ja nende ressursside kasutuselevõtmine)
- ühendatakse külge nö päris operatsioonisüsteemi juurfailisüsteem
- operatsioonisüsteemi juurfailisüsteemilt käivitatakse init programm
Tavaliselt paigaldatakse tuum ja initramfs operatsioonisüsteemi paigaldamise käigus. Asjassepuutuvate failide nimekirja saab vaadata öeldes nii
# dpkg -L linux-image-2.6.26-1-xen-amd64 ... /boot/vmlinuz-2.6.26-1-xen-amd64
ja
# dpkg -L linux-modules-2.6.26-1-xen-amd64 ... /boot/System.map-2.6.26-1-xen-amd64 /boot/config-2.6.26-1-xen-amd64 /lib/modules/2.6.26-1-xen-amd64 ...
Oluline on tähele panne, et initramfs
/boot/initrd.img-2.6.26-1-xen-amd64
ei paigaldata otseselt paketihaldusest, vaid konstrueeritakse seadistusfailide abil automaatselt kohapeal programmi update-initramfs abil. Samuti võbi siit tähele panna, et failinimi on ajaloolistel põhjustel endiselt initrd. Initrd oli varasem viis esialgse juurfailisüsteemi ette andmiseks, mis kasutas mäluketast (ramdisk), tänapäeval on selle asemele tulnud initramfs, mis on mälukasutuse suhtes efektiivsem.
Alltoodud näidetes on kasutatud Debiani paketihalduse tuuma ja operatsioonisüsteemi alglaadimisel mitte füüsilist arvutit vaid Xeni domU virtuaalset operatsioonisüsteemi.
initramfs init skripti täitmise protseduur
initramfs arhiiv on nn newc formaadis cpio arhiiv, mis on gzip'ga kokku pakitud. Olemasolevad initramfs 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 initramfs arhiivi üle kirjutada
# find . | cpio -H newc -o | gzip > /boot/initrd.img
uue initramfs ahiivi kasutamiseks tuleb Xeni domU seadistusfailis kasutada rida
ramdisk='/boot/initrd.img'
Peale tuuma bootimist laaditakse alglaaduri seadistusfailis näidatud initramfs ning käivitatakse sealt skript init. See skript on suhtliselt hästi loetav, tegevused toimuvad sellises järjekorras
- moodustatakse kataloogid /dev, /root, /sys, /proc ja /tmp
- ühendatakse külge failisüsteemid /sys a /proc
- moodustatakse seadmed /dev/console ja /dev/null
- kirjeldatakse ja algvääärtustatakse muutujad ROOT, break, init, BOOT jt
- laaditakse sisse funktsioonid skriptist ./scripts/functions
- väärtustatakse veel muutujaid kerneli parameetritega antud andmete abil
- käivitatakse scripts/init-top skriptid
scripts/init-top/all_generic_ide scripts/init-top/framebuffer scripts/init-top/keymap
- laaditakse tuuma moodulid
- käivitatakse scripts/init-premount skriptid
scripts/init-premount/blacklist scripts/init-premount/udev scripts/init-premount/thermal
- loetakse sisse funktsioonid skriptist /scripts/${BOOT}, antud juhul /scripts/local
- ühendatakse külge nö päris juurfailisüsteem
/scripts/local-top /scripts/local-premount /scripts/local-bottom
- käivitatakse /scripts/init-bottom skriptid, tapetakse initramfs udev protsess
scripts/init-bottom/udev
- liigutatakse /sys ja /proc failisüsteemi päris juurfailisüsteemi alla
mount -n -o move /sys ${rootmnt}/sys mount -n -o move /proc ${rootmnt}/proc
- käivitatakse nö päris operatsioonisüsteemi init
exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
initramfs init skripti täitmisega kaasneb konsoolil selline logi, nagu näha on mõned teated Xeni spetsiifilised, ilmselt aitaks fan ja thermal mooduli blacklistimine
Loading, please wait... Begin: Loading essential drivers ... done. Begin: Running /scripts/init-premount ... FATAL: Error inserting fan \ (/lib/modules/2.6.26-1-xen-amd64/kernel/drivers/acpi/fan.ko): No such device WARNING: Error inserting processor (/lib/modules/2.6.26-1-xen-amd64/kernel/drivers/acpi/processor.ko): \ No such device [ 1.216595] thermal: Unknown symbol acpi_processor_set_thermal_limit FATAL: Error inserting thermal (/lib/modules/2.6.26-1-xen-amd64/kernel/drivers/acpi/thermal.ko): \ Unknown symbol in module, or unknown parameter (see dmesg) done. Begin: Mounting root file system ... Begin: Running /scripts/local-top ... [ 1.396075] device-mapper: uevent: version 1.0.3 [ 1.396752] device-mapper: ioctl: 4.13.0-ioctl (2007-10-18) initialised: dm-devel@redhat.com Volume group "system" not found done. Begin: Running /scripts/local-premount ... done. [ 1.537167] kjournald starting. Commit interval 5 seconds [ 1.537182] EXT3-fs: mounted filesystem with ordered data mode. Begin: Running /scripts/local-bottom ... done. done. Begin: Running /scripts/init-bottom ... done. INIT: version 2.86 booting
initramfs init skripti täitmise peatamine
Üks huvipakkuv initramfs'ga tegelemise rakendus on peatada initramfs täitmine kasutades tuuma parameetrit break. Nt peatame enne initramfs udev protsessi tapmist, kusjuures päris juurikas on siis juba külge ühendatud, selleks tuleb kasutada domU seadistusfailis rida (xencons=tty on Xeni spetsiifiline)
extra='break=bottom xencons=tty'
Tulemusena sattuma nn initramfs shelli, mis on tegelikult ash shell
... Begin: Running /scripts/local-bottom ... done. done. Spawning shell within the initramfs BusyBox v1.10.2 (Debian 1:1.10.2-2) built-in shell (ash) Enter 'help' for a list of built-in commands. /bin/sh: can't access tty; job control turned off (initramfs)
ning selles shellis saab kasutada neid käske, mis on initramfs sees toetatud, nt
(initramfs) ifconfig eth0 eth0 Link encap:Ethernet HWaddr 70:01:68:01:00:51 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
või
(initramfs) df -h Filesystem Size Used Available Use% Mounted on udev 10.0M 8.0k 10.0M 0% /dev /dev/sda1 31.7G 2.4G 27.8G 8% /root
Kuna päris juurfailisüsteem on ühendatud, siis on võimalik seda kasutada
(initramfs) mount -t proc /proc /root/proc (initramfs) mount -t sysfs /sys /root/sys (initramfs) chroot /root
Edasi saab juba täielisemalt arvutit kasutada, nt peale võrgu seadistamist käivitada ssh serveri.
initramfs promptist väljumiseks tuleb valida Ctrl+D või kirjutada nt 'exit', seejärel jätkub init skripti järgnevus ja operatsioonisüsteemi alglaadimine jätkub.
initramfs seadistamine
initramfs genereerimiseks tuleb öelda nt
# update-initramfs -u -k all
initramfs moodustamist saab juhtida seadistusfailiga /etc/initramfs-tools/initramfs.conf ning kontrollides kataloogi sisu
/usr/share/initramfs-tools/scripts
Sinna kataloogi kopeerivad ka teised paketid oma skripte, nt
# dpkg -S /usr/share/initramfs-tools/scripts/local-top/mdadm mdadm: /usr/share/initramfs-tools/scripts/local-top/mdadm # dpkg -S /usr/share/initramfs-tools/scripts/local-top/lvm2 lvm2: /usr/share/initramfs-tools/scripts/local-top/lvm2
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
TODO
- hibernate and resume