Weboldal keresés

LFCS: Rendszerindítási folyamatok és szolgáltatások kezelése (SysVinit, Systemd és Upstart) – 7. rész


Néhány hónappal ezelőtt a Linux Foundation bejelentette az LFCS (Linux Foundation Certified Sysadmin) tanúsítványt, egy izgalmas új programot, amelynek célja, hogy a világ minden végéről érkező egyének számára képesítést szerezni az alapszintű és a középszintű rendszeradminisztrációs feladatok elvégzésében Linux rendszereken. Ez magában foglalja a már futó rendszerek és szolgáltatások támogatását, valamint az első kézből történő problémakeresést és -elemzést, valamint annak lehetőségét, hogy eldöntsék, mikor kell problémákat feltenni a mérnöki csapatoknak.

A következő videó a Linux Foundation Certification Program rövid bemutatását írja le.

Ez a bejegyzés egy 10 oktatóanyagból álló sorozat 7. része, ebben a részben elmagyarázzuk, hogyan kell kezelni a Linux rendszerindítási folyamatokat és szolgáltatásokat, amelyek szükségesek az LFCS minősítési vizsgához.

A Linux indítási folyamatának kezelése

A Linux rendszer indítási folyamata több fázisból áll, amelyek mindegyikét más-más komponens képviseli. Az alábbi diagram röviden összefoglalja a rendszerindítási folyamatot, és bemutatja az összes érintett fő összetevőt.

Amikor megnyomja a Bekapcsológombot a gépen, az alaplap EEPROM chipjében tárolt firmware inicializálja a POST ( Bekapcsolási öntesztet) a rendszer hardvererőforrásainak állapotának ellenőrzéséhez. Amikor a POST befejeződött, a firmware megkeresi és betölti az 1st stage rendszertöltőt, amely az MBR-ben vagy az EFI-ben található. partíciót az első elérhető lemezen, és átadja annak vezérlését.

MBR módszer

Az MBR a lemez első szektorában található, amely a BIOS beállításaiban rendszerindítóként van megjelölve, és mérete 512 bájt.

  1. Első 446 bájt: A rendszerbetöltő futtatható kódot és hibaüzenet szövegét is tartalmazza.
  2. Következő 64 bájt: A partíciós tábla négy (elsődleges vagy kiterjesztett) partíció mindegyikéhez tartalmaz rekordot. Többek között az egyes rekordok jelzik az egyes partíciók állapotát (aktív/nem aktív), méretét és kezdő/végi szektorait.
  3. Utolsó 2 bájt: A mágikus szám az MBR érvényességi ellenőrzéseként szolgál.

A következő parancs biztonsági másolatot készít az MBRről (ebben a példában a /dev/sda az első merevlemez). Az eredményül kapott mbr.bkp fájl hasznos lehet, ha a partíciós tábla megsérül, például a rendszer indíthatatlanná válik.

Természetesen ahhoz, hogy később használhassuk, ha szükséges, el kell mentenünk és máshol kell tárolnunk (például egy USB meghajtón). Ez a fájl segít visszaállítani az MBR-t, és akkor és csak akkor fog újra elindulni, ha közben nem változtatjuk meg a merevlemez elrendezését.

Biztonsági mentés MBR
dd if=/dev/sda of=mbr.bkp bs=512 count=1

MBR visszaállítása
dd if=mbr.bkp of=/dev/sda bs=512 count=1

EFI/UEFI módszer

Az EFI/UEFI módszert használó rendszerek esetében az UEFI firmware beolvassa a beállításait, hogy meghatározza, melyik UEFI-alkalmazást kell elindítani és honnan (vagyis melyik lemezen és partíción EFI partíció található).

Ezután a 2nd stage rendszertöltő (más néven boot manager) betöltődik és fut. A GRUB [GRand Unified Boot] a Linux leggyakrabban használt rendszerindítás-kezelője. A legtöbb ma használt rendszeren két különböző verzió egyike található.

  1. Régi GRUB konfigurációs fájl: /boot/grub/menu.lst (régebbi disztribúciók, az EFI/UEFI firmware nem támogatja).
  2. GRUB2 konfigurációs fájl: valószínűleg /etc/default/grub.

Bár az LFCS vizsga céljai nem követelik meg kifejezetten a GRUB belső ismeretét, ha bátor vagy, és megengedheti magának, hogy elrontsa a rendszerét (próbálja ki először egy virtuális gépen, minden esetre), futnia kell.

update-grub

rootként, miután módosította a GRUB konfigurációját a változtatások alkalmazásához.

Alapvetően a GRUB betölti az alapértelmezett kernelt és az initrd vagy az initramfs képet. Néhány szóval az initrd vagy initramfs segít végrehajtani a hardverészlelést, a kernelmodul betöltését és az eszközfelderítést, amely szükséges a valódi gyökér fájlrendszer csatlakoztatásához.

