LFCS: süsteemi käivitamise protsessi ja teenuste haldamine (SysVinit, Systemd ja Upstart) - 7. osa


Paar kuud tagasi kuulutas Linuxi fond välja LFCS-i (Linux Foundation Certified Sysadmin) sertifikaadi, uue põneva programmi, mille eesmärk on võimaldada kõigist maailma otsadest pärit isikutel saada sertifikaat Linuxi süsteemide põhi- ja kesktaseme halduse ülesannete täitmiseks. See hõlmab juba töötavate süsteemide ja teenuste toetamist koos otsese probleemide leidmise ja analüüsimisega ning võimalust otsustada, millal insenerimeeskondadele küsimusi tõstatada.

Järgmises videos kirjeldatakse Linux Foundationi sertifitseerimisprogrammi lühitutvustust.

See postitus on kümne õpetuse seeria 7. osa. Siin selles osas selgitame, kuidas hallata Linuxi süsteemi käivitamisprotsessi ja teenuseid, mis on vajalikud LFCS-i sertifitseerimise eksami jaoks.

Linuxi käivitamisprotsessi haldamine

Linuxi süsteemi alglaadimisprotsess koosneb mitmest faasist, millest igaüks on erinev komponent. Järgmine skeem võtab lühidalt kokku alglaadimisprotsessi ja näitab kõiki kaasatud põhikomponente.

Kui vajutate masina nuppu Toide , lähtestab emaplaadi EEPROM kiibi salvestatud püsivara POST ( Power-On Self Test ) süsteemi riistvararessursside oleku kontrollimiseks. Kui POST on lõppenud, otsib püsivara ja laadib seejärel 1. etapi alglaaduri, mis asub asukohas MBR või EFI esimese saadaoleva ketta partitsioon ja annab sellele kontrolli.

MBR asub ketta esimeses sektoris, mis on BIOS sätetes käivitatavaks märgitud ja on 512 baiti.

  1. Esimesed 446 baiti : alglaadur sisaldab nii käivitatavat koodi kui ka tõrketeate teksti.
  2. Järgmised 64 baiti : jaotistabel sisaldab kirjet iga nelja (esmase või laiendatud) sektsiooni kohta. Muu hulgas näitab iga kirje iga sektsiooni olekut (aktiivne/mitte aktiivne), suurust ning algus- ja lõppsektoreid.
  3. Viimased 2 baiti : maagiline number toimib MBR-i kontrollimise kontrollina.

Järgmine käsk teeb MBR varukoopia (selles näites on /dev/sda esimene kõvaketas). Saadud fail mbr.bkp võib olla kasulik, kui partitsioonitabel rikutakse, näiteks muutes süsteemi taaskäivitamatuks.

Muidugi peame selle hiljem vajaduse korral kasutamiseks salvestama ja kuskil mujal hoidma (näiteks USB draiv). See fail aitab meil MBR-i taastada ja paneb meid taas käima siis ja ainult siis, kui me vahepeal kõvaketta paigutust ei muuda.

# dd if=/dev/sda of=mbr.bkp bs=512 count=1
# dd if=mbr.bkp of=/dev/sda bs=512 count=1

Süsteemide puhul, mis kasutavad meetodit EFI / UEFI , loeb UEFI püsivara oma seaded, et määrata, milline UEFI rakendus ja kust tuleb käivitada (st millises kettas ja sektsioonis EFI partitsioon asub).

Järgmisena laaditakse ja käivitatakse 2. etapi alglaadur (teise nimega alglaadimishaldur). GRUB [ GRand Unified Boot ] on Linuxis kõige sagedamini kasutatav alglaadimishaldur. Enamikest tänapäeval kasutatavatest süsteemidest võib leida ühe kahest erinevast versioonist.

  1. GRUBi pärandkonfiguratsioonifail : /boot/grub/menu.lst (vanemad jaotused, mida EFI/UEFI püsivara ei toeta).
  2. GRUB2 konfiguratsioonifail : kõige tõenäolisem,/etc/default/grub.

Kuigi eksami LFCS eesmärgid ei nõua sõnaselgelt teadmisi GRUB sisemiste materjalide kohta, siis kui olete julge ja võite endale lubada oma süsteemi segamini ajada (võiksite proovida kõigepealt virtuaalmasinas, igaks juhuks), peate käivitama.

