LFCS: Sistēmas startēšanas procesa un pakalpojumu pārvaldība (SysVinit, Systemd un Upstart) - 7. daļa


Pirms pāris mēnešiem Linux fonds paziņoja par LFCS (Linux Foundation Certified Sysadmin) sertifikātu - jaunu, aizraujošu programmu, kuras mērķis ir ļaut personām no visiem pasaules galiem iegūt sertifikātu pamata un vidēja līmeņa sistēmas administrēšanas uzdevumu veikšanai Linux sistēmās. Tas ietver jau darbināmu sistēmu un pakalpojumu atbalstīšanu, kā arī problēmu meklēšanu un analīzi no pirmavotiem, kā arī spēju izlemt, kad izvirzīt jautājumus inženieru komandām.

Šajā videoklipā ir aprakstīts īss ievads par Linux Foundation sertifikācijas programmu.

Šis ieraksts ir 10. apmācības sērijas 7. daļa. Šeit, šajā daļā, mēs paskaidrosim, kā pārvaldīt Linux sistēmas startēšanas procesu un pakalpojumus, kas nepieciešami LFCS sertifikācijas eksāmenam.

Linux startēšanas procesa pārvaldība

Linux sistēmas sāknēšanas process sastāv no vairākām fāzēm, no kurām katru attēlo atšķirīgs komponents. Šī diagramma īsumā apkopo sāknēšanas procesu un parāda visus galvenos iesaistītos komponentus.

Nospiežot datora pogu Barošana , programmaparatūra, kas mātesplatē ir saglabāta mikroshēmā EEPROM , inicializē POST ( Ieslēgšanas pašpārbaude ), lai pārbaudītu sistēmas aparatūras resursu stāvokli. Kad POST ir pabeigts, programmaparatūra pēc tam meklē un ielādē sāknēšanas iekrāvēju 1. posms , kas atrodas MBR vai EFI pirmā pieejamā diska nodalījums un piešķir tam kontroli.

MBR atrodas diska pirmajā sektorā, kas BIOS iestatījumos ir atzīmēts kā sāknējams, un ir 512 baitu liels.

  1. Pirmie 446 baiti : sāknēšanas ielādētājs satur gan izpildāmo kodu, gan kļūdas ziņojuma tekstu.
  2. Nākamie 64 baiti : nodalījumu tabulā ir ieraksts katram no četriem nodalījumiem (primārais vai paplašinātais). Cita starpā katrs ieraksts norāda katra nodalījuma statusu (aktīvs/neaktīvs), lielumu un sākuma/beigu sektorus.
  3. Pēdējie 2 baiti : burvju numurs kalpo kā MBR validācijas pārbaude.

Šī komanda veic MBR dublējumu (šajā piemērā /dev/sda ir pirmais cietais disks). Iegūtais fails mbr.bkp var būt noderīgs, ja nodalījumu tabula kļūst bojāta, piemēram, padarot sistēmu par palaižamu.

Protams, lai vēlāk to izmantotu, ja rodas vajadzība, mums tas būs jāsaglabā un jāuzglabā kaut kur citur (piemēram, USB disks, piemēram). Šis fails palīdzēs mums atjaunot MBR un mūs atkal iesāks tikai tad, ja tikmēr nemainīsim cietā diska izkārtojumu.

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

Sistēmām, kurās tiek izmantota metode EFI / UEFI , UEFI programmaparatūra nolasa iestatījumus, lai noteiktu, kura UEFI lietojumprogramma ir jāpalaiž un no kurienes (ti, kurā diskā un nodalījumā Atrodas EFI nodalījums).

Pēc tam tiek ielādēts un palaists sāknēšanas ielādētājs 2. posms (jeb sāknēšanas pārvaldnieks). GRUB [ GRand Unified Boot ] ir visbiežāk izmantotais sāknēšanas pārvaldnieks Linux. Viena no divām atšķirīgajām versijām ir atrodama lielākajā daļā mūsdienās izmantoto sistēmu.

  1. GRUB mantotā konfigurācijas fails : /boot/grub/menu.lst (vecāki izplatījumi, kurus neatbalsta EFI/UEFI programmaparatūra).
  2. GRUB2 konfigurācijas fails : visticamāk,/etc/default/grub.

Kaut arī eksāmena LFCS mērķi neprasa nepārprotamas zināšanas par GRUB iekšējiem līdzekļiem, ja esat drosmīgs un varat atļauties sajaukt savu sistēmu (iespējams, vēlēsities to izmēģināt) vispirms virtuālajā mašīnā, katram gadījumam), jums jāpalaiž.

# update-grub

