LFCS: Järjestelmän käynnistysprosessin ja -palvelujen hallinta (SysVinit, Systemd ja Upstart) - Osa 7


Pari kuukautta sitten Linux-säätiö julkisti LFCS (Linux Foundation Certified Sysadmin) -sertifikaatin, jännittävän uuden ohjelman, jonka tavoitteena on antaa ihmisille kaikkialta maailmasta saada sertifikaatti suorittamaan perus- ja keskitason järjestelmänhallintatehtäviä Linux-järjestelmissä. Tämä sisältää jo käynnissä olevien järjestelmien ja palveluiden tukemisen sekä ensikäden ongelmien etsimisen ja analyysin sekä mahdollisuuden päättää, milloin ongelmat on esitettävä suunnittelutiimeille.

Seuraava video kuvaa lyhyen johdannon Linux Foundation -sertifiointiohjelmaan.

Tämä viesti on osa 7 10 opetusohjelman sarjasta, tässä osassa selitämme kuinka hallita Linux-järjestelmän käynnistysprosessia ja palveluita, joita tarvitaan LFCS-sertifiointikokeeseen.

Linuxin käynnistysprosessin hallinta

Linux-järjestelmän käynnistysprosessi koostuu useista vaiheista, joista jokaista edustaa eri komponentti. Seuraava kaavio esittää lyhyesti käynnistysprosessin ja näyttää kaikki siihen liittyvät pääkomponentit.

Kun painat koneen virtapainiketta, emolevyn EEPROM-siruun tallennettu laiteohjelmisto alustaa POST ( Käynnistystesti) tarkistaaksesi järjestelmän laitteistoresurssien tilan. Kun POST on valmis, laiteohjelmisto etsii ja lataa 1st vaiheen käynnistyslataimen, joka sijaitsee MBR:ssä tai EFI:ssä. ensimmäisen saatavilla olevan levyn osion ja antaa sen hallinnan.

MBR-menetelmä

MBR sijaitsee levyn ensimmäisessä sektorissa, joka on merkitty BIOS-asetuksissa käynnistettäväksi, ja sen koko on 512 tavua.

  1. Ensimmäiset 446 tavua: käynnistyslatain sisältää sekä suoritettavan koodin että virheilmoituksen tekstin.
  2. Seuraavat 64 tavua: Osiotaulukko sisältää tietueen jokaiselle neljälle osiolle (ensisijainen tai laajennettu). Jokainen tietue ilmoittaa muun muassa kunkin osion tilan (aktiivinen/ei aktiivinen), koon ja aloitus-/loppusektorit.
  3. Viimeiset 2 tavua: Maaginen numero toimii MBR:n vahvistustarkistuksena.

Seuraava komento suorittaa varmuuskopion MBR:stä (tässä esimerkissä /dev/sda on ensimmäinen kiintolevy). Tuloksena oleva tiedosto, mbr.bkp, voi olla hyödyllinen, jos osiotaulukko vioittuu, esimerkiksi jolloin järjestelmä ei käynnisty.

Tietenkin meidän on tallennettava se ja tallennettava se jonnekin muualle (esimerkiksi USB-asemaan), jotta voimme käyttää sitä myöhemmin tarvittaessa. Tämä tiedosto auttaa meitä palauttamaan MBR:n ja saa meidät liikkeelle uudelleen, jos ja vain, jos emme muuta kiintolevyn asettelua sillä välin.

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

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

EFI/UEFI-menetelmä

EFI/UEFI-menetelmää käyttävissä järjestelmissä UEFI-laiteohjelmisto lukee asetukset määrittääkseen, mikä UEFI-sovellus käynnistetään ja mistä (ts. millä levyllä ja osiolla EFI-osio sijaitsee).

Seuraavaksi 2. vaiheen käynnistyslatain (alias boot manager) ladataan ja suoritetaan. GRUB [GRand Unified Boot] on Linuxin yleisimmin käytetty käynnistyksenhallinta. Toinen kahdesta erillisestä versiosta löytyy useimmista nykyään käytetyistä järjestelmistä.

  1. Vanha GRUB-määritystiedosto: /boot/grub/menu.lst (vanhemmat jakelut, joita EFI/UEFI-laiteohjelmistot eivät tue).
  2. GRUB2-määritystiedosto: todennäköisesti /etc/default/grub.

