Linux Boots

Het blijkt dat, is er niet veel aan de boot proces:

1. Een boot loader Vindt de kernel-image op de schijf, laadt het deze in het geheugen, en begint het.
2. De kernel initialiseert de apparaten en soa's.
3. De kernel mount het root bestandssysteem.
4. De kernel start init Geroepen om te plannen.
5. init wordt de rest van de processen in beweging.
6. De laatste processen die init start als onderdeel van de opstartvolgorde kunt u aan te melden.

Het identificeren van elk stadium van het opstartproces is van onschatbare waarde bij het vaststellen van opstartproblemen en het begrijpen van het systeem als geheel. Om te beginnen, in nul op de boot loader, welke wordt het beginscherm of vraagt ​​krijg je na de computer geen soa power-on self-test, met de vraag Welk besturingssysteem te draaien. Nadat u een keuze maken, de boot loader draait de Linux-kernel, waarbij het de controle van het systeem aan de kernel.

Er is een gedetailleerde bespreking van de kernel Elders in dit boek van Which dit artikel is een uittreksel. Dit artikel heeft betrekking op de kernel initialisatie fase, Het podium Wanneer de kernel een bos van berichten over de hardware aanwezig op het systeem afgedrukt. De kernel start init vlak nadat het een boodschap verkondigen toont dat de kernel heeft gemonteerd de root bestandssysteem:

VFS: Gemonteerd root (ext2 bestandssysteem) readonly.

Al snel na, ziet u een bericht te zien over init start, DAARNA systeem starten van de service-berichten, en uiteindelijk krijg je de login prompt van een soort.

NOTITIE Op Red Hat Linux, De init notitie is duidelijk Vooral, omdat het "verheugd" u "Red Hat Linux." Alle berichten daarna succes of falen tussen haakjes geven aan de rechterkant van het scherm.

Het grootste deel van dit hoofdstuk gaat over init, Want het is het deel van de boot sequence waar je de meeste controle.
init

Er is niets bijzonders aan init. Het is een software net als alle andere op de Linux-systeem, en u zult het vinden in / sbin samen met andere binaire systeembestanden. Het hoofddoel van init te starten en stoppen andere programma's in een bepaalde volgorde. Alles wat je moet weten is hoe deze volgorde werkt.

Er zijn verschillende varianten van enkelen, maar de meeste Linux distributies gebruik maken van de stijl van System V hier besproken. Sommige distributies maken gebruik van een eenvoudiger versie Dat lijkt op het BSD init, Maar je bent waarschijnlijk niet deze tegenkomen.

Runlevels

Op een gegeven moment op een Linux systeem, wordt een bepaalde basisset van processen worden uitgevoerd. Deze toestand van de machine wordt genoemd zijn runlevel, en het wordt aangeduid met een nummer van 0 door 6. Het systeem brengt het grootste deel van de soa tijd in een runlevel. Echter, wanneer u de machine stilgelegd, init wordt naar een andere runlevel systeem om de diensten te beëindigen ordelijk jaar en om de kernel te stoppen vertellen. Yet Another runlevel is voor single-user mode, besproken later.

De eenvoudigste manier om greep te krijgen op runlevels is het onderzoeken van de init configuratie bestand, / etc / inittab. Zoek naar een regel als de volgende:

id: 5: initdefault:

Dat deze lijn betekent dat de standaard runlevel voor het systeem 5 is. Alle lijnen in het inittab bestand neem deze vorm, met vier velden gescheiden door dubbele punten die voorkomen in de volgende volgorde:
# Een unieke identificatie (een korte tekenreeks, zoals ID in het vorige voorbeeld)
# De van toepassing zijnde runlevel nummer (s)
# De init die moet actie ondernemen (in het vorige voorbeeld, de actie is om het standaard runlevel ingesteld op 5)
# Een opdracht uit te voeren (optioneel)