sakne pēc GRUB konfigurācijas modificēšanas, lai veiktu izmaiņas.

Būtībā GRUB ielādē noklusējuma kodolu un initrd vai initramfs attēlu. Dažos vārdos initrd vai initramfs palīdz veikt aparatūras noteikšanu, kodola moduļa ielādi un ierīces atklāšanu, kas nepieciešama, lai uzstādītu reālo sakņu failu sistēmu.

Kad reālā saknes failu sistēma ir izveidota, kodols izpilda sistēmas un pakalpojumu pārvaldnieku ( init vai systemd , kuru procesa identifikācija vai PID vienmēr ir 1), lai sāktu parasto lietotāja kosmosa sāknēšanas process, lai parādītu lietotāja saskarni.

Gan init , gan systemd ir dēmoni (fona procesi), kas pārvalda citus dēmonus kā pirmais pakalpojums, kas jāsāk (sāknēšanas laikā), un pēdējais pakalpojums, kas jāpārtrauc (izslēgšanas laikā).

Pakalpojumu sākšana (SysVinit)

Runlevels Linux jēdziens nosaka dažādus sistēmas izmantošanas veidus, kontrolējot, kuri pakalpojumi darbojas. Citiem vārdiem sakot, darbības līmenis kontrolē to, kādus uzdevumus var izpildīt pašreizējā izpildes stāvoklī = darbības līmenis (un kurus nevar).

Tradicionāli šis palaišanas process tika veikts, pamatojoties uz konvencijām, kas radušās no System V UNIX , sistēmai nododot izpildot skriptu kolekcijas, kas sāk un pārtrauc pakalpojumus, mašīnai ievadot konkrētu darbības līmeni (kas, citiem vārdiem sakot, , ir atšķirīgs sistēmas darbības režīms).

Katrā darbības līmenī atsevišķus pakalpojumus var iestatīt darboties vai izslēgt, ja tie darbojas. Dažu galveno izplatīšanas versiju jaunākās versijas attālinās no standarta System V par labu diezgan jaunam pakalpojumam un sistēmas pārvaldniekam ar nosaukumu systemd (kas nozīmē sistēmas dēmonu), taču parasti saderības nolūkos atbalstiet komandas sysv . Tas nozīmē, ka lielāko daļu labi zināmo sysv init rīku varat palaist uz systemd balstītā izplatīšanā.

Lasīt arī : kāpēc "systemd" aizstāj "init" operētājsistēmā Linux

Papildus sistēmas procesa sākšanai, init skatās failu /etc/inittab , lai izlemtu, kāds darbības līmenis jāievada.

Lai pārslēgtos starp darbības līmeņiem, mēs vienkārši varam izdot darbības līmeņa izmaiņas, izmantojot komandu init : init N (kur N ir viens no iepriekš uzskaitītajiem darbības līmeņiem). Lūdzu, ņemiet vērā, ka tas nav ieteicamais veids, kā palaist skriešanas sistēmu uz citu darbības līmeni, jo tas nebrīdina esošos reģistrētos lietotājus (tādējādi liekot viņiem zaudēt darbu un procesus pārtraukt neparasti).

Tā vietā, lai restartētu sistēmu, jāizmanto komanda shutdown (kas vispirms nosūta brīdinājuma ziņojumu visiem reģistrētajiem lietotājiem un bloķē jebkādus turpmākus pieteikšanās gadījumus; pēc tam tā norāda init, lai pārslēgtos darbības līmeņus); tomēr vispirms failā /etc/inittab ir jārediģē noklusējuma darbības līmenis (tas, uz kuru sistēma sāksies).

Šī iemesla dēļ veiciet šīs darbības, lai pareizi pārslēgtos starp darbības līmeņiem. Kā saknes meklējiet šādu rindu /etc/inittab .

id:2:initdefault:

un ar vēlamo teksta redaktoru, piemēram, vim (aprakstīts sadaļā Kā izmantot vi/vim redaktoru Linux - šīs sērijas 2. daļa), mainiet vēlamā palaist līmeņa numuru 2 .

Pēc tam palaidiet kā root.

# shutdown -r now

Šī pēdējā komanda restartēs sistēmu, liekot tai sākties norādītajā darbības līmenī nākamās sāknēšanas laikā, un palaidīs skriptus, kas atrodas /etc/rc[runlevel].d direktoriju, lai izlemtu, kuri pakalpojumi ir jāuzsāk un kuri ne. Piemēram, 2. līmeņa līmenim šādā sistēmā.

