LFCS: Upravljanje procesom pokretanja sistema i uslugama (SysVinit, Systemd i Upstart) - 7. dio


Prije nekoliko mjeseci, Linux fondacija najavila je LFCS (Linux Foundation Certified Sysadmin) certifikat, uzbudljiv novi program čiji je cilj omogućiti pojedincima sa svih krajeva svijeta da dobiti certifikat za obavljanje osnovnih do srednjih zadataka administracije sistema na Linux sistemima. Ovo uključuje podršku već pokrenutim sistemima i uslugama, zajedno sa pronalaženjem i analizom problema iz prve ruke, plus mogućnost odlučivanja kada treba pokrenuti probleme inženjerskim timovima.

Sljedeći video opisuje kratak uvod u program sertifikacije Linux Foundation.

Ovaj post je 7. dio serije od 10 tutorijala, ovdje u ovom dijelu ćemo objasniti kako upravljati procesom pokretanja Linux sistema i uslugama koje su potrebne za LFCS sertifikacijski ispit.

Upravljanje procesom pokretanja Linuxa

Proces pokretanja Linux sistema sastoji se od nekoliko faza, od kojih je svaka predstavljena različitom komponentom. Sljedeći dijagram ukratko rezimira proces pokretanja i prikazuje sve glavne uključene komponente.

Kada pritisnete dugme za Napajanje na vašem računaru, firmver koji je pohranjen u EEPROM čip na matičnoj ploči pokreće POST ( Samotestiranje pri uključivanju) za provjeru stanja hardverskih resursa sistema. Kada je POST završen, firmver tada pretražuje i učitava 1. stepen pokretač, koji se nalazi u MBR ili u EFI particiju prvog dostupnog diska i daje kontrolu nad njim.

MBR metoda

MBR se nalazi u prvom sektoru diska koji je označen kao pokretan u postavkama BIOS i veličine je 512 bajtova.

  1. Prvih 446 bajtova: Bootloader sadrži i izvršni kod i tekst poruke o grešci.
  2. Sljedeća 64 bajta: Tablica particija sadrži zapis za svaku od četiri particije (primarne ili proširene). Između ostalog, svaki zapis označava status (aktivan/neaktivan), veličinu i početni/krajnji sektor svake particije.
  3. Posljednja 2 bajta: Magični broj služi kao provjera valjanosti MBR-a.

Sljedeća naredba izvodi sigurnosnu kopiju MBR (u ovom primjeru, /dev/sda je prvi čvrsti disk). Rezultirajući fajl, mbr.bkp može biti od koristi ako se tabela particija ošteti, na primjer, čineći sistem nemogućim za pokretanje.

Naravno, da bismo ga kasnije koristili ako se ukaže potreba, morat ćemo ga sačuvati i pohraniti negdje drugdje (kao što je USB disk, na primjer). Ta datoteka će nam pomoći da vratimo MBR i pokrenuće nas još jednom ako i samo ako u međuvremenu ne promijenimo raspored tvrdog diska.

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

Vraćanje MBR-a
dd if=mbr.bkp of=/dev/sda bs=512 count=1

EFI/UEFI metoda

Za sisteme koji koriste EFI/UEFI metodu, UEFI firmver čita svoje postavke kako bi odredio koja UEFI aplikacija treba biti pokrenuta i odakle (tj. na kojem disku i particiji se EFI particija se nalazi).

Zatim se učitava i pokreće 2. faza pokretač pokretanja (aka boot manager). GRUB [GRand Unified Boot] je najčešće korišteni upravitelj pokretanja u Linuxu. Jedna od dvije različite verzije može se naći na većini sistema koji se danas koriste.

  1. GRUB naslijeđeni konfiguracijski fajl: /boot/grub/menu.lst (starije distribucije, nisu podržane od EFI/UEFI firmvera).
  2. GRUB2 konfiguracijski fajl: najvjerovatnije, /etc/default/grub.

Iako ciljevi LFCS ispita ne zahtijevaju izričito znanje o GRUB internim elementima, ako ste hrabri i možete sebi priuštiti da zabrljate svoj sistem (možda biste željeli isprobati prvo na virtuelnoj mašini, za svaki slučaj), morate da pokrenete.

update-grub

Kao root nakon izmjene GRUB-ove konfiguracije kako bi se promjene primijenile.

U osnovi, GRUB učitava zadano kernel i initrd ili initramfs sliku. Ukratko, initrd ili initramfs pomažu da se izvrši detekcija hardvera, učitavanje modula kernela i otkrivanje uređaja neophodno da se montira pravi root fajl sistem.