Miután a valódi gyökér fájlrendszer elkészült, a kernel végrehajtja a rendszer- és szolgáltatáskezelőt (init vagy systemd, amelynek folyamatazonosítója vagy PID-je mindig 1), hogy elindítsa a normál felhasználói space rendszerindítási folyamat a felhasználói felület bemutatása érdekében.

Mind az init, mind a systemd démonok (háttérfolyamatok), amelyek más démonokat kezelnek, mint az első elinduló szolgáltatás (a rendszerindítás során), és az utolsó szolgáltatás, amely leáll (leálláskor).

Szolgáltatások indítása (SysVinit)

A Linuxban a futási szintek fogalma különböző módokat határoz meg a rendszer használatában a futó szolgáltatások szabályozásával. Más szóval, a futási szint szabályozza, hogy az aktuális végrehajtási állapotban=futási szinten milyen feladatokat lehet végrehajtani (és melyeket nem).

Hagyományosan ezt az indítási folyamatot a System V UNIX konvenciói alapján hajtották végre, és a rendszer olyan parancsfájlok gyűjteményeit adta át, amelyek elindítják és leállítják a szolgáltatásokat, amikor a gép egy adott futási szintre lép (ami más szóval , a rendszer futtatásának más módja).

Az egyes futási szinteken belül beállíthatók, hogy az egyes szolgáltatások fussanak, vagy futás esetén leálljanak. Egyes főbb disztribúciók legújabb verziói eltávolodnak a System V szabványtól egy meglehetősen új szolgáltatás- és rendszerkezelő helyett, a systemd (a rendszerdémon rövidítése) helyett, de általában támogatja a sysv parancsokat a kompatibilitás érdekében. Ez azt jelenti, hogy a legtöbb jól ismert sysv indítóeszközt futtathatja systemd alapú disztribúcióban.

Olvassa el még: Miért váltja fel a „systemd” az „init” kifejezést Linuxban?

A rendszerfolyamat elindítása mellett az init megnézi az /etc/inittab fájlt, hogy eldöntse, milyen futási szintet kell megadni.

Runlevel

Leírás

0

Állítsa le a rendszert. A 0. futási szint egy speciális átmeneti állapot, amely a rendszer gyors leállítására szolgál.

1

Más néven s vagy S, ezt a futási szintet néha karbantartási módnak is nevezik. Az, hogy ezen a futási szinten milyen szolgáltatások indulnak el, ha vannak ilyenek, az elosztásonként változik. Általában alacsony szintű rendszerkarbantartásra használják, amelyet a rendszer normál működése károsíthat.

2

Többfelhasználós. Debian rendszereken és származékain ez az alapértelmezett futási szint, és -ha elérhető - grafikus bejelentkezést is tartalmaz. A Red-Hat alapú rendszereken ez többfelhasználós mód, hálózat nélkül.

3

Red-Hat alapú rendszereken ez az alapértelmezett többfelhasználós mód, amely mindent futtat, kivéve a grafikus környezetet. Ezt a futási szintet és a 4. és 5. szintet általában nem használják Debian-alapú rendszereken.

4

Alapértelmezés szerint általában nem használt, ezért testreszabható.

5

Red-Hat alapú rendszereken teljes többfelhasználós mód GUI bejelentkezéssel. Ez a futási szint olyan, mint a 3. szint, de elérhető GUI bejelentkezés.

6

Indítsa újra a rendszert.

A futási szintek közötti váltáshoz egyszerűen kiadhatunk egy futási szint módosítást az init paranccsal: init N (ahol N a fent felsorolt futási szintek egyike). Kérjük, vegye figyelembe, hogy ez nem ajánlott módja egy futó rendszer másik futási szintre való átállításának, mert nem ad figyelmeztetést a meglévő bejelentkezett felhasználóknak (ezáltal munkájuk elvesztését és a folyamatok rendellenes leállását okozza).

Ehelyett a shutdown paranccsal kell újraindítani a rendszert (amely először figyelmeztető üzenetet küld minden bejelentkezett felhasználónak, és blokkol minden további bejelentkezést, majd jelzi az init-et a futási szintek váltásához); azonban az alapértelmezett futási szintet (amelyre a rendszer elindul) először szerkeszteni kell az /etc/inittab fájlban.

Emiatt kövesse az alábbi lépéseket a futási szintek közötti megfelelő váltáshoz. Rootként keresse meg a következő sort az /etc/inittab mappában.

id:2:initdefault:

és módosítsa a 2 számot a kívánt futási szinthez a kívánt szövegszerkesztővel, például a vim-mel (lásd: A vi/vim szerkesztő használata Linuxban – A sorozat 2. része).

Ezután futtassa rootként.

shutdown -r now