Lai iespējotu vai atspējotu sistēmas pakalpojumus sāknēšanas laikā, mēs izmantosim komandu chkconfig CentOS/openSUSE un sysv-rc-conf Debian un atvasinājumos. Šis rīks var arī parādīt, kāds ir iepriekš konfigurēts pakalpojuma stāvoklis konkrētam darbības līmenim.

Lasīt arī : kā apturēt un atspējot nevēlamus pakalpojumus Linux

Pakalpojuma darbības līmeņa konfigurācijas uzskaitīšana.

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

Iepriekš redzamajā attēlā mēs varam redzēt, ka postfix ir iestatīts sākt, kad sistēma ievada darbības līmeņus no 2 līdz 5 , turpretī mysqld pēc noklusējuma darbosies darbības līmeņiem 2 līdz 4 . Tagad pieņemsim, ka tā nav gaidītā uzvedība.

Piemēram, mums ir jāieslēdz arī mysqld darbības līmenim 5 un jāizslēdz postfix 4. un 5. darbības līmenim. Lūk, kā mēs rīkotos katrā gadījumā (palaidiet sekojošās komandas kā saknes).

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

Tagad mēs veiksim līdzīgus uzdevumus sistēmā Debian , izmantojot sysv-rc-conf .

Pakalpojuma konfigurēšana tā, lai tā automātiski sāktu darboties noteiktā darbības līmenī un neļautu tai startēt visiem citiem.

1. Izmantosim šādu komandu, lai redzētu, kādi ir darbības līmeņi, kuros ir konfigurēts sākums mdadm .

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

2. Mēs izmantosim sysv-rc-conf , lai novērstu mdadm startēšanu visos darbības līmeņos, izņemot 2 . Vienkārši atzīmējiet vai noņemiet atzīmi (ar atstarpes taustiņu) pēc vēlēšanās (ar bultiņu taustiņiem varat pārvietoties uz augšu, uz leju, pa kreisi un pa labi).

# sysv-rc-conf

Pēc tam nospiediet q , lai izietu.

3. Mēs restartēsim sistēmu un palaidīsim komandu no STEP 1 .

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

Iepriekš redzamajā attēlā mēs varam redzēt, ka mdadm ir konfigurēts tā, lai sāktu tikai ar darbības līmeni 2 .

Kas par sistēmu?

systemd ir vēl viens pakalpojumu un sistēmas pārvaldnieks, kuru pieņem vairāki lieli Linux izplatītāji. Tās mērķis ir ļaut sistēmas startēšanas laikā paralēli veikt vairāk apstrādes (atšķirībā no sysvinit , kas vienmēr mēdz būt lēnāks, jo tas sāk procesus pa vienam, pārbauda, vai viens ir atkarīgs no otra, un gaida lai palaistu vairāk pakalpojumu) un kalpotu kā dinamiska resursu pārvaldība darbojošai sistēmai.

Tādējādi pakalpojumi tiek uzsākti pēc nepieciešamības (lai izvairītos no sistēmas resursu patēriņa), nevis tiek palaisti bez nopietna iemesla sāknēšanas laikā.

Apskatot visu sistēmā darbojošos procesu statusu, gan systemd vietējo, gan SysV pakalpojumu, izpildiet šo komandu.

# systemctl

Kolonnā LOAD tiek parādīts, vai vienības definīcija (skatiet kolonnu UNIT , kurā redzams pakalpojums vai viss, ko uztur systemd) ir pareizi ielādēta, kamēr ACTIVE Kolonnās un SUB tiek parādīts šādas vienības pašreizējais statuss.

Kad slejā AKTĪVA tiek norādīts, ka vienības statuss nav aktīvs, mēs varam pārbaudīt, kas noticis, izmantojot.

# systemctl status [unit]

Piemēram, iepriekš redzamajā attēlā media-samba.mount stāvoklis ir neizdevies. Skrienam.

# systemctl status media-samba.mount

Mēs varam redzēt, ka media-samba.mount neizdevās, jo resursdatora dev1 pievienošanas process nevarēja atrast tīkla koplietojumu vietnē //192.168.0.10/gacanepa .

Pakalpojumu sākšana vai pārtraukšana

Kad tīkla koplietošana //192.168.0.10/gacanepa būs pieejama, mēģināsim sākt, pēc tam apstāties un visbeidzot restartēt vienību media-samba.mount . Pēc katras darbības veikšanas palaidīsim systemctl status media-samba.mount, lai pārbaudītu tās statusu.

# 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

Sadaļā systemd varat iespējot vai atspējot pakalpojumu, kad tas tiek palaists.

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

Pakalpojuma automātiskas palaišanas vai atspējošanas palaišanas laikā process sākas ar simbolisku saišu pievienošanu vai noņemšanu direktorijā /etc/systemd/system/multi-user.target.wants .

