How Linux boots

Comment le Linux initialise :

Car il s'avère, il n'y a pas beaucoup au processus de botte :

  1. Un chargeur de botte trouve l'image de grain sur le disque, charges il dans la mémoire, et la commence.
  2. Le grain initialise les dispositifs et ses conducteurs.
  3. Le grain monte le système de fichiers de racine.
  4. Le grain commence un programme appelé l'init.
  5. l'init place le reste des processus dans le mouvement.
  6. Les processus de bout que l'init commence en tant qu'élément de l'ordre de botte te permettent d'ouvrir une session.

L'identification de chaque étape du processus de botte est de valeur inestimable dans des problèmes et l'arrangement de botte de fixation le système dans son ensemble. Pour commencer, mettez à zéro dedans sur le chargeur de botte, qui est l'écran initial ou vous incite obtient après que l'ordinateur fasse le son puissance-sur l'autotest, demandant quel du système d'exploitation à courir. Après que vous fassiez un choix, le chargeur de botte court le grain de Linux, remettant la commande du système au grain.

Il y a un examen détaillé du grain ailleurs dans ce livre duquel cet article est extrait. Cet article couvre l'étape d'initialisation de grain, l'étape quand le grain imprime un groupe de messages au sujet du matériel actuel sur le système. Le grain commence l'init juste après qu'il affiche un message proclamant que le grain a monté le système de fichiers de racine :

VFS : Racine montée (système de fichiers ext2) inaltérable.

Peu après, vous verrez un message au sujet de commencer d'init, suivi des messages de démarrage de service de système, et finalement vous obtenez un message de sollicitation d'ouverture d'une certaine sorte.

NOTE Sur Red Hat Linux, la note d'init est particulièrement évidente, parce qu'elle "vous accueille" à "Red Hat Linux." Tous les messages montrent ensuite le succès ou l'échec entre parenthèses sur le côté droit de l'écran.

La majeure partie de ce chapitre traite l'init, parce que c'est la partie de l'ordre de botte où vous avez la plupart de commande.

init

Il n'y a rien spécial au sujet de l'init. C'est un programme juste comme tout autre sur le système de Linux, et vous le trouverez dans /sbin avec d'autres binaires de système. Le but principal de l'init est de commencer et arrêter d'autres programmes dans un ordre particulier. Tout que vous devez savoir est comment cet ordre fonctionne.

Il y a quelques différentes variations, mais la plupart des distributions de Linux emploient le modèle du système V discuté ici. Quelques distributions emploient une version plus simple qui ressemble à l'init de schéma, mais vous êtes peu susceptible de rencontrer ceci.

Runlevels

À un moment donné sur un système de Linux, un certain ensemble de base de processus fonctionne. Cet état de la machine s'appelle le son runlevel, et on le dénote avec un nombre de 0 à 6. Le système passe la majeure partie de son temps dans un runlevel simple. Cependant, quand vous avez fermé la machine, commutateurs d'init à un runlevel différent afin de terminer les services de système d'une mode ordonnée et dire le grain de s'arrêter. Encore un autre runlevel est pour le mode à utilisateur unique, discuté plus tard.

La manière la plus facile d'obtenir une poignée sur des runlevels est d'examiner le fichier de configuration d'init, /etc/inittab. Recherchez une ligne comme ce qui suit :

id:5:initdefault:

 

Cette ligne signifie que le runlevel de défaut sur le système est 5. Toutes les lignes dans le dossier d'inittab prennent cette forme, avec quatre champs séparés par des deux points se produisant dans l'ordre suivant :

  • # marque unique d'A (une corde courte, telle que l'identification dans l'exemple précédent)
  • Les nombres applicables de runlevel
  • La mesure que l'init devrait prendre (dans l'exemple précédent, l'action est de placer le runlevel de défaut à 5)
  • Une commande de s'exécuter (facultatif)