Az utolsó parancs újraindítja a rendszert, ami a következő rendszerindításkor a megadott futási szinten indul el, és az /etc/rc[runlevel].dben található szkripteket futtatja. > címtárat annak eldöntéséhez, hogy mely szolgáltatásokat kell elindítani és melyeket nem. Például a következő rendszer 2. futási szintjéhez.

Szolgáltatások kezelése a chkconfig segítségével

A rendszerszolgáltatások engedélyezéséhez vagy letiltásához a rendszerindításkor a chkconfig parancsot használjuk a CentOS/openSUSE rendszerben és a sysv-rc-conf parancsot a Debianban és a származékaiban. Ez az eszköz azt is meg tudja mutatni, hogy egy adott futási szinthez mi a szolgáltatás előre konfigurált állapota.

Olvassa el még: A nem kívánt szolgáltatások leállítása és letiltása Linux rendszerben

Egy szolgáltatás futási szintű konfigurációjának listázása.

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

A fenti képen látható, hogy a postfix akkor indul el, amikor a rendszer belép a 2 és 5 futási szintekre, míg a mysqld b> alapértelmezés szerint futni fog a 2 és a 4 futási szinteken. Most tegyük fel, hogy ez nem az elvárt viselkedés.

Például be kell kapcsolnunk a mysqld funkciót az 5 futási szinten is, és ki kell kapcsolnunk a postfixet a 4-es és 5-ös futási szinten. következő parancsokat rootként).

Szolgáltatás engedélyezése egy adott futási szinthez
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Szolgáltatás letiltása bizonyos futási szinteken
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

Most hasonló feladatokat fogunk végrehajtani egy Debian-alapú rendszerben a sysv-rc-conf használatával.

Szolgáltatások kezelése a sysv-rc-conf használatával

Egy szolgáltatás konfigurálása úgy, hogy egy adott futási szinten automatikusan elinduljon, és megakadályozza, hogy minden máson elinduljon.

1. Használja a következő parancsot, hogy megnézze, melyek azok a futási szintek, ahol az mdadm elindulni van beállítva.

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

2. A sysv-rc-conf parancsot használjuk, hogy megakadályozzuk, hogy az mdadm elinduljon a 2 kivételével minden futási szinten. Csak jelölje be vagy törölje a jelölést (a szóköz billentyűvel) tetszés szerint (a nyílbillentyűkkel mozgathat fel, le, balra és jobbra).

sysv-rc-conf

Ezután nyomja meg a q gombot a kilépéshez.

3. Újraindítjuk a rendszert, és újra futtatjuk az 1. LÉPÉS parancsát.

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

A fenti képen láthatjuk, hogy az mdadm úgy van beállítva, hogy csak a 2 futási szinten induljon el.

Mi a helyzet a systemd-vel?

A systemd egy másik szolgáltatás- és rendszerkezelő, amelyet számos nagy Linux disztribúció alkalmaz. Célja, hogy a rendszerindítás során párhuzamosan több feldolgozást lehessen elvégezni (ellentétben a sysvinit-tel, amely mindig lassabb, mert egyesével elindítja a folyamatokat, ellenőrzi, hogy függ-e a másiktól, és vár démonok elindításához, hogy több szolgáltatás indulhasson), és dinamikus erőforrás-kezelésként szolgáljon egy futó rendszerhez.

Így a szolgáltatások szükség esetén indulnak el (a rendszererőforrások igénybevételének elkerülése érdekében), ahelyett, hogy alapos ok nélkül indulnának el a rendszerindítás során.

A rendszeren futó összes folyamat állapotának megtekintéséhez, mind a systemd natív, mind a SysV szolgáltatásokhoz, futtassa a következő parancsot.

systemctl

A LOAD oszlop azt mutatja, hogy az egységdefiníció (lásd az UNIT oszlopot, amely a szolgáltatást vagy bármit, amit a systemd karbantart) megfelelően lett-e betöltve, míg az ACTIVE és SUB oszlopok az ilyen egység aktuális állapotát mutatják.

Információk megjelenítése a szolgáltatás aktuális állapotáról

Amikor az ACTIVE oszlop azt jelzi, hogy egy egység állapota nem aktív, akkor a segítségével ellenőrizhetjük, hogy mi történt.

systemctl status [unit]

Például a fenti képen a media-samba.mount hibás állapotban van. Fussunk.

systemctl status media-samba.mount

Láthatjuk, hogy a media-samba.mount meghiúsult, mert a beillesztési folyamat a dev1 gazdagépen nem találta a hálózati megosztást a következő címen: //192.168.0.10/gacanepa.

Szolgáltatások indítása vagy leállítása

