Vyhledávání na webu

LFCS: Správa procesu spouštění systému a služeb (SysVinit, Systemd a Upstart) - Část 7


Před několika měsíci Linux Foundation oznámila certifikaci LFCS (Linux Foundation Certified Sysadmin), vzrušující nový program, jehož cílem je umožnit jednotlivcům ze všech konců světa získat certifikaci v provádění základních až středně náročných úloh správy systému na systémech Linux. To zahrnuje podporu již běžících systémů a služeb, spolu s hledáním problémů a analýzou z první ruky, plus schopnost rozhodnout se, kdy upozornit na problémy inženýrské týmy.

Následující video popisuje stručný úvod do certifikačního programu Linux Foundation.

Tento příspěvek je částí 7 série 10 výukových programů, zde v této části vysvětlíme, jak spravovat proces spouštění systému Linux a služby, které jsou vyžadovány pro certifikační zkoušku LFCS.

Správa procesu spouštění systému Linux

Proces zavádění systému Linux se skládá z několika fází, z nichž každá je reprezentována jinou komponentou. Následující diagram stručně shrnuje proces spouštění a ukazuje všechny hlavní součásti, které se na něm podílejí.

Když na počítači stisknete tlačítko Napájení, firmware uložený v čipu EEPROM na základní desce inicializuje POST ( Power-On Self Test) ke kontrole stavu hardwarových prostředků systému. Po dokončení POST firmware vyhledá a načte zavaděč 1. fáze umístěný v MBR nebo v EFI oddíl prvního dostupného disku a dává mu kontrolu.

Metoda MBR

MBR se nachází v prvním sektoru disku označeném jako spouštěcí v nastavení BIOS a má velikost 512 bajtů.

  1. Prvních 446 bajtů: Bootloader obsahuje jak spustitelný kód, tak text chybové zprávy.
  2. Dalších 64 bajtů: Tabulka oddílů obsahuje záznam pro každý ze čtyř oddílů (primární nebo rozšířený). Každý záznam mimo jiné označuje stav (aktivní/neaktivní), velikost a počáteční/koncové sektory každého oddílu.
  3. Poslední 2 bajty: Magické číslo slouží jako kontrola platnosti MBR.

Následující příkaz provede zálohu MBR (v tomto příkladu je /dev/sda prvním pevným diskem). Výsledný soubor mbr.bkp se může hodit v případě, že by se poškodila tabulka oddílů, například kvůli nemožnosti spustit systém.

Abychom jej mohli později v případě potřeby použít, musíme jej samozřejmě uložit a uložit někde jinde (například USB disk). Tento soubor nám pomůže obnovit MBR a znovu nás rozjede, pokud mezitím nezměníme rozložení pevného disku.

Záloha MBR
dd if=/dev/sda of=mbr.bkp bs=512 count=1

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

Metoda EFI/UEFI

U systémů využívajících metodu EFI/UEFI firmware UEFI načte svá nastavení, aby určil, která aplikace UEFI se má spustit a odkud (tj. na kterém disku a oddílu oddíl EFI je umístěn).

Dále je načten a spuštěn zavaděč 2nd stage (neboli boot manager). GRUB [GRand Unified Boot] je nejčastěji používaný boot manager v Linuxu. Na většině dnes používaných systémů lze nalézt jednu ze dvou odlišných verzí.

  1. Starší konfigurační soubor GRUB: /boot/grub/menu.lst (starší distribuce, nepodporované firmwarem EFI/UEFI).
  2. Konfigurační soubor GRUB2: s největší pravděpodobností /etc/default/grub.

Ačkoli cíle zkoušky LFCS výslovně nevyžadují znalosti o vnitřních zařízeních GRUB, pokud jste odvážní a můžete si dovolit pokazit svůj systém (možná to budete chtít zkusit nejprve na virtuálním počítači, pro jistotu), musíte spustit.

update-grub

Jako root po úpravě konfigurace GRUB za účelem použití změn.

V podstatě GRUB načte výchozí kernel a obraz initrd nebo initramfs. Stručně řečeno, initrd nebo initramfs pomáhají provádět detekci hardwaru, načítání modulu jádra a zjišťování zařízení nezbytné pro připojení skutečného kořenového souborového systému.

