Zoeken op website

LFCS: Systeemopstartproces en -services beheren (SysVinit, Systemd en Upstart) - Deel 7


Een paar maanden geleden kondigde de Linux Foundation de LFCS (Linux Foundation Certified Sysadmin) certificering aan, een spannend nieuw programma dat tot doel heeft individuen van alle uiteinden van de wereld in staat te stellen gecertificeerd worden in het uitvoeren van basis- tot middelmatige systeembeheertaken op Linux-systemen. Dit omvat het ondersteunen van reeds draaiende systemen en diensten, samen met het uit de eerste hand opsporen en analyseren van problemen, plus de mogelijkheid om te beslissen wanneer problemen aan technische teams moeten worden voorgelegd.

De volgende video beschrijft een korte introductie tot het Linux Foundation Certification Program.

Dit bericht is deel 7 van een reeks van 10 tutorials. Hier in dit deel zullen we uitleggen hoe je het opstartproces en de services van Linux-systemen kunt beheren, die vereist zijn voor het LFCS-certificeringsexamen.

Beheer van het Linux-opstartproces

Het opstartproces van een Linux-systeem bestaat uit verschillende fasen, elk vertegenwoordigd door een ander onderdeel. Het volgende diagram geeft een korte samenvatting van het opstartproces en toont alle betrokken hoofdcomponenten.

Wanneer u op de Aan/uit-knop op uw machine drukt, initialiseert de firmware die is opgeslagen in een EEPROM-chip op het moederbord de POST ( Power-On Self Test) om de status van de hardwarebronnen van het systeem te controleren. Wanneer de POST is voltooid, zoekt en laadt de firmware vervolgens de 1e fase bootloader, die zich in de MBR of in de EFI bevindt partitie van de eerste beschikbare schijf, en geeft er controle over.

MBR-methode

De MBR bevindt zich in de eerste sector van de schijf die is gemarkeerd als opstartbaar in de BIOS-instellingen en is 512 bytes groot.

  1. Eerste 446 bytes: de bootloader bevat zowel uitvoerbare code als foutmeldingstekst.
  2. Volgende 64 bytes: de partitietabel bevat een record voor elk van de vier partities (primair of uitgebreid). Elk record geeft onder andere de status (actief/niet actief), grootte en begin-/eindsectoren van elke partitie aan.
  3. Laatste 2 bytes: het magische getal dient als validatiecontrole van de MBR.

Met de volgende opdracht wordt een back-up gemaakt van de MBR (in dit voorbeeld is /dev/sda de eerste harde schijf). Het resulterende bestand, mbr.bkp, kan van pas komen als de partitietabel beschadigd raakt, waardoor het systeem bijvoorbeeld niet meer kan opstarten.

Om het later te kunnen gebruiken als dat nodig is, zullen we het natuurlijk moeten opslaan en ergens anders moeten opslaan (bijvoorbeeld op een USB-station). Dat bestand zal ons helpen de MBR te herstellen en zal ons weer aan de slag krijgen als en alleen als we in de tussentijd de indeling van de harde schijf niet veranderen.

Back-up MBR
dd if=/dev/sda of=mbr.bkp bs=512 count=1

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

EFI/UEFI-methode

Voor systemen die de EFI/UEFI-methode gebruiken, leest de UEFI-firmware de instellingen om te bepalen welke UEFI-applicatie moet worden gestart en vanaf waar (d.w.z. op welke schijf en partitie de EFI-partitie bevindt).

Vervolgens wordt de 2e fase bootloader (ook wel bootmanager genoemd) geladen en uitgevoerd. GRUB [GRand Unified Boot] is de meest gebruikte opstartmanager in Linux. Op de meeste systemen die tegenwoordig worden gebruikt, is een van de twee verschillende versies te vinden.

  1. GRUB verouderd configuratiebestand: /boot/grub/menu.lst (oudere distributies, niet ondersteund door EFI/UEFI-firmware).
  2. GRUB2-configuratiebestand: hoogstwaarschijnlijk /etc/default/grub.

Hoewel de doelstellingen van het LFCS examen niet expliciet vragen om kennis over GRUB interne onderdelen, als je moedig bent en het je kunt veroorloven om je systeem te verpesten (je wilt het misschien proberen eerst op een virtuele machine, voor het geval dat), moet u uitvoeren.

update-grub

Als root na het wijzigen van de GRUB-configuratie om de wijzigingen toe te passen.

Kortom, GRUB laadt de standaard kernel en de initrd of initramfs afbeelding. In enkele woorden: initrd of initramfs helpen bij het uitvoeren van de hardwaredetectie, het laden van de kernelmodule en de apparaatdetectie die nodig is om het echte rootbestandssysteem aangekoppeld te krijgen.