Jednom kada je pravi root fajl sistem pokrenut, kernel izvršava upravitelj sistema i usluga (init ili systemd, čija je identifikacija procesa ili PID uvijek 1) da započne normalan korisnički- space boot proces kako bi se predstavio korisnički interfejs.

I init i systemd su demoni (pozadinski procesi) koji upravljaju drugim demonima, kao prvi servis koji se pokreće (tokom pokretanja) i posljednji servis koji se završava (tokom gašenja).

Pokretanje usluga (SysVinit)

Koncept nivoa pokretanja u Linuxu specificira različite načine korištenja sistema kontrolirajući koje se usluge izvode. Drugim rečima, nivo pokretanja kontroliše koji zadaci se mogu izvršiti u trenutnom stanju izvršavanja=nivo izvršavanja (a koji ne mogu).

Tradicionalno, ovaj proces pokretanja se izvodio na osnovu konvencija koje su nastale sa System V UNIX, pri čemu je sistem proslijedio izvršavanje kolekcija skripti koje pokreću i zaustavljaju usluge kada mašina uđe u određeni nivo pokretanja (koji, drugim riječima, , je drugačiji način rada sistema).

Unutar svakog nivoa pokretanja, pojedinačne usluge se mogu postaviti da se pokreću ili da se ugase ako su pokrenute. Najnovije verzije nekih velikih distribucija odmiču se od standarda System V u korist prilično nove usluge i upravitelja sistema pod nazivom systemd (što je skraćenica za sistemski demon), ali obično podržava sysv komande u svrhu kompatibilnosti. To znači da možete pokrenuti većinu dobro poznatih sysv init alata u sistemskoj distribuciji.

Pročitajte također: Zašto 'systemd' zamjenjuje 'init' u Linuxu

Osim pokretanja sistemskog procesa, init gleda u datoteku /etc/inittab da odluči koji nivo pokretanja mora biti unesen.

Runlevel

Opis

0

Zaustavite sistem. Nivo pokretanja 0 je posebno prelazno stanje koje se koristi za brzo gašenje sistema.

1

Također pod nazivom s, ili S, ovaj nivo pokretanja se ponekad naziva način održavanja. Koje su usluge, ako ih ima, pokrenute na ovom nivou pokretanja, razlikuju se ovisno o distribuciji. Obično se koristi za održavanje sistema na niskom nivou koje može biti narušeno normalnim radom sistema.

2

Višekorisnički. Na Debian sustavima i derivatima, ovo je zadana razina pokretanja i uključuje -ako je dostupno- grafičku prijavu. Na Red-Hat sistemima, ovo je višekorisnički način rada bez umrežavanja.

3

Na Red-Hat sistemima, ovo je podrazumevani višekorisnički režim, koji pokreće sve osim grafičkog okruženja. Ova razina pokretanja i razine 4 i 5 obično se ne koriste na sistemima baziranim na Debianu.

4

Obično se ne koristi prema zadanim postavkama i stoga je dostupan za prilagođavanje.

5

Na sistemima baziranim na Red-Hat-u, puni višekorisnički način rada sa GUI prijavom. Ovaj nivo pokretanja je kao nivo 3, ali sa dostupnom prijavom na GUI.

6

Ponovo pokrenite sistem.

Za prebacivanje između nivoa pokretanja, možemo jednostavno izdati promjenu nivoa pokretanja pomoću naredbe init: init N (gdje je N jedan od gore navedenih nivoa pokretanja). Imajte na umu da ovo nije preporučeni način za prebacivanje pokrenutog sistema na drugi nivo pokretanja jer ne daje upozorenje postojećim prijavljenim korisnicima (čime uzrokuje gubitak posla i nenormalan završetak procesa).

Umjesto toga, naredbu shutdown treba koristiti za ponovno pokretanje sistema (koja prvo šalje poruku upozorenja svim prijavljenim korisnicima i blokira sve daljnje prijave; zatim signalizira init da promijeni nivo pokretanja); međutim, zadani nivo pokretanja (onaj na koji će se sistem pokrenuti) prvo se mora urediti u datoteci /etc/inittab.

Iz tog razloga, slijedite ove korake za pravilno prebacivanje između nivoa pokretanja. Kao root, potražite sljedeći red u /etc/inittab.

id:2:initdefault:

i promijenite broj 2 za željeni nivo pokretanja sa vašim preferiranim uređivačem teksta, kao što je vim (opisano u Kako koristiti vi/vim editor u Linuxu – 2. dio ove serije).

