Il est important de comprendre le processus de démarrage Linux pour résoudre les problèmes de démarrage. Ce sont les étapes de haut niveau du processus de démarrage. Vous devez connaître les fichiers impliqués dans le processus de démarrage, car les erreurs dans ces fichiers peuvent entraîner des problèmes de démarrage.
S'il y a un problème lors du démarrage, vous devez identifier dans quelle phase du processus de démarrage se situe le problème afin de pouvoir prendre les mesures appropriées pour résoudre le problème.
Présentation de systemd
systemd est le nouveau gestionnaire de système et de service dans CentOS/RHEL 7. Il est rétrocompatible avec les scripts d'initialisation SysV utilisés par les versions précédentes de RedHat Linux, y compris RHEL 6. Il remplace Upstart comme système d'initialisation par défaut.
Les étapes suivantes résument le déroulement de la procédure de démarrage dans RHEL/CentOS 7.
- Le BIOS de l'ordinateur exécute le POST.
- Le BIOS lit le MBR pour le chargeur de démarrage.
- Le chargeur de démarrage GRUB 2 charge l'image du noyau vmlinuz.
- GRUB 2 extrait le contenu de l'image initramfs.
- Le noyau charge les modules du pilote depuis initramfs.
- Le noyau démarre le premier processus du système, systemd.
- Le processus systemd prend le relais. Il :
- Lit les fichiers de configuration du répertoire /etc/systemd
- Lit le fichier lié par /etc/systemd/system/default.target
- Amène le système à l'état défini par la cible système
- Exécute /etc/rc.local
1. POST (Test automatique à la mise sous tension)
À partir du micrologiciel du système, qui peut être l'interface de micrologiciel étendue universelle moderne (UEFI ) ou le classique Basic Input Output System (BIOS ), l'autotest à la mise sous tension (POST) est exécuté et le matériel requis pour démarrer le système est initialisé.
2. Sélection du périphérique amorçable (avec MBR)
– Master Boot Record (MBR) correspond aux 512 premiers octets du lecteur de démarrage qui sont lus en mémoire par le BIOS.
– Les 64 octets suivants contiennent la table de partition du disque. Les deux derniers octets sont le "Magic Number" qui est utilisé pour la détection d'erreur.
- MBR découvre le périphérique amorçable et charge le chargeur de démarrage GRUB2 en mémoire et lui transfère le contrôle.
3. Chargement du chargeur de démarrage (GRUB2)
– Le programme de chargeur de démarrage par défaut utilisé sur RHEL 7 est GRUB 2. GRUB signifie GRand Unified Bootloader . GRUB 2 remplace l'ancien chargeur de démarrage GRUB, également appelé ancien GRUB.
– Le fichier de configuration GRUB 2 se trouve dans /boot/grub2/grub.cfg (ne modifiez pas ce fichier directement).
– Les paramètres de configuration du menu GRUB 2 sont extraits de /etc/default/grub lors de la génération de grub.cfg.
– Exemple de fichier /etc/default/grub :
# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet net.ifnames=0" GRUB_DISABLE_RECOVERY="true"
– Si des modifications sont apportées à l'un de ces paramètres, vous devez exécuter grub2-mkconfig pour regénérer le fichier /boot/grub2/grub.cfg.
# grub2-mkconfig –o /boot/grub2/grub.cfg
– GRUB2 recherche le fichier image du noyau compressé également appelé vmlinuz dans le répertoire /boot.
– GRUB2 charge le fichier image du noyau vmlinuz en mémoire et extrait le contenu du fichier image initramfs dans un système de fichiers temporaire basé sur la mémoire (tmpfs).
– Le disque RAM initial (initrd) est un système de fichiers racine initial qui est monté avant le système de fichiers racine réel.
initramfs
– Le travail du système de fichiers RAM initial consiste à précharger les modules de périphérique de bloc, tels que pour IDE, SCSI ou RAID, afin que le système de fichiers racine, sur lequel ces modules résident normalement, puisse ensuite être accessible et monté.
– L'initramfs est lié au noyau et le noyau monte cet initramfs dans le cadre d'un processus de démarrage en deux étapes.
– L'utilitaire dracut crée initramfs chaque fois qu'un nouveau noyau est installé.
– Utilisez la commande lsinitrd pour afficher le contenu de l'image créée par dracut :
# lsinitrd | less
4. Chargement du noyau
– Le noyau démarre le processus systemd avec un ID de processus de 1 (PID 1).
– Il charge également les modules de pilote nécessaires à partir de l'image initrd.
– Le chargeur de démarrage (GRUB2) peut présenter un menu de démarrage à l'utilisateur ou peut être configuré pour démarrer automatiquement un système d'exploitation par défaut.
– Pour load Linux, le noyau est chargé avec initramfs. L'initramfs contient des modules de noyau pour tout le matériel nécessaire au démarrage, ainsi que les scripts initiaux requis pour passer à l'étape suivante du démarrage.
– Sur RHEL 7, l'initramfs contient un système opérationnel complet (qui peut être utilisé à des fins de dépannage).
5. Démarrage de systemd
– Le noyau démarre le processus systemd avec un ID de processus de 1 (PID 1).
root 1 0 0 02:10 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
– systemd est le premier processus qui démarre après le démarrage du système et le processus final qui s'exécute lorsque le système s'arrête.
– Il contrôle les dernières étapes du démarrage et prépare le système à l'utilisation. Il accélère également le démarrage en chargeant des services simultanément.
– systemd lit le fichier lié par /etc/systemd/system/default.target (par exemple, /usr/lib/systemd/system/multi-user.target) pour déterminer la cible système par défaut (équivalente au niveau d'exécution). Le fichier cible du système définit les services que systemd démarre.
– systemd vous permet de gérer différents types d'unités sur un système, y compris les services (name.service) et les cibles (name.target), les périphériques (name.device) , les points de montage du système de fichiers (nom.mount) et les sockets (nom.socket).
Comparaison des niveaux d'exécution SysV et des unités cibles
Niveau d'exécution | Unités cibles | Description |
---|---|---|
0 | runlevel0.target, poweroff.target | Arrêter et éteindre |
1 | runlevel1.target, rescue.target | Configurer un shell de secours |
2,3,4 | runlevel[234].target, multi-user.target | Configurer un shell multi-utilisateur non graphique |
5 | runlevel5.target, graphique.target | Configurer un shell multi-utilisateur graphique |
6 | runlevel6.target, reboot.target | Arrêter et redémarrer le système |
systemd amène le système à l'état défini par la cible système, en effectuant des tâches d'initialisation du système telles que :
1. Définition du nom d'hôte
2. Initialisation du réseau
3. Initialisation de SELinux en fonction de sa configuration
4. Impression d'une bannière de bienvenue
5. Initialisation du matériel système en fonction des arguments de démarrage du noyau
6. Monter les systèmes de fichiers, y compris les systèmes de fichiers virtuels tels que le système de fichiers /proc
7. Nettoyer les répertoires dans /var
8. Commencer à échanger
Afficher l'unité cible par défaut/actuelle
Utilisez la commande suivante pour voir quelle unité cible est utilisée par défaut :
# systemctl get-default graphical.target
La cible.graphique L'unité cible indique que le système fonctionne dans un état graphique multi-utilisateurs. Ceci est similaire au niveau d'exécution 5 dans un système d'initialisation SysV. Vous pouvez le vérifier en utilisant l'ancienne commande runlevel :
# runlevel N 5
L'unité cible par défaut est représentée par /etc/systemd/system/default.target dossier. Ce fichier est un lien symbolique vers l'unité cible par défaut actuelle. Par exemple :
# ls -lrt /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Sep 23 20:01 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
Modifier l'unité cible par défaut
Utilisez la commande suivante pour modifier l'unité cible par défaut (par exemple, pour remplacer la valeur par défaut par l'unité multi-user.target) :
# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
Notez que le lien symbolique default.target a changé et pointe maintenant vers l'unité multi-user.target :
# ls -lrt /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 41 Sep 24 11:58 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
Le tableau ci-dessous récapitule où une phase spécifique est configurée et ce que vous pouvez faire pour résoudre les problèmes en cas de problème.
Phase de démarrage | Configuration |
---|---|
PUBLIER | Configuration matérielle (F2, ESC, F10 ou autre touche) |
Sélectionner un périphérique amorçable | Configuration BIOS/UEFI ou menu de démarrage matériel |
Charger le chargeur de démarrage | grub2-install et modifications de /etc/defaults/grub |
Charger le noyau | Modifications de la configuration GRUB et de /etc/dracut.conf |
démarrage de /sbin/init | Compilé dans initramfs |
Traitement de initrd.target | Compilé dans initramfs |
Basculer vers le système de fichiers racine | /etc/fstab |
Exécuter la cible par défaut | /etc/systemd/system/default.target |
CentOS / RHEL 7 :Guide du débutant sur les cibles systemd (remplacement des niveaux d'exécution SysV init)