Il n'y a aucune commande de s'exécuter dans l'exemple précédent d'initdefault parce qu'une commande ne semble pas raisonnable dans le cadre de placer le runlevel de défaut. Regardez un peu davantage bas dans l'inittab, jusqu'à ce que vous voyiez une ligne comme ceci :

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

Cette ligne déclenche la plupart de la configuration et des services de système par les annuaires de rc*.d et d'init.d. Vous pouvez voir que l'init est placé pour exécuter une commande appelée /etc/rc.d/rc 5 quand dans le runlevel 5. L'action d'attente indique quand et que l'init court la commande : courez le rc 5 une fois en écrivant le runlevel 5, et attendez alors cette commande de finir avant de faire toute autre chose.

Il y a plusieurs différentes actions en plus d'initdefault et d'attente, particulièrement concernant la gestion de puissance, et l'inittab (5) le page-manuel vous indique tout au sujet de eux. Ceux qu'il est le plus susceptible rencontrer vous sont expliqués dans les sections suivantes.

respawn

L'action de respawn fait courir l'init la commande qui suit, et si la commande finit de s'exécuter, pour la courir encore. Vous êtes susceptible de voir quelque chose semblable à cette ligne dans votre dossier d'inittab :

1:2345:respawn:/sbin/mingetty tty1

 

Les programmes getty fournissent des messages de sollicitation d'ouverture. La ligne précédente est pour la première console virtuelle (/dev/tty1), celui que vous voyez quand vous pressez ALT-F1 ou CONTROL-ALT-F1. L'action de respawn rapporte le message de sollicitation d'ouverture après que vous vous déconnectiez.

ctrlaltdel

Les commandes d'action de ctrlaltdel ce que le système fait quand vous pressez CONTROL-ALT-DELETE sur une console virtuelle. Sur la plupart des systèmes, c'est une certaine sorte de commande de remise à zéro utilisant la commande d'arrêt.

sysinit

L'action de sysinit est la toute première chose que l'init devrait courir quand il commence vers le haut, avant d'écrire tous les runlevels.

Comment les processus dans les runlevels commencent

Vous êtes maintenant prêt à apprendre comment l'init commence les services de système, juste avant qu'il vous laisse ouvrir une session. Rappelez cette ligne d'inittab de plus tôt :

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

Cette petite ligne déclenche beaucoup d'autres programmes. le rc représente des commandes courues, et vous entendrez des personnes se référer aux commandes comme manuscrits, programmes, ou services. Ainsi, où sont-elles ces commandes, quoi qu'il en soit ?

Pour le runlevel 5, dans cet exemple, les commandes sont probablement dans /etc/rc.d/rc5.d ou /etc/rc5.d. Runlevel 1 emploie rc1.d, les utilisations rc2.d du runlevel 2, et ainsi de suite. Vous pourriez trouver les articles suivants dans l'annuaire de rc5.d :

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

 

Les programmes de débuts de commande du rc 5 dans cet annuaire de runlevel en courant les commandes suivantes :

S10sysklogd start
S12kerneld start
S15netstd_init start
S18netbase start
...
S99sshd start

 

Notez l'argument de début dans chaque commande. Le S dans un nom de commande signifie que la commande devrait fonctionner en mode de début, et le nombre (00 à 99) détermine où dans l'ordre le rc commence la commande.

Les commandes de rc*.d sont habituellement des manuscrits de coquille qui commencent des programmes dans /sbin ou /usr/sbin. Normalement, vous pouvez figurer dehors ce qu'une des commandes fait réellement en regardant le manuscrit avec un moins ou un programme différent de bipeur.

Vous pouvez commencer un de ces services à la main. Par exemple, si vous voulez commencer le programme de web server de httpd manuellement, courez le début de S99httpd. De même, si vous devez jamais tuer un des services quand la machine est allumée, vous pouvez courir la commande dans l'annuaire de rc*.d avec l'argument d'arrêt (arrêt de S99httpd, par exemple).