Er is geen commando uit te voeren in het vorige initdefault voorbeeld Omdat de opdracht heeft geen zin in de context van het instellen van de standaard runlevel. Kijk een beetje verder naar beneden in inittab, totdat u een regel als deze:

l5: 5: wait :/ etc / rc.d / rc 5

Deze lijn leidt tot het grootste deel van de systeemconfiguratie en diensten via de rc *. D en init.d directory. Dat je kunt zien init is ingesteld op het commando de naam / etc / rc.d / rc 5 Wanneer in runlevel 5 uit te voeren. Het wachten actie vertelt Wanneer en hoe init voert het commando: run rc 5 bij het invoeren van runlevel 5 een keer, en wacht tot deze opdracht om de voltooid voordat u iets anders doet.

Er zijn een aantal verschillende acties in aanvulling op initdefault en wacht, vooral met betrekking tot energiebeheer, en de inittab (5) manual pagina vertelt je alles over hen. Degenen die je het meest waarschijnlijk zult tegenkomen is uitgelegd in de volgende secties.

respawn

De respawn actie init om het commando oorzaken die volgt uit te voeren en als de opdracht is voltooid uitvoeren, om opnieuw te draaien. Je bent waarschijnlijk iets wat lijkt op deze lijn in uw inittab bestand te zien:

1: 2345: respawn :/ sbin / mingetty tty1

De getty programma's bieden login aanwijzingen. De vorige regel is voor de eerste virtuele console (/ dev / tty1), degene die je ziet wanneer u op ALT of CONTROL-ALT-F1 F1. De respawn actie brengt de login-prompt terug na je uitlogt.

ctrlaltdel

De ctrlaltdel action controls wat het systeem doet Wanneer u op Control-Alt-Delete op een virtuele console. Op de meeste systemen is dit een soort van reboot commando met behulp van de opdracht shutdown.

sysinit

De sysinit actie is het allereerste wat init die moeten worden uitgevoerd bij het opstarten, voordat u eventuele runlevels.

Hoe Processen in runlevels beginnen

U bent nu klaar om te leren hoe init start het systeem diensten, alleen de voor het laat u zich aanmeldt. Roep deze inittab lijn uit eerdere:

l5: 5: wait :/ etc / rc.d / rc 5

Dit kleine lijn leidt tot veel andere programma's. rc staat voor run commando's, en je hoort mensen verwijzen naar de commando's als scripts, programma's of diensten. Dus, waar zijn deze commando's eigenlijk?

Voor runlevel 5, in dit voorbeeld, de commando's hebben waarschijnlijk ofwel in / etc / rc.d / rc5.d of / etc / rc5.d. 1 runlevel gebruikt rc1.d, runlevel 2 rc2.d gebruik, enzovoort. Misschien vindt u de volgende items in de rc5.d directory:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

De rc 5 commando start programma's op dit runlevel directory door het uitvoeren van de commando's na:

S10sysklogd huis
S12kerneld huis
S15netstd_init huis
S18netbase huis

S99sshd huis

Let op de start argument in elke opdracht. De S in naam van een commando betekent dat de opdracht in startmodus zou moeten lopen, en het aantal (00 via 99) bepaalt waar in de volgorde rc start het commando.

De rc *. D commando wordt meestal op Start Programma's die shell-scripts in / sbin of / usr / sbin. Normaal gesproken kunt u erachter te komen wat een van de commando's eigenlijk niet door te kijken naar het script met minder of semafoon een ander programma.

U kunt een van deze diensten beginnen met de hand. Bijvoorbeeld, als je wilt om het httpd webserver-software handmatig te starten, voert u S99httpd huis. Evenzo, als u ooit nodig om een ​​van de diensten te doden Wanneer de machine is ingeschakeld, kunt u de opdracht in het rc *. D directory met de stop argument (S99httpd stop, bijvoorbeeld).