Jakmile je spuštěn skutečný kořenový souborový systém, jádro spustí správce systému a služeb (init nebo systemd, jehož identifikace procesu nebo PID je vždy 1) a spustí normální uživatel- prostorový bootovací proces za účelem prezentace uživatelského rozhraní.

init i systemd jsou démoni (procesy na pozadí), kteří spravují jiné démony jako první službu, která se spouští (během bootování) a jako poslední službu ukončuje (během vypínání).

Spuštění služeb (SysVinit)

Koncept runlevels v Linuxu specifikuje různé způsoby použití systému řízením toho, které služby běží. Jinými slovy, úroveň běhu řídí, jaké úlohy lze provést v aktuálním stavu provádění=úroveň běhu (a které ne).

Tradičně se tento proces spouštění prováděl na základě konvencí pocházejících ze Systemu V UNIX, kdy systém předal spouštění kolekcí skriptů, které spouštějí a zastavují služby, když počítač vstoupil do určité úrovně běhu (což jinými slovy , je jiný režim běhu systému).

V rámci každé úrovně běhu lze jednotlivé služby nastavit tak, aby se spouštěly, nebo aby byly vypnuty, pokud běží. Nejnovější verze některých hlavních distribucí se odklánějí od standardu System V ve prospěch poměrně nového správce služeb a systému nazvaného systemd (což je zkratka pro systémový démon), ale obvykle podpora příkazů sysv pro účely kompatibility. To znamená, že většinu dobře známých init nástrojů sysv můžete spustit v distribuci založené na systemd.

Přečtěte si také: Proč „systemd“ nahrazuje „init“ v Linuxu

Kromě spuštění systémového procesu se init podívá do souboru /etc/inittab, aby rozhodl, jakou úroveň běhu je třeba zadat.

Runlevel

Popis

0

Zastavte systém. Runlevel 0 je speciální přechodný stav používaný k rychlému vypnutí systému.

1

Také s aliasem s nebo S se tato úroveň běhu někdy nazývá režim údržby. Jaké služby, pokud nějaké, jsou spuštěny na této úrovni běhu, se liší podle distribuce. Obvykle se používá pro údržbu systému na nízké úrovni, která může být narušena normálním provozem systému.

2

Multi uživatel. Na systémech a odvozeninách Debianu se jedná o výchozí úroveň běhu a zahrnuje - pokud je k dispozici - grafické přihlášení. Na systémech založených na Red-Hat se jedná o víceuživatelský režim bez sítě.

3

Na systémech založených na Red-Hat je to výchozí víceuživatelský režim, ve kterém běží vše kromě grafického prostředí. Tato úroveň běhu a úrovně 4 a 5 se obvykle nepoužívají na systémech založených na Debianu.

4

Ve výchozím nastavení se obvykle nepoužívá, a proto je k dispozici pro přizpůsobení.

5

Na systémech založených na Red-Hat, plný víceuživatelský režim s GUI přihlášením. Tato úroveň běhu je jako úroveň 3, ale s dostupným přihlášením do GUI.

6

Restartujte systém.

Pro přepínání mezi úrovněmi běhu můžeme jednoduše provést změnu úrovně běhu pomocí příkazu init: init N (kde N je jedna z výše uvedených úrovní běhu). Vezměte prosím na vědomí, že toto není doporučený způsob přechodu běžícího systému na jinou úroveň běhu, protože nedává žádné varování stávajícím přihlášeným uživatelům (což jim způsobuje ztrátu práce a abnormální ukončení procesů).

Místo toho by měl být k restartování systému použit příkaz shutdown (který nejprve odešle varovnou zprávu všem přihlášeným uživatelům a zablokuje všechna další přihlášení; poté signalizuje init k přepnutí úrovní běhu); avšak výchozí úroveň běhu (ta, ze které se systém spustí) musí být nejprve upravena v souboru /etc/inittab.

Z tohoto důvodu postupujte podle následujících kroků, abyste správně přepínali mezi úrovněmi běhu. Jako root vyhledejte následující řádek v /etc/inittab.

id:2:initdefault:

a změňte číslo 2 pro požadovanou úroveň běhu pomocí preferovaného textového editoru, jako je vim (popsáno v části Jak používat editor vi/vim v Linuxu – část 2 této série).