# update-grub

Olles juur pärast muudatuste rakendamiseks GRUB-i konfiguratsiooni muutmist.

Põhimõtteliselt laadib GRUB vaikimisi kerneli ja pildi initrd või initramfs . Mõne sõnaga aitavad initrd või initramfs riistvara tuvastamist, tuumamooduli laadimist ja seadme avastamist, mis on vajalik tõelise juurfailisüsteemi paigaldamiseks.

Kui tegelik juurfailisüsteem on üleval, käivitab kern süsteemi ja teenusehalduri ( init või systemd , mille protsessi identifitseerimine või PID on alati 1), et alustada tavalist kasutajafaili. ruumi käivitamise protsess kasutajaliidese esitamiseks.

Nii init kui ka systemd on deemonid (taustaprotsessid), mis haldavad teisi deemoneid, kuna see on esimene käivitatud teenus (käivitamise ajal) ja viimane teenus, mis lõpetatakse (seiskamise ajal).

Teenuste käivitamine (SysVinit)

Mõiste jooksutasemed Linuxis määrab süsteemi kasutamise erinevad viisid, kontrollides töötavaid teenuseid. Teisisõnu kontrollib jooksutase, milliseid ülesandeid saab täita praeguses täitmisolekus = käitustasand (ja milliseid mitte).

Traditsiooniliselt viidi see käivitamisprotsess aluseks süsteemidele, mis pärinesid süsteemilt System V UNIX , kusjuures süsteem edastas skriptikogumite käivitamise ja peatamise, kui masin sisestas kindla käitustaseme (mis teisisõnu , on süsteemi käitamise erinev režiim).

Igas jooksutasemes saab üksikute teenuste seadistada töötama või töötamise ajal sulgema. Mõne suurema jaotuse uusimad versioonid lähevad standardist System V eemale üsna uue teenuse ja süsteemihalduri kasuks nimega systemd (mis tähistab süsteemi deemonit), kuid tavaliselt ühilduvuse huvides toetab käske sysv . See tähendab, et saate kasutada enamikku tuntud sysv init-i tööriistadest systemd-põhises jaotises.

Loe ka : miks 'systemd' asendab Linuxis sõna 'init'?

Lisaks süsteemiprotsessi käivitamisele vaatab init faili /etc/inittab , et otsustada, milline jooksutase tuleb sisestada.

Töötaseme vahel vahetamiseks saame käsu init abil lihtsalt käivitustaseme muudatuse anda: init N (kus N on üks ülaltoodud töötasanditest). Pange tähele, et see ei ole soovitatav viis jooksva süsteemi teisele tasemele viimiseks, kuna see ei anna olemasolevatele sisseloginud kasutajatele hoiatust (põhjustades seega töö kaotamist ja protsesside ebaharilikku lõpetamist).

Selle asemel tuleks süsteemi taaskäivitamiseks kasutada käsku shutdown (mis kõigepealt saadab kõigile sisseloginud kasutajatele hoiatusteate ja blokeerib kõik edasised sisselogimised; see annab seejärel käsklustaseme vahetamiseks märku init); algset failitaset (mida süsteem käivitab) tuleb siiski failis /etc/inittab redigeerida.

Sel põhjusel järgige neid samme, et korralikult vahetada töötaseme vahel. Otsige juurena järgmist rida jaotises /etc/inittab .

id:2:initdefault:

ja muutke soovitud jooksutaseme arv 2 eelistatud tekstiredaktoriga, näiteks vim (kirjeldatud jaotises Kuidas kasutada vi/vim-redaktorit Linuxis - selle sarja 2. osa).

Järgmisena käivitage juur.

# shutdown -r now

See käsk viimane taaskäivitab süsteemi, käivitades järgmise käivitamise ajal määratud käitustasemel ja käivitab skriptid, mis asuvad saidil /etc/rc[runlevel].d kataloog, et otsustada, milliseid teenuseid tuleks alustada ja milliseid mitte. Näiteks järgmises süsteemis käitustaseme 2 jaoks.

Süsteemiteenuste lubamiseks või keelamiseks käivitamisel kasutame käsku chkconfig CentOS/openSUSE-s ning sysv-rc-conf Debianis ja derivaatides. See tööriist võib meile näidata ka seda, mis on konkreetse käitustaseme jaoks teenuse eelkonfigureeritud olek.