Zodra het echte rootbestandssysteem actief is, voert de kernel de systeem- en servicemanager uit (init of systemd, waarvan de procesidentificatie of PID altijd 1 is) om te beginnen met de normale gebruikers- space-opstartproces om een gebruikersinterface te presenteren.

Zowel init als systemd zijn daemons (achtergrondprocessen) die andere daemons beheren, als de eerste service die start (tijdens het opstarten) en de laatste service die wordt beëindigd (tijdens het afsluiten).

Services starten (SysVinit)

Het concept van runlevels in Linux specificeert verschillende manieren om een systeem te gebruiken door te controleren welke services actief zijn. Met andere woorden, een runlevel bepaalt welke taken kunnen worden uitgevoerd in de huidige uitvoeringsstatus=runlevel (en welke niet).

Traditioneel werd dit opstartproces uitgevoerd op basis van conventies die hun oorsprong vonden in System V UNIX, waarbij het systeem verzamelingen scripts doorgaf die services starten en stoppen zodra de machine een specifiek runlevel binnengaat (wat met andere woorden , is een andere manier om het systeem te laten draaien).

Binnen elk runlevel kunnen individuele services worden ingesteld om te worden uitgevoerd of om te worden afgesloten als deze actief zijn. De nieuwste versies van enkele grote distributies wijken af van de System V-standaard ten gunste van een vrij nieuwe service en systeembeheerder genaamd systemd (wat staat voor system daemon), maar meestal ondersteuning van sysv-opdrachten voor compatibiliteitsdoeleinden. Dit betekent dat u de meeste bekende sysv init-tools kunt uitvoeren in een op systemd gebaseerde distributie.

Lees ook: Waarom ‘systemd’ ‘init’ vervangt in Linux

Naast het starten van het systeemproces, kijkt init naar het bestand /etc/inittab om te beslissen welk runlevel moet worden ingevoerd.

Runlevel

Beschrijving

0

Stop het systeem. Runlevel 0 is een speciale overgangsstatus die wordt gebruikt om het systeem snel af te sluiten.

1

Dit runlevel, ook wel s of S genoemd, wordt soms de onderhoudsmodus genoemd. Welke services, indien aanwezig, op dit runlevel worden gestart, verschilt per distributie. Het wordt doorgaans gebruikt voor laag systeemonderhoud dat kan worden belemmerd door de normale werking van het systeem.

2

Meerdere gebruikers. Op Debian-systemen en derivaten is dit het standaard runlevel en omvat, indien beschikbaar, een grafische login. Op op Red-Hat gebaseerde systemen is dit de modus voor meerdere gebruikers zonder netwerk.

3

Op op Red-Hat gebaseerde systemen is dit de standaardmodus voor meerdere gebruikers, waarin alles wordt uitgevoerd behalve de grafische omgeving. Dit runlevel en niveaus 4 en 5 worden doorgaans niet gebruikt op op Debian gebaseerde systemen.

4

Meestal standaard ongebruikt en daarom beschikbaar voor maatwerk.

5

Op op Red-Hat gebaseerde systemen, volledige multiuser-modus met GUI-aanmelding. Dit runlevel is vergelijkbaar met niveau 3, maar met een GUI-login beschikbaar.

6

Start het systeem opnieuw op.

Om tussen runlevels te wisselen, kunnen we eenvoudigweg een runlevelwijziging uitvoeren met behulp van het init commando: init N (waarbij N een van de hierboven genoemde runlevels is). Houd er rekening mee dat dit niet de aanbevolen manier is om een draaiend systeem naar een ander runlevel te brengen, omdat het geen waarschuwing geeft aan bestaande ingelogde gebruikers (waardoor ze werk verliezen en processen abnormaal worden beëindigd).

In plaats daarvan moet het commando shutdown worden gebruikt om het systeem opnieuw op te starten (dat eerst een waarschuwingsbericht naar alle ingelogde gebruikers stuurt en verdere logins blokkeert; het geeft vervolgens aan init een signaal om van runlevel te wisselen); het standaard runlevel (waar het systeem naar opstart) moet echter eerst in het bestand /etc/inittab worden bewerkt.

Volg daarom deze stappen om goed tussen runlevels te kunnen wisselen. Zoek als root naar de volgende regel in /etc/inittab.

id:2:initdefault:

en verander het nummer 2 voor het gewenste runlevel met de teksteditor van je voorkeur, zoals vim (beschreven in Hoe de vi/vim-editor te gebruiken in Linux – Deel 2 van deze serie).