Dále spusťte jako root.

shutdown -r now

Tento poslední příkaz restartuje systém, což způsobí jeho spuštění na zadané úrovni běhu při příštím spouštění a spustí skripty umístěné v souboru /etc/rc[runlevel].d adresář, abyste mohli rozhodnout, které služby se mají spustit a které ne. Například pro úroveň běhu 2 v následujícím systému.

Spravujte služby pomocí chkconfig

Chcete-li povolit nebo zakázat systémové služby při bootování, použijeme příkaz chkconfig v CentOS/openSUSE a sysv-rc-conf v Debianu a odvozeninách. Tento nástroj nám také může ukázat, jaký je předkonfigurovaný stav služby pro konkrétní úroveň běhu.

Přečtěte si také: Jak zastavit a zakázat nežádoucí služby v Linuxu

Výpis konfigurace úrovně běhu pro službu.

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

Na obrázku výše vidíme, že postfix je nastaven tak, aby se spustil, když systém vstoupí do úrovní běhu 25, zatímco mysqld b> poběží ve výchozím nastavení pro úrovně běhu 24. Nyní předpokládejme, že toto není očekávané chování.

Potřebujeme například zapnout mysqld také pro úroveň běhu 5 a vypnout postfix pro úrovně běhu 4 a 5. Zde je to, co bychom udělali v každém případě (spusťte následující příkazy jako root).

Povolení služby pro konkrétní úroveň běhu
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Zakázání služby pro konkrétní úrovně běhu
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

Nyní provedeme podobné úlohy v systému založeném na Debianu pomocí sysv-rc-conf.

Správa služeb pomocí sysv-rc-conf

Konfigurace služby tak, aby se automaticky spustila na určité úrovni běhu a zabránila jejímu spuštění na všech ostatních.

1. Pomocí následujícího příkazu se podíváme, jaké jsou úrovně běhu, na kterých je nakonfigurováno spuštění mdadm.

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

2. Použijeme sysv-rc-conf, abychom zabránili spuštění mdadm na všech úrovních běhu kromě 2. Stačí zaškrtnout nebo zrušit zaškrtnutí (mezerníkem) podle potřeby (pomocí šipek se můžete pohybovat nahoru, dolů, doleva a doprava).

sysv-rc-conf

Poté stiskněte q pro ukončení.

3. Restartujeme systém a znovu spustíme příkaz z KROK 1.

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

Na obrázku výše vidíme, že mdadm je nakonfigurováno tak, aby se spouštělo pouze na úrovni běhu 2.

A co systemd?

systemd je další správce služeb a systému, který je přijímán několika hlavními distribucemi Linuxu. Jeho cílem je umožnit paralelní zpracování více zpracování během spouštění systému (na rozdíl od sysvinit, který má vždy tendenci být pomalejší, protože spouští procesy jeden po druhém, kontroluje, zda jeden závisí na druhém, a čeká na spouštět démony, aby se mohlo spustit více služeb) a sloužit jako dynamická správa prostředků běžícímu systému.

Služby se tedy spouštějí v případě potřeby (aby nedocházelo ke spotřebě systémových prostředků) místo toho, aby byly spouštěny bez vážného důvodu během bootování.

Chcete-li zobrazit stav všech procesů spuštěných ve vašem systému, jak nativních služeb systemd, tak služeb SysV, spusťte následující příkaz.

systemctl

Sloupec LOAD ukazuje, zda byla definice jednotky (viz sloupec UNIT, který ukazuje službu nebo cokoli spravovaného systemd) správně načtena, zatímco ACTIVE a SUB sloupce ukazují aktuální stav takové jednotky.

Zobrazení informací o aktuálním stavu služby

Když sloupec AKTIVNÍ uvádí, že stav jednotky je jiný než aktivní, můžeme pomocí něj zkontrolovat, co se stalo.

systemctl status [unit]

Například na obrázku výše je media-samba.mount ve stavu selhání. Utíkejme.

systemctl status media-samba.mount

Vidíme, že media-samba.mount se nezdařilo, protože proces připojení na hostiteli dev1 nedokázal najít sdílenou síť na adrese //192.168.0.10/gacanepa.

Spuštění nebo zastavení služeb