Loe ka : kuidas soovimatud teenused Linuxis peatada ja keelata

Teenuse käitustaseme konfiguratsiooni loetlemine.

# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld

Ülaltoodud pildil näeme, et postfix on käivitatud siis, kui süsteem sisestab jooksutasemed 2 kuni 5 , kusjuures mysqld töötab vaikimisi käitustasemetel 2 kuni 4 . Oletame nüüd, et see pole oodatud käitumine.

Näiteks peame sisse lülitama ka mysqld runlevel 5 jaoks ja postfixi välja lülitama runlevels 4 ja 5. Siin on, mida me teeksime igal juhul (käivitage järgmised käsud juurena).

# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on
# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off

Nüüd teostame sarnaseid ülesandeid Debiani-põhises süsteemis, kasutades rakendust sysv-rc-conf .

Teenuse konfigureerimine nii, et see käivitub automaatselt kindla käitustaseme korral ja takistab selle käivitamist kõigil teistel.

1. Kasutame järgmist käsku, et näha, millised on tasemed, kus mdadm on konfigureeritud käivitamiseks.

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

2. Kasutame funktsiooni sysv-rc-conf , et takistada mdadmi käivitamist kõigil töötasanditel, v.a 2 . Lihtsalt märkige või tühjendage (tühikuklahviga) vastavalt soovile (nooleklahvide abil saate liikuda üles, alla, vasakule ja paremale).

# sysv-rc-conf

Seejärel vajutage sulgemiseks q .

3. Taaskäivitame süsteemi ja käivitame uuesti käsu STEP 1 .

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

Ülaltoodud pildil näeme, et mdadm on konfigureeritud käivitama ainult jooksutasemel 2 .

Aga systemd?

systemd on veel üks teenuse- ja süsteemihaldur, mida kasutavad mitmed suuremad Linuxi distributsioonid. Selle eesmärk on lubada süsteemi käivitamisel paralleelselt rohkem töötlemist (erinevalt sysvinit ist, mis kipub alati olema aeglasem, kuna see käivitab protsessid ükshaaval, kontrollib, kas üks sõltub teisest, ja ootab deemonid, et käivitada rohkem teenuseid) ja toimiva süsteemi dünaamiline ressursside haldamine.

Seega käivitatakse teenuseid vajaduse korral (süsteemiressursside tarbimise vältimiseks), selle asemel et käivitada käivitamise ajal ilma kindla põhjuseta.

Kõigi oma süsteemis töötavate protsesside, nii systemd native- kui ka SysV -teenuste oleku vaatamine, käivitage järgmine käsk.

# systemctl

Veerg LOAD näitab, kas üksuse määratlus (vaadake veergu UNIT , mis näitab teenust või kõike, mida systemd hooldab) oli korralikult laaditud, samas kui ACTIVE Veergudes ja SUB kuvatakse sellise üksuse praegune olek.

Kui veerg AKTIIVNE näitab, et üksuse olek on muu kui aktiivne, saame juhtunut kontrollida.

# systemctl status [unit]

Näiteks ülaltoodud pildil on media-samba.mount ebaõnnestunud olekus. Jookseme.

# systemctl status media-samba.mount

Näeme, et media-samba.mount nurjus, kuna hosti dev1 ühendamisprotsess ei suutnud leida võrgu jagamist saidil //192.168.0.10/gacanepa .

Teenuste alustamine või peatamine

Kui võrgu jagamine //192.168.0.10/gacanepa muutub kättesaadavaks, proovime alustada, siis peatada ja taaskäivitada seade media-samba.mount . Pärast iga toimingu sooritamist käivitame systemctl status media-samba.mount, et kontrollida selle olekut.

# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount

Jaotises systemd saate teenuse käivitamisel lubada või keelata.

# systemctl enable [service] 		# enable a service 
# systemctl disable [service] 		# prevent a service from starting at boot

Teenuse automaatse käivitamise lubamise või keelamise protsess seisneb sümboolsete linkide lisamises või eemaldamises kataloogis /etc/systemd/system/multi-user.target.wants .

Teise võimalusena saate käsu abil teada teenuse praeguse oleku (lubatud või keelatud).

# systemctl is-enabled [service]

Näiteks,

# systemctl is-enabled postfix.service