Sommige rc *. D mappen die bevatten commando's beginnen met K (voor "doden", of gestopt). In dit geval, rc draait het commando met de stop argument in plaats van thuis. U bent waarschijnlijk naar K-opdrachten tegenkomen in runlevels Dat het systeem stilgelegd.

Het toevoegen en verwijderen

Als u wilt toevoegen, verwijderen of diensten te wijzigen in de rc *. D mappen, moet u een kijkje op de bestanden in te nemen. Een lange lijst blijkt dat er een structuur zoals deze:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase

De commando's in het jaar rc *. D-directory is eigenlijk symbolische links naar bestanden in de directory init.d jaar, meestal in / etc of / etc / rc.d. Deze links BEVATTEN Linux-distributies, zodat ze kunnen dezelfde startup scripts te gebruiken voor alle runlevels. Dit verdrag is in geen geval een vereiste, maar het maakt de organisatie vaak wat makkelijker.

Als u een van de opdrachten in het init.d directory Voorkomen wordt uitgevoerd in een bepaalde runlevel, zou je denken van het verwijderen van de symbolische link in de juiste rc *. D directory. Dit werkt wel, maar als je een fout maakt en ooit nodig om de link weer terug op zijn plaats, je zou kunnen hebben moeite met het onthouden van de exacte naam van de link. Daarom moet u niet verwijderen links in de rc * D directories, maar eerder, voeg een onderstrepingsteken (_) aan het begin van de link naam zoals deze.:

mv S99httpd _S99httpd

Tijdens het opstarten, rc negeert _S99httpd omdat het niet Bovendien beginnen met S of K., de oorspronkelijke naam is nog steeds voor de hand, en je hebt snel toegang tot de opdracht als je in een snuifje en de noodzaak om het te starten met de hand.

Als u een service wilt toevoegen, moet u een script zoals de anderen in de init.d directory en maak een symbolische link in de juiste rc *. D directory. De eenvoudigste manier om een ​​script te schrijven is te onderzoeken of het de scripts al in init.d, maakt u een kopie van een dat u begrijpt, en wijzigen van de kopie.

Bij het toevoegen van een service, zorg ervoor dat u kiest voor dat jaar PASSENDE zoals in de opstartvolgorde om de service te starten. Als de service wordt gestart te vroeg, kan het niet werken, als gevolg van de afhankelijkheid van een andere dienst. Voor niet-essentiële diensten, de meeste systeembeheerders liever getallen in de 90s, na het grootste deel van de diensten die nok met het systeem.

Meestal Linux distributies komen met een opdracht om te schakelen en diensten uit te schakelen in de rc *. D directories. Bijvoorbeeld, in Debian, is de opdracht update-rc.d, en in Red Hat Linux, de opdracht is chkconfig. Grafische gebruikersinterfaces is ook beschikbaar. Met behulp van HELPT Deze programma's houden de opstart mappen consistente en helpt bij upgrades.

TIP: Een van de meest voorkomende Linux installatie problemen is onjuist jaren geconfigureerde server XFree86 Dat flicks aan en uit, waardoor het systeem onbruikbaar op de console. U kunt dit probleem laars stoppen in single-user modus en wijzig uw runlevel of runlevel diensten. Kijk voor iets met een gehalte xdm, gdm, kdm of in uw rc *. D mappen, of uw / etc / inittab.

Controlling init

Af en toe, u moet geven init een beetje kick om het te vertellen aan runlevels schakelen, om te herlezen het inittab bestand, of gewoon om het systeem dicht. Omdat init is altijd het eerste proces op het systeem, STI proces ID is altijd 1.

U kunt bedienen init met selderij. Bijvoorbeeld, als u wilt overschakelen naar runlevel 3, gebruikt u deze opdracht:

telinit 3

Bij het schakelen runlevels, init probeert te doden alle processen die aren'ta in het inittab bestand voor de nieuwe runlevel. Daarom moet u voorzichtig zijn over het veranderen van runlevels.