Vaikka LFCS-kokeen tavoitteet eivät nimenomaisesti vaadi tietoja GRUB-sisäisistä ominaisuuksista, jos olet rohkea ja sinulla on varaa sotkea järjestelmäsi (voit kokeilla sitä ensin virtuaalikoneessa, varmuuden vuoksi), sinun on suoritettava.

update-grub

juurikäyttäjänä sen jälkeen, kun olet muokannut GRUB:n asetuksia muutosten soveltamiseksi.

Periaatteessa GRUB lataa oletusarvoisen ytimen ja initrd- tai initramfs-kuvan. Lyhyesti sanottuna, initrd tai initramfs auttavat suorittamaan laitteiston havaitsemisen, ydinmoduulin latauksen ja laitteen etsimisen, jotka ovat välttämättömiä oikean juuritiedostojärjestelmän asentamiseksi.

Kun todellinen juuritiedostojärjestelmä on valmis, ydin suorittaa järjestelmän ja palvelunhallinnan (init tai systemd, jonka prosessin tunniste tai PID on aina 1) aloittaakseen normaalin käyttäjä- avaruuskäynnistysprosessi käyttöliittymän esittämiseksi.

Sekä init että systemd ovat demoneja (taustaprosesseja), jotka hallitsevat muita demoneja ensimmäisenä käynnistyksenä (käynnistyksen aikana) ja viimeisenä lopettavana palveluna (sulkemisen aikana).

Palveluiden aloitus (SysVinit)

Linuxin ajotasojen käsite määrittää erilaisia tapoja käyttää järjestelmää ohjaamalla käynnissä olevia palveluita. Toisin sanoen ajotaso ohjaa, mitä tehtäviä voidaan suorittaa nykyisessä suoritustilassa=ajotaso (ja mitkä eivät).

Perinteisesti tämä käynnistysprosessi suoritettiin System V UNIXista peräisin olevien käytäntöjen perusteella, jolloin järjestelmä välitti skriptikokoelmien suorittamisen, jotka käynnistävät ja lopettavat palvelut koneen siirtyessä tietylle ajotasolle (toisin sanoen , on erilainen järjestelmän käyttötapa).

Jokaisella ajotasolla yksittäiset palvelut voidaan asettaa toimimaan tai sulkeutumaan, jos ne ovat käynnissä. Joidenkin tärkeimpien jakeluiden uusimmat versiot ovat siirtymässä pois System V -standardista melko uuteen palvelu- ja järjestelmähallintaan nimeltä systemd (joka tarkoittaa järjestelmädaemonia), mutta yleensä tukee sysv-komentoja yhteensopivuussyistä. Tämä tarkoittaa, että voit käyttää useimpia tunnettuja sysv-init-työkaluja systemd-pohjaisessa jakelussa.

Lue myös: Miksi "systemd" korvaa "init" Linuxissa

Järjestelmäprosessin käynnistämisen lisäksi init etsii /etc/inittab-tiedostosta päättääkseen, mikä ajotaso on syötettävä.

Runlevel

Kuvaus

0

Pysäytä järjestelmä. Ajotaso 0 on erityinen siirtymätila, jota käytetään järjestelmän nopeaan sammuttamiseen.

1

Tätä ajotasoa kutsutaan myös nimellä s tai S, ja sitä kutsutaan joskus ylläpitotilaksi. Tällä ajotasolla käynnistettävät palvelut vaihtelevat jakelun mukaan. Sitä käytetään tyypillisesti alhaisen tason järjestelmän ylläpitoon, jota järjestelmän normaali toiminta voi heikentää.

2

Monikäyttäjä. Debian-järjestelmissä ja johdannaisissa tämä on oletusajotaso ja sisältää -jos saatavilla - graafisen kirjautumisen. Red-Hat-pohjaisissa järjestelmissä tämä on monen käyttäjän tila ilman verkkoa.

3