Lisaks saate süsteemi taaskäivitada või välja lülitada.

# systemctl reboot
# systemctl shutdown

Ülespoole

Upstart on deemoni /sbin/init sündmusepõhine asendaja ja sündis vajadusest käivitada teenuseid ainult siis, kui neid vajatakse (jälgides ka nende töötamise ajal) töötavad) ja sündmuste käsitlemist nende tekkimisel, ületades seeläbi klassikalise sõltuvuspõhise sysviniti süsteemi.

See töötati algselt välja Ubuntu levitamiseks, kuid seda kasutatakse Red Hat Enterprise Linux 6.0-s. Ehkki see pidi olema sobilik juurutamiseks kõigis Linuxi distributsioonides sysviniti asendajana, varjutas seda aja jooksul systemd . 14. veebruaril 2014 teatas Mark Shuttleworth (Canonical Ltd. asutaja), et tulevastes Ubuntu väljaannetes kasutatakse vaikimisi init deemoniks systemd.

Kuna SysV süsteemi käivituskript on olnud nii tavaline nii kaua, sisaldab suur hulk tarkvarapakette ka SysV käivituskripte. Selliste pakettide mahutamiseks pakub Upstart ühilduvusrežiimi: see käitab SysV käivituskripte tavalistes asukohtades ( /etc/rc.d/rc?.d , /etc/init.d/ rc? .d , /etc/rc?.d või sarnane asukoht). Seega, kui installime paketi, mis veel ei sisalda Upstarti konfiguratsiooniskripti, peaks see ikkagi tavapärasel viisil käivituma.

Veelgi enam, kui meil on installitud utiliidid, näiteks chkconfig, peaksite saama neid kasutada oma SysV-põhiste teenuste haldamiseks samamoodi nagu sysvinit-põhistes süsteemides.

Uuesti käivitatud skriptid toetavad ka teenuste käivitamist või peatamist, mis põhinevad mitmesugustel toimingutel kui SysV käivitusskriptid; näiteks võib Upstart teenuse käivitada alati, kui on ühendatud konkreetne riistvaraseade.

Süsteem, mis kasutab Upstarti ja selle natiivseid skripte, asendab ainult faili /etc/inittab ja käivitustaseme spetsiifilised käivitusskripti SysV kataloogid failidega .conf skriptid kataloogis /etc/init .

Need * .conf skriptid (tuntud ka kui töö definitsioonid) koosnevad tavaliselt järgmisest:

    1. Protsessi kirjeldus.
    2. Töötasemed, kus protsess peaks käima, või sündmused, mis peaksid selle käivitama.
    3. Tasemed, kus protsess tuleks peatada, või sündmused, mis peaksid selle peatama.
    4. Valikud.
    5. Käsk protsessi käivitamiseks.

    Näiteks,

    # My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email >"
    # Stanzas
    
    #
    # Stanzas define when and how a process is started and stopped
    # See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
    # When to start the service
    start on runlevel [2345]
    # When to stop the service
    stop on runlevel [016]
    # Automatically restart process in case of crash
    respawn
    # Specify working directory
    chdir /home/dave/myfiles
    # Specify the process/command (add arguments if needed) to run
    exec bash backup.sh arg1 arg2
    

    Muudatuste rakendamiseks peate alustajale käsu oma konfiguratsiooni uuesti laadima.

    # initctl reload-configuration
    

    Seejärel alustage oma tööd, tippides järgmise käsu.

    $ sudo start yourjobname
    

    Kus teie nimenimi on selle töö nimi, mis lisati varem skriptiga teie töönimi.conf .

    Täielik ja üksikasjalik Upstarti juhend on saadaval projekti veebisaidil menüü\"kokaraamat" all.

    Kokkuvõte

    Teadmised Linuxi alglaadimisprotsessist on vajalikud nii veaotsingu kui ka arvuti jõudluse ja käitamisteenuste kohandamiseks teie vajadustele.

    Selles artiklis oleme analüüsinud, mis juhtub hetkest, kui vajutate masina sisselülitamiseks lülitit Toide , kuni saate täielikult toimiva kasutajaliidese. Loodan, et olete õppinud seda lugema sama palju kui mina seda kokku pannes. Jätke julgelt oma kommentaarid või küsimused allpool. Ootame alati oma lugejaid!