Wanneer u moet toevoegen of verwijderen respawning banen of enige andere wijziging in het inittab bestand, moet u vertellen init over de verandering en zorgen dat het opnieuw het bestand lezen. Sommige mensen gebruiken kill-HUP 1 te vertellen init om dit te doen. Deze traditionele methode werkt op de meeste versies van Unix, zolang je het goed typen. U kunt echter ook het uitvoeren van deze telinit commando:

telinit q

U kunt ook gebruik telinit s over te schakelen naar single-user modus.

Buiten bedrijf stellen

Ook init bepaalt hoe het systeem zichzelf uitschakelt en opnieuw opgestart. De juiste manier af te sluiten een Linux machine is het gebruik van de opdracht shutdown.

Er zijn twee manieren om af te sluiten gebruiken. Als u stoppen van het systeem, het sluit de machine naar beneden en houdt het op. Om de machine onmiddellijk te stoppen te maken, gebruik je dit commando:

shutdown-h now

Op de meeste moderne machines met een redelijk recente versies van Linux, een halt toe te roepen snijdt de stroom naar de machine. U kunt ook opnieuw op te starten van de machine. Voor een reboot, gebruik-R in plaats van-h.

De shutdown proces duurt enkele seconden. Je moet nooit te resetten of uitschakelen van de machine tijdens deze fase.

In het voorgaande voorbeeld, nu is het tijd af te sluiten. Dit argument is verplicht, maar er is veel manieren van het vastleggen van het. Als u wilt dat de machine ergens gaan in de toekomst, een manier is om te gebruiken + n, waarbij n het aantal minuten uitschakelen wachten Alvorens dit te doen ITS zou moeten werken. Voor andere opties, kijk naar de shutdown (8) manual pagina.

Om het systeem te herstarten 10 minuten, voer je dit commando uit:

shutdown-r + 10

Op Linux, shutdown kennis iedereen aangemeld dat de machine naar beneden gaat, maar het doet weinig echte werk. Als je nu opgeeft een ander tijdstip dan, genaamd shutdown Creëert het bestand / etc / nologin. Wanneer dit bestand aanwezig is, is het systeem verbiedt logins door iedereen behalve de superuser.

Bij uitschakeling van het systeem de tijd eindelijk arriveert, shutdown vertelt init naar runlevel 0 schakelen voor een halt toe te roepen en runlevel 6 voor een reboot. Als init komt runlevel 0 of 6, alle van de volgende speelt, zoals, die u kunt controleren door te kijken naar de scripts in rc0.d en rc6.d:

1. init doodt elk proces dat het kan (als het zou Wanneer u overschakelt naar een andere runlevel).

# De eerste rc0.d / rc6.d opdrachten uitvoeren, locking systeem bestanden op zijn plaats en het maken van andere preparaten voor de uitschakeling.
# De volgende rc0.d / commando 'unmount alle bestandssystemen andere rc6.d dan de wortel.
# Verdere rc0.d / commando Monteer het root bestandssysteem rc6.d alleen-lezen.
# Nog meer rc0.d / rc6.d's te schrijven, alle gebufferde op uit om het bestandssysteem met de sync-programma.
# De laatste rc0.d / rc6.d commando de kernel vertellen om opnieuw op te starten of te stoppen met de reboot, halt, of poweroff programma.

De reboot en halt programma's gedragen zich anders voor elk runlevel, wat kan leiden tot verwarring. Standaard deze programma's moet afsluiten met de optie-r of-h opties, maar als het systeem al bij de halt of reboot runlevel, de programma's de kernel vertellen om zichzelf uit te schakelen onmiddellijk. Als je echt wilt om uw machine te sluiten in een haast (zonder rekening te houden schade als gevolg van een onordelijke shutdown Mogelijke), gebruikt u de optie-f.

Laat een bericht achter

Deze site gebruikt Akismet om spam te verminderen. Ontdek hoe uw reactiegegevens worden verwerkt.