Red-Hat-pohjaisissa järjestelmissä tämä on oletusarvoinen monen käyttäjän tila, joka suorittaa kaiken paitsi graafisen ympäristön. Tätä ajotasoa ja tasoja 4 ja 5 ei yleensä käytetä Debian-pohjaisissa järjestelmissä.

4

Tyypillisesti oletusarvoisesti käyttämätön ja siksi muokattavissa.

5

Red-Hat-pohjaisissa järjestelmissä täysi monen käyttäjän tila GUI-kirjautumisella. Tämä ajotaso on kuin taso 3, mutta käytettävissä on GUI-kirjautuminen.

6

Käynnistä järjestelmä uudelleen.

Voit vaihtaa ajotasojen välillä antamalla ajotason muutoksen init-komennolla: init N (jossa N on yksi yllä luetelluista ajotasoista). Huomaa, että tämä ei ole suositeltu tapa siirtää käynnissä olevaa järjestelmää eri ajotasolle, koska se ei anna varoitusta olemassa oleville kirjautuneille käyttäjille (täten he menettävät työtä ja prosessit päätyvät epänormaalisti).

Sen sijaan shutdown-komentoa tulisi käyttää järjestelmän uudelleenkäynnistämiseen (joka ensin lähettää varoitusviestin kaikille sisäänkirjautuneille käyttäjille ja estää mahdolliset lisäkirjautumiset; sitten se signaloi init:n ajotasojen vaihtamiseksi); oletusajotasoa (jolle järjestelmä käynnistyy) on kuitenkin muokattava ensin /etc/inittab-tiedostossa.

Tästä syystä noudata näitä ohjeita vaihtaaksesi oikein ajotasojen välillä. Etsi pääkäyttäjänä seuraava rivi hakemistosta /etc/inittab.

id:2:initdefault:

ja muuta numeroa 2 halutulle ajotasolle haluamallasi tekstieditorilla, kuten vimillä (kuvattu kohdassa Vi/vim-editorin käyttäminen Linuxissa – Tämän sarjan osa 2).

Suorita seuraavaksi root-käyttäjänä.

shutdown -r now

Tämä viimeinen-komento käynnistää järjestelmän uudelleen, jolloin se käynnistyy määritetyllä ajotasolla seuraavan käynnistyksen aikana ja suorittaa komentosarjat, jotka sijaitsevat tiedostossa /etc/rc[runlevel].d hakemistosta päättääkseen, mitkä palvelut kannattaa käynnistää ja mitkä ei. Esimerkiksi seuraavan järjestelmän ajotasolle 2.

Hallinnoi palveluita chkconfigilla

Järjestelmäpalvelujen ottamiseksi käyttöön tai poistamiseksi käytöstä käynnistyksen yhteydessä käytämme chkconfig-komentoa CentOS:ssä/openSUSEssa ja sysv-rc-conf-komentoa Debianissa ja johdannaisissa. Tämä työkalu voi myös näyttää meille, mikä on palvelun esikonfiguroitu tila tietylle ajotasolle.

Lue myös: ei-toivottujen palveluiden pysäyttäminen ja poistaminen käytöstä Linuxissa

Luettelo palvelun ajotason kokoonpanosta.

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

Yllä olevasta kuvasta voimme nähdä, että postfix on asetettu käynnistymään, kun järjestelmä siirtyy ajotasolle 2 - 5, kun taas mysqld b> on oletuksena käynnissä ajotasoilla 2 - 4. Oletetaan nyt, että tämä ei ole odotettua käyttäytymistä.

Meidän on esimerkiksi otettava käyttöön mysqld myös ajotasolle 5 ja poistettava postfix käytöstä ajotasoilla 4 ja 5. Näin toimisimme kussakin tapauksessa (suorita seuraavat komennot pääkäyttäjänä).

Palvelun käyttöönotto tietylle ajotasolle
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Palvelun poistaminen käytöstä tietyillä ajotasoilla
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

Suoritamme nyt samanlaisia tehtäviä Debian-pohjaisessa järjestelmässä käyttämällä sysv-rc-conf.

Hallinnoi palveluita käyttämällä sysv-rc-conf