Jakmile bude sdílená síť //192.168.0.10/gacanepa k dispozici, zkusme jednotku spustit, zastavit a nakonec restartovat media-samba.mount. Po provedení každé akce spusťte systemctl status media-samba.mount a zkontrolujte její stav.

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

Povolení nebo zakázání spuštění služby během spouštění

Pod systemd můžete povolit nebo zakázat službu při jejím spouštění.

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

Proces povolení nebo zakázání automatického spouštění služby při bootování spočívá v přidání nebo odstranění symbolických odkazů v adresáři /etc/systemd/system/multi-user.target.wants.

Případně můžete pomocí příkazu zjistit aktuální stav služby (povoleno nebo zakázáno).

systemctl is-enabled [service]

Například,

systemctl is-enabled postfix.service

Kromě toho můžete restartovat nebo vypnout systém pomocí.

systemctl reboot
systemctl shutdown

Povýšenec

Upstart je událost založená na náhradě za démona /sbin/init a zrodila se z potřeby spouštět služby pouze tehdy, když jsou potřeba (také na ně dohlížet, když jsou spuštěny) a zpracovává události, jakmile nastanou, čímž překonává klasický systém sysvinit založený na závislostech.

Původně byl vyvinut pro distribuci Ubuntu, ale používá se v Red Hat Enterprise Linux 6.0. Ačkoli měl být vhodný pro nasazení ve všech linuxových distribucích jako náhrada za sysvinit, časem byl zastíněn systemd. 14. února 2014 Mark Shuttleworth (zakladatel Canonical Ltd.) oznámil, že budoucí vydání Ubuntu budou používat systemd jako výchozího init démona.

Protože spouštěcí skript SysV pro systém byl tak běžný již tak dlouho, velké množství softwarových balíčků obsahuje spouštěcí skripty SysV. Aby se takové balíčky přizpůsobily, nabízí Upstart režim kompatibility: Spouští spouštěcí skripty SysV v obvyklých umístěních (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d nebo podobné umístění). Pokud tedy nainstalujeme balíček, který ještě neobsahuje konfigurační skript Upstart, měl by se stále spustit obvyklým způsobem.

Kromě toho, pokud jsme nainstalovali nástroje, jako je chkconfig, měli byste být schopni je používat ke správě služeb založených na SysV stejně jako na systémech založených na sysvinit.

Upstart skripty také podporují spouštění nebo zastavování služeb na základě širšího spektra akcí než spouštěcí skripty SysV; například Upstart může spustit službu vždy, když je připojeno konkrétní hardwarové zařízení.

Systém, který používá Upstart a jeho nativní skripty výhradně nahrazuje soubor /etc/inittab a adresáře spouštěcích skriptů SysV specifické pro úroveň běhu za .conf skripty v adresáři /etc/init.

Tyto skripty *.conf (známé také jako definice úloh) obecně obsahují následující:

    1. Popis procesu.
    2. Úrovně běhu, kde by se měl proces spustit, nebo události, které by ho měly spustit.
    3. Úrovně běhu, kde by měl být proces zastaven, nebo události, které by ho měly zastavit.
    4. Možnosti.
    5. Příkaz ke spuštění procesu.

Například,

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

Chcete-li použít změny, budete muset upstartu říct, aby znovu načetl svou konfiguraci.

initctl reload-configuration

Poté spusťte úlohu zadáním následujícího příkazu.

sudo start yourjobname

Kde název vaší úlohy je název úlohy, která byla dříve přidána pomocí skriptu název vaší úlohy.conf.

Kompletnější a podrobnější referenční příručka pro Upstart je k dispozici na webových stránkách projektu v nabídce „Kuchařka“.

souhrn

Znalost procesu spouštění systému Linux je nezbytná, aby vám pomohla s úlohami při odstraňování problémů a také s přizpůsobením výkonu počítače a spuštěných služeb vašim potřebám.

V tomto článku jsme analyzovali, co se stane od okamžiku, kdy stisknutím vypínače Napájení zapnete stroj, dokud nezískáte plně funkční uživatelské rozhraní. Doufám, že jste se při jejím skládání naučili číst stejně jako já. Neváhejte zanechat své komentáře nebo dotazy níže. Vždy se těšíme na slyšení od našich čtenářů!