Les annuaires d'un certain rc*.d contiennent les commandes qui commencent par du K (pour la "mise à mort," ou le mode d'arrêt). Dans ce cas-ci, le rc court la commande avec l'argument d'arrêt au lieu du début. Vous êtes le plus susceptible de rencontrer des commandes de K dans les runlevels qui ferment le système.

Ajoutant et enlevant des services

Si vous voulez ajouter, supprimer, ou modifier des services dans les annuaires de rc*.d, vous devez prendre un œil plus attentif aux dossiers à l'intérieur. Une longue liste indique une structure comme ceci :

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

 

Les commandes dans un annuaire de rc*.d sont réellement des liens symboliques aux dossiers dans un annuaire d'init.d, habituellement dans /etc ou /etc/rc.d. Les distributions de Linux contiennent ces liens de sorte qu'elles puissent employer les mêmes manuscrits de démarrage pour tous les runlevels. Cette convention est nullement une condition, mais elle facilite souvent l'organisation un peu.

Pour empêcher une des commandes dans l'annuaire d'init.d de courir dans un runlevel particulier, vous pourriez penser à enlever le lien symbolique dans l'annuaire approprié de rc*.d. Ceci fonctionne, mais si vous faites une erreur et devez jamais remettre le lien en place, vous pourriez avoir l'ennui se rappelant le nom exact du lien. Par conséquent, vous ne devriez pas enlever des liens dans les annuaires de rc*.d, mais plutôt, ajoutez un soulignage (_) au commencement du nom de lien comme ceci :

mv S99httpd _S99httpd

 

Au temps de botte, le rc ignore _S99httpd parce qu'il ne commence pas par S ou K. En outre, le nom original est encore évident, et vous avez à accès rapide à la commande si vous êtes dans un pincement et devez le commencer à la main.

Pour ajouter un service, vous devez créer un manuscrit comme les autres dans l'annuaire d'init.d et puis faire un lien symbolique dans l'annuaire correct de rc*.d. La manière la plus facile d'écrire un manuscrit est d'examiner les manuscrits déjà dans init.d, tirent une copie d'une que vous comprenez, et modifient la copie.

En ajoutant un service, assurez-vous que vous choisissez un endroit approprié dans l'ordre de botte pour commencer le service. Si le service commence trop tôt, il peut ne pas fonctionner, en raison d'une dépendance à un autre service. Pour des services non essentiels, la plupart des interfaces gestionnaire préfèrent des nombres dans les années 90, après la plupart des services qui sont venus avec le système.

Les distributions de Linux viennent habituellement avec une commande de permettre et désactiver des services dans les annuaires de rc*.d. Par exemple, dans Debian, la commande est update-rc.d, et dans Red Hat Linux, la commande est chkconfig. Les interfaces utilisateurs graphiques sont également disponibles. Utilisant ces programmes les aides maintiennent les annuaires de démarrage compatibles et des aides aux mises à niveau.

CONSEIL : Un des problèmes d'installation de Linux les plus communs est un serveur XFree86 incorrectement configuré qui effleure en marche et en arrêt, rendant le système inutilisable sur la console. Pour arrêter ce comportement, initialisez dans le mode à utilisateur unique et changez votre runlevel ou services de runlevel. Recherchez quelque chose qui contient le xdm, le gdm, ou le kdm dans vos annuaires de rc*.d, ou votre /etc/inittab.

Init de contrôle

De temps en temps, vous devez donner à init coup-de-pied pour le dire pour commuter des runlevels, pour relire le dossier d'inittab, ou pour arrêter juste le système. Puisque l'init est toujours le premier processus sur un système, son identificateur de processus est toujours 1.

Vous pouvez commander l'init avec le telinit. Par exemple, si vous voulez commuter au runlevel 3, employez cette commande :

telinit 3

Quand runlevels de changement, essais d'init pour tuer au loin tous processus qui ne sont pas dans le dossier d'inittab pour le nouveau runlevel. Par conséquent, vous devriez faire attention au sujet des runlevels changeants.