Palvelun määrittäminen käynnistymään automaattisesti tietyllä ajotasolla ja estämään sitä käynnistymästä kaikilla muilla.

1. Katsotaanpa seuraavan komennon avulla, mitkä ovat ajotasot, joilla mdadm on määritetty käynnistymään.

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

2. Käytämme koodia sysv-rc-conf estääksemme mdadm:n käynnistymisen kaikilla ajotasoilla paitsi 2. Valitse tai poista valinta (välilyönnillä) haluamallasi tavalla (voit liikkua ylös, alas, vasemmalle ja oikealle nuolinäppäimillä).

sysv-rc-conf

Lopeta sitten painamalla q.

3. Käynnistämme järjestelmän uudelleen ja suoritamme uudelleen komennon VAIHE 1.

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

Yllä olevassa kuvassa voimme nähdä, että mdadm on määritetty käynnistymään vain ajotasolla 2.

Entä systemd?

systemd on toinen palvelu- ja järjestelmänhallinta, joka on otettu käyttöön useissa suurissa Linux-jakeluissa. Sen tarkoituksena on mahdollistaa suuremman käsittelyn suorittaminen rinnakkain järjestelmän käynnistyksen aikana (toisin kuin sysvinit, joka on aina yleensä hitaampi, koska se käynnistää prosessit yksi kerrallaan, tarkistaa, ovatko ne riippuvaisia toisesta ja odottaa demoneja käynnistääkseen, jotta useampi palvelu voi käynnistyä), ja toimia dynaamisena resurssienhallinnana käynnissä olevaan järjestelmään.

Siten palvelut käynnistetään tarvittaessa (järjestelmän resurssien kulutuksen välttämiseksi) sen sijaan, että ne käynnistettäisiin ilman painavaa syytä käynnistyksen aikana.

Suorita seuraava komento tarkastellaksesi kaikkien järjestelmässäsi käynnissä olevien prosessien tilaa, sekä systemd -natiivipalveluita että SysV-palveluita.

systemctl

LOAD-sarake näyttää, ladattiinko yksikön määritelmä (katso YKSIKKÖ-sarake, joka näyttää palvelun tai kaiken systemd:n ylläpitämän) oikein, kun taas ACTIVE- ja SUB-sarakkeet näyttävät tällaisen yksikön nykyisen tilan.

Näyttää tietoja palvelun nykyisestä tilasta

Kun AKTIIVINEN-sarake osoittaa, että yksikön tila on muu kuin aktiivinen, voimme tarkistaa mitä tapahtui käyttämällä.

systemctl status [unit]

Esimerkiksi yllä olevassa kuvassa media-samba.mount on epäonnistuneessa tilassa. Juostaan.

systemctl status media-samba.mount

Voimme nähdä, että media-samba.mount epäonnistui, koska isäntäkoneen dev1 asennusprosessi ei löytänyt verkkojakoa osoitteessa //192.168.0.10/gacanepa.

Palvelujen käynnistäminen tai lopettaminen

Kun verkkojako //192.168.0.10/gacanepa tulee saataville, yritetään käynnistää, sitten lopettaa ja lopuksi käynnistää yksikkö media-samba.mount uudelleen. Kunkin toiminnon suorittamisen jälkeen suoritetaan systemctl status media-samba.mount sen tilan tarkistamiseksi.

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

Palvelun ottaminen käyttöön tai poistaminen käytöstä käynnistyksen aikana

Kohdassa systemd voit ottaa palvelun käyttöön tai poistaa sen käytöstä sen käynnistyessä.

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

Palvelun automaattisen käynnistyksen ottaminen käyttöön tai poistaminen käytöstä sisältää symbolisten linkkien lisäämisen tai poistamisen /etc/systemd/system/multi-user.target.wants-hakemistosta.

Vaihtoehtoisesti voit selvittää palvelun nykyisen tilan (käytössä tai poissa käytöstä) komennolla.

systemctl is-enabled [service]

Esimerkiksi,

systemctl is-enabled postfix.service

Lisäksi voit käynnistää tai sammuttaa järjestelmän uudelleen käyttämällä.

systemctl reboot
systemctl shutdown

Nousukas