Voer vervolgens uit als root.

shutdown -r now

Dat laatste commando zal het systeem opnieuw opstarten, waardoor het tijdens de volgende keer opstarten op het gespecificeerde runlevel zal starten, en de scripts zal uitvoeren die zich in /etc/rc[runlevel].d directory om te beslissen welke services moeten worden gestart en welke niet. Bijvoorbeeld voor runlevel 2 in het volgende systeem.

Beheer services met chkconfig

Om systeemservices tijdens het opstarten in of uit te schakelen, gebruiken we de opdracht chkconfig in CentOS/openSUSE en sysv-rc-conf in Debian en derivaten. Deze tool kan ons ook laten zien wat de vooraf geconfigureerde status is van een service voor een bepaald runlevel.

Lees ook: Hoe u ongewenste services in Linux kunt stoppen en uitschakelen

Een overzicht van de runlevel-configuratie voor een service.

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

In de bovenstaande afbeelding kunnen we zien dat postfix is ingesteld om te starten wanneer het systeem runlevels 2 tot en met 5 binnengaat, terwijl mysqld b> wordt standaard uitgevoerd voor runlevels 2 tot en met 4. Stel nu dat dit niet het verwachte gedrag is.

We moeten bijvoorbeeld ook mysqld inschakelen voor runlevel 5, en postfix uitschakelen voor runlevels 4 en 5. Dit is wat we in elk geval zouden doen (voer de volgende commando's als root).

Een service inschakelen voor een bepaald runlevel
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Het uitschakelen van een service voor bepaalde runlevels
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

We zullen nu vergelijkbare taken uitvoeren in een Debian-gebaseerd systeem met behulp van sysv-rc-conf.

Beheer services met sysv-rc-conf

Een service configureren om automatisch op een specifiek runlevel te starten en te voorkomen dat deze op alle andere runlevels start.

1. Laten we de volgende opdracht gebruiken om te zien wat de runlevels zijn waar mdadm is geconfigureerd om te starten.

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

2. We zullen sysv-rc-conf gebruiken om te voorkomen dat mdadm op alle runlevels start behalve 2. U kunt de optie naar wens aan- of uitvinken (met de spatiebalk) (u kunt met de pijltjestoetsen omhoog, omlaag, naar links en naar rechts gaan).

sysv-rc-conf

Druk vervolgens op q om te stoppen.

3. We zullen het systeem opnieuw opstarten en de opdracht uit STAP 1 opnieuw uitvoeren.

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

In de bovenstaande afbeelding kunnen we zien dat mdadm is geconfigureerd om alleen op runlevel 2 te starten.

Hoe zit het met systemd?

systemd is een andere service- en systeembeheerder die door verschillende grote Linux-distributies wordt gebruikt. Het is bedoeld om meer verwerking parallel te laten plaatsvinden tijdens het opstarten van het systeem (in tegenstelling tot sysvinit, dat altijd de neiging heeft langzamer te zijn omdat het processen één voor één start, controleert of de ene afhankelijk is van de andere, en wacht op daemons om te starten zodat meer services kunnen starten) en om te dienen als dynamisch resourcebeheer voor een draaiend systeem.

Services worden dus gestart wanneer dat nodig is (om te voorkomen dat systeembronnen worden verbruikt) in plaats van dat ze zonder een goede reden tijdens het opstarten worden gestart.

Als u de status wilt bekijken van alle processen die op uw systeem worden uitgevoerd, zowel systemd native als SysV services, voert u de volgende opdracht uit.

systemctl

De kolom LOAD laat zien of de eenheidsdefinitie (zie de kolom UNIT, waarin de service of iets anders wordt weergegeven dat door systemd wordt onderhouden) correct is geladen, terwijl de ACTIVE< De kolommen en SUB tonen de huidige status van een dergelijke eenheid.

Informatie weergeven over de huidige status van een dienst

Wanneer de kolom ACTIEF aangeeft dat de status van een eenheid niet actief is, kunnen we controleren wat er is gebeurd met behulp van.

systemctl status [unit]

In de afbeelding hierboven heeft media-samba.mount bijvoorbeeld de status Mislukt. Laten we rennen.

systemctl status media-samba.mount

We kunnen zien dat media-samba.mount is mislukt omdat het mountproces op host dev1 de netwerkshare op //192.168.0.10/gacanepa< niet kon vinden.

Services starten of stoppen

Zodra de netwerkshare //192.168.0.10/gacanepa beschikbaar komt, proberen we het apparaat media-samba.mount te starten, vervolgens te stoppen en ten slotte opnieuw op te starten. Laten we na het uitvoeren van elke actie systemctl status media-samba.mount uitvoeren om de status ervan te controleren.

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

Een service in- of uitschakelen om tijdens het opstarten te starten

Onder systemd kunt u een service tijdens het opstarten in- of uitschakelen.

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

Het proces van het in- of uitschakelen van een service om automatisch te starten bij het opstarten bestaat uit het toevoegen of verwijderen van symbolische links in de map /etc/systemd/system/multi-user.target.wants.

Als alternatief kunt u met de opdracht de huidige status van een service (ingeschakeld of uitgeschakeld) achterhalen.

systemctl is-enabled [service]

Bijvoorbeeld,

systemctl is-enabled postfix.service

Bovendien kunt u het systeem opnieuw opstarten of afsluiten met.

systemctl reboot
systemctl shutdown

Parvenu

Upstart is een op gebeurtenissen gebaseerde vervanging voor de daemon /sbin/init en is ontstaan uit de behoefte om services alleen te starten wanneer ze nodig zijn (en er ook toezicht op te houden terwijl ze worden uitgevoerd). actief zijn) en het afhandelen van gebeurtenissen zodra ze zich voordoen, waardoor het klassieke, op afhankelijkheid gebaseerde sysvinit-systeem wordt overtroffen.