Zatim pokrenite kao root.

shutdown -r now

Ta posljednja komanda će ponovo pokrenuti sistem, uzrokujući da se pokrene na navedenom nivou pokretanja tokom sljedećeg pokretanja i pokrenut će skripte koje se nalaze u /etc/rc[runlevel].d imenik kako bi se odlučilo koje usluge treba pokrenuti, a koje ne. Na primjer, za nivo pokretanja 2 u sljedećem sistemu.

Upravljajte uslugama koristeći chkconfig

Da omogućimo ili onemogućimo sistemske usluge pri pokretanju, koristit ćemo naredbu chkconfig u CentOS/openSUSE i sysv-rc-conf u Debianu i derivatima. Ovaj alat nam također može pokazati koje je unaprijed konfigurirano stanje usluge za određeni nivo pokretanja.

Pročitajte također: Kako zaustaviti i onemogućiti neželjene usluge u Linuxu

Ispis konfiguracije nivoa pokretanja za uslugu.

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

Na gornjoj slici možemo vidjeti da je postfix postavljen da se pokrene kada sistem uđe u nivoe pokretanja 2 do 5, dok je mysqld b> će se po defaultu izvoditi za nivoe pokretanja 2 do 4. Pretpostavimo sada da ovo nije očekivano ponašanje.

Na primjer, trebamo uključiti mysqld za nivo pokretanja 5 i isključiti postfix za nivoe pokretanja 4 i 5. Evo šta bismo uradili u svakom slučaju (pokrenite sljedeće komande kao root).

Omogućavanje usluge za određeni nivo pokretanja
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Onemogućavanje usluge za određene nivoe pokretanja
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

Sada ćemo obavljati slične zadatke u Debian-baziranom sistemu koristeći sysv-rc-conf.

Upravljajte uslugama koristeći sysv-rc-conf

Konfiguriranje usluge da se automatski pokrene na određenom nivou pokretanja i spriječi njeno pokretanje na svim ostalim.

1. Koristimo sljedeću naredbu da vidimo koji su nivoi pokretanja na kojima je mdadm konfiguriran za pokretanje.

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

2. Koristit ćemo sysv-rc-conf da spriječimo mdadm da se pokrene na svim nivoima pokretanja osim na 2. Samo označite ili poništite (razmaknicom) po želji (možete se pomicati gore, dolje, lijevo i desno pomoću tipki sa strelicama).

sysv-rc-conf

Zatim pritisnite q da napustite.

3. Ponovo ćemo pokrenuti sistem i ponovo pokrenuti naredbu iz KORAKA 1.

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

Na gornjoj slici možemo vidjeti da je mdadm konfiguriran da se pokreće samo na nivou pokretanja 2.

Šta je sa systemd-om?

systemd je još jedan upravitelj usluga i sistema koji je usvojen u nekoliko glavnih Linux distribucija. Cilj mu je omogućiti da se više obrade obavi paralelno tokom pokretanja sistema (za razliku od sysvinita, koji uvijek ima tendenciju da bude sporiji jer pokreće procese jedan po jedan, provjerava da li jedan zavisi od drugog i čeka demone za pokretanje kako bi se moglo pokrenuti više usluga) i da služe kao dinamičko upravljanje resursima za sistem koji radi.

Dakle, usluge se pokreću kada je potrebno (kako bi se izbjeglo trošenje sistemskih resursa) umjesto da se pokreću bez dobrog razloga tokom pokretanja.

Gledajući status svih procesa koji se pokreću na vašem sistemu, i systemd izvornih i SysV usluga, pokrenite sljedeću naredbu.

systemctl

Kolona LOAD pokazuje da li je definicija jedinice (pogledajte kolonu UNIT, koja prikazuje uslugu ili bilo šta što održava systemd) ispravno učitana, dok je ACTIVE i SUB kolone pokazuju trenutni status takve jedinice.

Prikaz informacija o trenutnom statusu usluge

Kada kolona AKTIVNO ukazuje da status jedinice nije aktivan, možemo provjeriti šta se dogodilo pomoću.

systemctl status [unit]

Na primjer, na gornjoj slici, media-samba.mount je u neuspjelom stanju. bježimo.

systemctl status media-samba.mount

Vidimo da media-samba.mount nije uspio jer proces montiranja na hostu dev1 nije mogao pronaći mrežni dio na //192.168.0.10/gacanepa.

Pokretanje ili zaustavljanje usluga