Amint a //192.168.0.10/gacanepa hálózati megosztás elérhetővé válik, próbáljuk meg elindítani, majd leállítani, és végül újraindítani a media-samba.mount egységet. Az egyes műveletek végrehajtása után futtassuk a systemctl status media-samba.mount fájlt az állapotának ellenőrzéséhez.

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

A rendszerindítás során induló szolgáltatás engedélyezése vagy letiltása

A systemd alatt engedélyezheti vagy letilthatja a szolgáltatást a rendszerindításkor.

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

Egy szolgáltatás rendszerindításkor történő automatikus indulásának engedélyezése vagy letiltása abból áll, hogy szimbolikus hivatkozásokat adunk hozzá vagy eltávolítunk a /etc/systemd/system/multi-user.target.wants könyvtárban.

Alternatív megoldásként a paranccsal megtudhatja a szolgáltatás aktuális állapotát (engedélyezett vagy letiltott).

systemctl is-enabled [service]

Például,

systemctl is-enabled postfix.service

Ezenkívül újraindíthatja vagy leállíthatja a rendszert a segítségével.

systemctl reboot
systemctl shutdown

Feltörekvő

Az Upstart a /sbin/init démon esemény alapú cseréje, és abból az igényből született, hogy a szolgáltatásokat csak akkor kell elindítani, amikor szükség van rájuk (és közben felügyelni is kell őket futnak), és az eseményeket akkor kezeli, amikor azok előfordulnak, ezzel felülmúlva a klasszikus, függőségi alapú sysvinit rendszert.

Eredetileg az Ubuntu disztribúcióhoz fejlesztették ki, de a Red Hat Enterprise Linux 6.0-ban használják. Bár az összes Linux disztribúcióban való telepítésre alkalmasnak szánták a sysvinit helyettesítésére, idővel a systemd beárnyékolta. 2014. február 14-én Mark Shuttleworth (a Canonical Ltd. alapítója) bejelentette, hogy az Ubuntu jövőbeli kiadásai a systemd-t fogják használni alapértelmezett init démonként.

Mivel a rendszerhez való SysV indítószkript olyan régóta elterjedt, sok szoftvercsomag tartalmaz SysV indítószkripteket. Az ilyen csomagok befogadására az Upstart kompatibilitási módot biztosít: SysV indító szkripteket futtat a szokásos helyeken (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d vagy hasonló helyen). Így ha olyan csomagot telepítünk, amely még nem tartalmaz Upstart konfigurációs szkriptet, akkor is a szokásos módon kell elindulnia.

Továbbá, ha telepítettünk olyan segédprogramokat, mint a chkconfig, akkor képesnek kell lennie arra, hogy SysV-alapú szolgáltatásait ugyanúgy kezelje, mint a sysvinit alapú rendszereken.

Az induló szkriptek a SysV indító parancsfájloknál szélesebb körű műveletek alapján támogatják a szolgáltatások indítását vagy leállítását; Például az Upstart elindíthat egy szolgáltatást, amikor egy adott hardvereszköz csatlakoztatva van.

Az Upstart és natív szkriptjeit használó rendszer kizárólag az /etc/inittab fájlt és a futási szintre jellemző SysV indítószkript-könyvtárakat a .conf fájlra cseréli. szkriptek az /etc/init könyvtárban.

Ezek a *.conf szkriptek (más néven munkameghatározások) általában a következőkből állnak:

    1. A folyamat leírása.
    2. Futási szintek, ahol a folyamatnak futnia kell, vagy események, amelyek kiváltják.
    3. Futási szintek, ahol a folyamatot le kell állítani, vagy események, amelyeknek le kell állítaniuk azt.
    4. Lehetőségek.
    5. Parancs a folyamat elindításához.

Például,

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

A módosítások alkalmazásához szólnia kell az upstartnak, hogy töltse be újra a konfigurációját.

initctl reload-configuration

Ezután indítsa el a munkát a következő parancs beírásával.

sudo start yourjobname

Ahol a feladatneve annak a feladatnak a neve, amelyet korábban a feladatneve.conf szkripttel adtak hozzá.

Az Upstart teljesebb és részletesebb referencia-útmutatója elérhető a projekt honlapján a „Szakácskönyv” menüben.

Összegzés

A Linux rendszerindítási folyamatának ismerete szükséges ahhoz, hogy segítséget nyújtson a hibaelhárítási feladatokban, valamint a számítógép teljesítményének és a futó szolgáltatásoknak az Ön igényeihez igazításában.

Ebben a cikkben azt elemeztük, hogy mi történik attól a pillanattól kezdve, amikor megnyomja a Bekapcsológombot a gép bekapcsolásához, egészen addig, amíg teljesen működőképes felhasználói felületet nem kap. Remélem, annyira megtanultad olvasni, mint én az összeállítás során. Nyugodtan hagyja meg észrevételeit vagy kérdéseit alább. Mindig szeretettel várjuk olvasóinkat!