Quand vous devez ajouter ou enlever les travaux respawning ou apporter n'importe quelle autre modification au dossier d'inittab, vous devez dire l'init au sujet du changement et le faire relire le dossier. Mise à mort d'utilisation de certains - HUP 1 pour dire l'init de faire ceci. Cette méthode traditionnelle travaille sur la plupart des versions d'Unix, tant que vous la dactylographiez correctement. Cependant, vous pouvez également courir cette commande de telinit :

telinit q

Vous pouvez également employer le telinit s pour commuter au mode à utilisateur unique.

Arrêt

d'init commandes également comment le système s'est arrêté et des remises à zéro. La manière appropriée d'arrêter une machine de Linux est d'employer la commande d'arrêt.

Il y a deux manières de base d'employer l'arrêt. Si vous arrêtez le système, il ferme la machine et la réduit. Pour faire la machine s'arrêter immédiatement, employez cette commande :

arrêt - h maintenant

Sur la plupart des machines modernes avec des versions raisonnablement récentes de Linux, une halte coupe la puissance à la machine. Vous pouvez également recharger la machine. Pour une remise à zéro, employez - r au lieu de - h.

Le processus d'arrêt prend plusieurs secondes. Vous devriez ne jamais remettre à zéro ou mise hors tension une machine pendant cette étape.

Dans l'exemple précédent, est maintenant l'heure de s'arrêter. Cet argument est obligatoire, mais il y a beaucoup de manières de le spécifier. Si vous voulez que la machine descende autrefois à l'avenir, l'one-way est d'employer +n, où n est le nombre de minutes où l'arrêt devrait attendre avant d'effectuer son travail. Pour d'autres options, regardez l'arrêt (8) page-manuel.

Pour faire la remise à zéro de système en 10 minutes, courez cette commande :

arrêt - r +10

Sur le Linux, l'arrêt informe n'importe qui ouvert une session que la machine descend, mais elle effectue peu de travaux réels. Si vous spécifiez un moment autre que maintenant, l'arrêt crée un dossier appelé /etc/nologin. Quand ce dossier est présent, le système interdit des ouvertures par n'importe qui excepté le super-utilisateur.

Quand le temps d'arrêt normal du système arrive finalement, l'arrêt indique l'init commuter au runlevel 0 pour une halte et au runlevel 6 pour une remise à zéro. Quand l'init écrit le runlevel 0 ou 6, tout les suivre a lieu, que vous pouvez vérifier en regardant les manuscrits à l'intérieur de rc0.d et de rc6.d :

1. l'init tue chaque processus qu'il peut (comme il en commutant à n'importe quel autre runlevel).

  • Les commandes initiales de rc0.d/rc6.d courez, en fermant à clef des fichiers système sur l'endroit et en faisant d'autres préparations pour l'arrêt.
  • Les prochaines commandes de rc0.d/rc6.d unmount tous les systèmes de fichiers autres que la racine.
  • D'autres commandes de rc0.d/rc6.d remount le système de fichiers de racine inaltérable.
  • Plus de commandes toujours de rc0.d/rc6.d écrivez toutes les données protégées dehors au système de fichiers avec le programme de synchro.
  • Les commandes finales de rc0.d/rc6.d dites le grain de recharger ou s'arrêter avec la remise à zéro, la halte, ou le programme de poweroff.

Les programmes de remise à zéro et de halte se comportent différemment pour chaque runlevel, potentiellement entraînant la confusion. Par défaut, ces programmes appellent l'arrêt avec - r ou - les options de h, mais si le système est déjà au runlevel de halte ou de remise à zéro, les programmes disent le grain de se fermer au loin immédiatement. Si vous voulez vraiment fermer votre machine vers le bas dans une hâte (abstraction faite de tous dommages possibles d'un arrêt désordonné), employez l'option de -f.


Pick a language
English  French