Alternatīvi, ar komandu varat uzzināt pakalpojuma pašreizējo statusu (iespējots vai atspējots).

# systemctl is-enabled [service]

Piemēram,

# systemctl is-enabled postfix.service

Turklāt jūs varat atsāknēt vai izslēgt sistēmu ar.

# systemctl reboot
# systemctl shutdown

Upstart

Upstart ir uz notikumiem balstīts dēmona /sbin/init aizstājējs, un tas ir radies tikai tāpēc, ka ir nepieciešams sākt pakalpojumus tikai tad, kad tie ir nepieciešami (arī uzraugot tos, kamēr tie ir nepieciešami). darbojas) un rīkoties ar notikumiem, kad tie notiek, tādējādi pārspējot klasisko, uz atkarību balstīto sysvinit sistēmu.

Sākotnēji tas tika izstrādāts Ubuntu izplatīšanai, bet tiek izmantots Red Hat Enterprise Linux 6.0. Lai gan bija paredzēts, ka tas būtu piemērots izvietošanai visos Linux izplatījumos kā aizstājējs sysvinit , ar laiku to aizēnoja systemd . 2014. gada 14. februārī Marks Šatlvorts (Canonical Ltd. dibinātājs) paziņoja, ka nākamajos Ubuntu izlaidumos par noklusējuma init dēmonu tiks izmantota systemd.

Tā kā SysV sistēmas startēšanas skripts ir bijis tik izplatīts tik ilgu laiku, liels skaits programmatūras pakotņu ietver SysV startēšanas skriptus. Lai ievietotu šādas paketes, Upstart nodrošina saderības režīmu: Tas palaiž SysV startēšanas skriptus parastajās vietās ( /etc/rc.d/rc?.d , /etc/init.d/ rc? .d , /etc/rc?.d vai līdzīga atrašanās vieta). Tādējādi, ja mēs instalējam pakotni, kurā vēl nav iekļauts Upstart konfigurācijas skripts, tā joprojām ir jāpalaiž parastajā veidā.

Turklāt, ja esam instalējuši tādus utilītus kā chkconfig, jums vajadzētu būt iespējai tos izmantot, lai pārvaldītu savus SysV balstītos pakalpojumus tāpat kā mēs to darītu sysvinit sistēmās.

Upstart skripti atbalsta arī pakalpojumu sākšanu vai apturēšanu, pamatojoties uz daudzveidīgākām darbībām nekā SysV startēšanas skripti; piemēram, Upstart var palaist pakalpojumu, kad ir pievienota noteikta aparatūras ierīce.

Sistēma, kas izmanto Upstart un tā vietējos skriptus, tikai aizstāj failu /etc/inittab un palaišanas līmeņa SysV startēšanas skriptu direktorijus ar .conf skripti direktorijā /etc/init .

Šie * .conf skripti (saukti arī par darba definīcijām) parasti sastāv no sekojošās:

    1. procesa apraksts.
    2. Darbības līmeņi, kur procesam vajadzētu darboties, vai notikumi, kas to iedarbina.
    3. Darbības līmeņi, kur process jāpārtrauc, vai notikumi, kas to aptur.
    4. Iespējas.
    5. Komanda, lai sāktu procesu.

    Piemēram,

    # 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
    

    Lai lietotu izmaiņas, jums būs jāpasaka iesācējam atkārtoti ielādēt tā konfigurāciju.

    # initctl reload-configuration
    

    Pēc tam sāciet darbu, ierakstot šādu komandu.

    $ sudo start yourjobname
    

    Kur tavsvārds ir tā darba nosaukums, kas tika pievienots agrāk ar skriptu tavsvārds.konf .

    Pilnīgāka un detalizētāka Upstart uzziņu rokasgrāmata ir pieejama projekta tīmekļa vietnē izvēlnē “Pavārgrāmata”.

    Kopsavilkums

    Zināšanas par Linux sāknēšanas procesu ir nepieciešamas, lai palīdzētu jums veikt problēmu novēršanas uzdevumus, kā arī pielāgot datora veiktspēju un palaist pakalpojumus jūsu vajadzībām.

    Šajā rakstā mēs analizējām, kas notiek no brīža, kad nospiežat barošanas slēdzi, lai ieslēgtu mašīnu, līdz iegūstat pilnībā darbināmu lietotāja saskarni. Es ceru, ka jūs esat iemācījušies to lasīt tikpat daudz kā es, saliekot to kopā. Droši atstājiet savus komentārus vai jautājumus zemāk. Mēs vienmēr ceram dzirdēt mūsu lasītājus!