Kada mrežni dijeljeni //192.168.0.10/gacanepa postane dostupan, pokušajmo pokrenuti, zatim zaustaviti i na kraju ponovo pokrenuti jedinicu media-samba.mount. Nakon izvođenja svake radnje, pokrenimo systemctl status media-samba.mount da provjerimo njegov status.

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

Omogućavanje ili onemogućavanje pokretanja usluge tokom pokretanja

Pod systemd možete omogućiti ili onemogućiti uslugu kada se pokrene.

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

Proces omogućavanja ili onemogućavanja automatskog pokretanja usluge pri pokretanju sistema sastoji se od dodavanja ili uklanjanja simboličkih veza u direktoriju /etc/systemd/system/multi-user.target.wants.

Alternativno, možete saznati trenutni status usluge (omogućeno ili onemogućeno) pomoću naredbe.

systemctl is-enabled [service]

Na primjer,

systemctl is-enabled postfix.service

Osim toga, možete ponovo pokrenuti ili isključiti sistem pomoću.

systemctl reboot
systemctl shutdown

Upstart

Upstart je zamjena zasnovana na događajima za /sbin/init daemon i nastala je iz potrebe za pokretanjem usluga samo kada su potrebne (također nadzire ih dok se se pokreću) i rukovanje događajima kako se događaju, čime se nadmašuje klasični sistem sysvinit zasnovan na zavisnosti.

Prvobitno je razvijen za Ubuntu distribuciju, ali se koristi u Red Hat Enterprise Linuxu 6.0. Iako je bio namijenjen da bude prikladan za implementaciju u svim distribucijama Linuxa kao zamjena za sysvinit, s vremenom ga je zasjenio systemd. 14. februara 2014, Mark Shuttleworth (osnivač Canonical Ltd.) najavio je da će buduća izdanja Ubuntua koristiti systemd kao zadani init demon.

Budući da je SysV skripta za pokretanje tako dugo bila uobičajena, veliki broj softverskih paketa uključuje SysV skripte za pokretanje. Da bi se prilagodili takvim paketima, Upstart pruža način kompatibilnosti: pokreće skripte za pokretanje SysV na uobičajenim lokacijama (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d, ili slična lokacija). Stoga, ako instaliramo paket koji još ne uključuje Upstart konfiguracijsku skriptu, on bi se i dalje trebao pokrenuti na uobičajen način.

Štaviše, ako imamo instalirane pomoćne programe kao što je chkconfig, trebali biste biti u mogućnosti da ih koristite za upravljanje vašim uslugama baziranim na SysV-u baš kao što bismo to učinili na sistemima baziranim na sysvinit-u.

Upstart skripte takođe podržavaju pokretanje ili zaustavljanje usluga na osnovu šireg spektra radnji nego što to čine skripte za pokretanje SysV; na primjer, Upstart može pokrenuti uslugu kad god je priključen određeni hardverski uređaj.

Sistem koji koristi Upstart i njegove izvorne skripte isključivo zamjenjuje /etc/inittab datoteku i direktorije skripti pokretanja SysV specifične za nivo pokretanja sa .conf skripte u /etc/init direktoriju.

Ove *.conf skripte (poznate i kao definicije posla) općenito se sastoje od sljedećeg:

    1. Opis procesa.
    2. Nivoi pokretanja na kojima bi se proces trebao pokrenuti ili događaji koji bi ga trebali pokrenuti.
    3. Nivoi pokretanja na kojima bi proces trebao biti zaustavljen ili događaji koji bi ga trebali zaustaviti.
    4. Opcije.
    5. Naredba za pokretanje procesa.

Na primjer,

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

Da biste primijenili promjene, morat ćete reći upstartu da ponovo učita svoju konfiguraciju.

initctl reload-configuration

Zatim započnite svoj posao upisivanjem sljedeće naredbe.

sudo start yourjobname

Gdje je yourjobname naziv posla koji je ranije dodan sa skriptom yourjobname.conf.

Potpuniji i detaljniji referentni vodič za Upstart dostupan je na web stranici projekta pod izbornikom “Kuharica”.

Sažetak

Poznavanje procesa pokretanja Linuxa je neophodno kako bi vam pomoglo u rješavanju problema, kao i pri prilagođavanju performansi računala i pokretanju usluga vašim potrebama.

U ovom članku analizirali smo šta se dešava od trenutka kada pritisnete prekidač Power da uključite mašinu dok ne dobijete potpuno operativan korisnički interfejs. Nadam se da ste naučili čitajući ga isto koliko i ja dok sam ga sastavljao. Slobodno ostavite svoje komentare ili pitanja ispod. Uvijek se radujemo čuti od naših čitalaca!