Upstart on tapahtumapohjainen korvike /sbin/init-daemonille ja syntyi tarpeesta käynnistää palvelut vain silloin, kun niitä tarvitaan (myös valvomalla niitä heidän ollessaan ovat käynnissä) ja käsittelevät tapahtumia niiden tapahtuessa, mikä ylittää perinteisen riippuvuuspohjaisen sysvinit-järjestelmän.

Se kehitettiin alun perin Ubuntu-jakelua varten, mutta sitä käytetään Red Hat Enterprise Linux 6.0:ssa. Vaikka se oli tarkoitettu käytettäväksi kaikissa Linux-jakeluissa sysvinitin korvikkeena, systemd varjossi sen ajan myötä. Mark Shuttleworth (Canonical Ltd.:n perustaja) ilmoitti 14. helmikuuta 2014, että Ubuntun tulevat julkaisut käyttäisivät systemd:tä oletusinit-daemonina.

Koska järjestelmän SysV-käynnistyskomentosarja on ollut niin yleinen niin kauan, monet ohjelmistopaketit sisältävät SysV-käynnistyskomentosarjat. Upstart tarjoaa tällaisten pakettien sovittamiseksi yhteensopivuustilan: Se suorittaa SysV-käynnistyskomentosarjat tavallisissa paikoissa (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d tai vastaava sijainti). Jos siis asennamme paketin, joka ei vielä sisällä Upstart-määrityskomentosarjaa, sen pitäisi silti käynnistyä tavalliseen tapaan.

Lisäksi, jos olemme asentaneet apuohjelmia, kuten chkconfig, sinun pitäisi pystyä käyttämään niitä SysV-pohjaisten palveluiden hallintaan aivan kuten me tekisimme sysvinit-pohjaisissa järjestelmissä.

Upstart-skriptit tukevat myös palvelujen käynnistämistä tai pysäyttämistä useampaan toimintoon perustuen kuin SysV-käynnistyskomentosarjat; Upstart voi esimerkiksi käynnistää palvelun aina, kun tietty laitteisto on liitetty.

Upstartia ja sen alkuperäisiä komentosarjoja käyttävä järjestelmä korvaa yksinomaan /etc/inittab-tiedoston ja ajotasokohtaiset SysV-käynnistyskomentosarjahakemistot .conf-tiedostolla. komentosarjat /etc/init-hakemistossa.

Nämä *.conf-skriptit (tunnetaan myös työnmäärityksinä) koostuvat yleensä seuraavista:

    1. Prosessin kuvaus.
    2. Ajotasot, joilla prosessin pitäisi suorittaa, tai tapahtumat, joiden pitäisi käynnistää se.
    3. Ajotasot, joilla prosessi tulisi pysäyttää, tai tapahtumat, joiden pitäisi pysäyttää se.
    4. Vaihtoehdot.
    5. Komento käynnistää prosessi.

Esimerkiksi,

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

Jos haluat ottaa muutokset käyttöön, sinun on kehotettava upstart-ohjelmaa lataamaan kokoonpanonsa uudelleen.

initctl reload-configuration

Aloita sitten työsi kirjoittamalla seuraava komento.

sudo start yourjobname

Missä työnnimi on sen työn nimi, joka on lisätty aiemmin yourjobname.conf-komentosarjalla.

Täydellisempi ja yksityiskohtaisempi Upstart-viiteopas on saatavilla projektin web-sivustolla valikosta "keittokirja".

Yhteenveto

Linuxin käynnistysprosessin tuntemus on välttämätön, jotta voit tehdä vianmääritystehtäviä sekä mukauttaa tietokoneen suorituskykyä ja käynnissä olevia palveluita tarpeisiisi.

Tässä artikkelissa olemme analysoineet, mitä tapahtuu siitä hetkestä, kun painat Virta-kytkintä käynnistääksesi koneen, kunnes saat täysin toimivan käyttöliittymän. Toivon, että olet oppinut lukemaan sitä yhtä paljon kuin minä kootessani sitä. Voit vapaasti jättää kommenttisi tai kysymyksesi alle. Odotamme aina innolla lukijoidemme kuulemista!