Het is oorspronkelijk ontwikkeld voor de Ubuntu-distributie, maar wordt gebruikt in Red Hat Enterprise Linux 6.0. Hoewel het bedoeld was om geschikt te zijn voor implementatie in alle Linux-distributies als vervanging voor sysvinit, werd het na verloop van tijd overschaduwd door systemd. Op 14 februari 2014 kondigde Mark Shuttleworth (oprichter van Canonical Ltd.) aan dat toekomstige releases van Ubuntu systemd als de standaard init-daemon zouden gebruiken.

Omdat het SysV-opstartscript voor het systeem al zo lang zo gebruikelijk is, bevat een groot aantal softwarepakketten SysV-opstartscripts. Om dergelijke pakketten mogelijk te maken, biedt Upstart een compatibiliteitsmodus: het voert SysV-opstartscripts uit op de gebruikelijke locaties (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d of een vergelijkbare locatie). Als we dus een pakket installeren dat nog geen Upstart-configuratiescript bevat, zou het nog steeds op de gebruikelijke manier moeten worden gestart.

Bovendien, als we hulpprogramma's zoals chkconfig hebben geïnstalleerd, zou je deze moeten kunnen gebruiken om je op SysV gebaseerde services te beheren, net zoals we dat zouden doen op op sysvinit gebaseerde systemen.

Upstart-scripts ondersteunen ook het starten of stoppen van services op basis van een grotere verscheidenheid aan acties dan SysV-opstartscripts; Upstart kan bijvoorbeeld een service starten wanneer een bepaald hardwareapparaat is aangesloten.

Een systeem dat Upstart en zijn eigen scripts gebruikt, vervangt uitsluitend het bestand /etc/inittab en de runlevel-specifieke SysV opstartscriptmappen door .conf scripts in de map /etc/init.

Deze *.conf-scripts (ook bekend als taakdefinities) bestaan doorgaans uit het volgende:

    1. Beschrijving van het proces.
    2. Runlevels waar het proces moet worden uitgevoerd of gebeurtenissen die het moeten activeren.
    3. Runlevels waar het proces moet worden gestopt of gebeurtenissen die het moeten stoppen.
    4. Opties.
    5. Commando om het proces te starten.

Bijvoorbeeld,

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

Om wijzigingen toe te passen, moet u de upstart vertellen dat hij de configuratie opnieuw moet laden.

initctl reload-configuration

Start vervolgens uw taak door de volgende opdracht te typen.

sudo start yourjobname

Waarbij uwjobnaam de naam is van de taak die eerder is toegevoegd met het script uwjobnaam.conf.

Een completere en gedetailleerdere referentiegids voor Upstart is beschikbaar op de website van het project onder het menu “Kookboek”.

Samenvatting

Kennis van het Linux-opstartproces is noodzakelijk om u te helpen bij het oplossen van problemen en bij het aanpassen van de prestaties van de computer en het uitvoeren van services aan uw behoeften.

In dit artikel hebben we geanalyseerd wat er gebeurt vanaf het moment dat u op de Aan/uit-schakelaar drukt om de machine in te schakelen, totdat u een volledig operationele gebruikersinterface krijgt. Ik hoop dat je net zoveel hebt geleerd van het lezen als ik tijdens het samenstellen ervan. Laat gerust uw opmerkingen of vragen hieronder achter. Wij kijken er altijd naar uit om van onze lezers te horen!