J'ai lu ce document IBM populaire (je le vois référé assez souvent sur le web) expliquant la fonction du disque RAM initial.
J'ai heurté un mur en conceptualisant comment cela fonctionne.
Dans le doc, il est écrit
Le chargeur de démarrage, tel que GRUB, identifie le noyau à charger et copie cette image du noyau et tout initrd associé en mémoire
Je suis déjà confus: copie-t-il le noyau entier dans la mémoire ou seulement une partie de celui-ci? Si le noyau entier est en mémoire, alors pourquoi avons-nous même besoin du disque RAM initial?
Je pensais que le but d'initrd était de pouvoir avoir une petite image généralisée du noyau et initrd y installera les bons modules avant que l'image du noyau ne soit chargée. Mais si le noyau entier est déjà en mémoire, pourquoi avons-nous besoin d'initrd?
Cela soulève également une autre chose qui m'embrouille - où se trouvent les modules chargés dans le noyau? Tous les modules du noyau sont-ils stockés dans initrd?
udev
généralement, et oui, automatiquement.Réponses:
Le noyau entier est chargé en mémoire au démarrage, généralement avec un de
initramfs
nos jours. (Il est toujours possible de configurer un système pour démarrer sans,initramfs
mais c'est inhabituel sur les ordinateurs de bureau et les serveurs.)Le
initramfs
rôle est de fournir les fonctionnalités nécessaires pour monter les "vrais" systèmes de fichiers et continuer le démarrage du système. Cela implique des modules du noyau, ainsi que divers binaires: vous avez besoin d'au moinsudev
, peut-être de la mise en réseau, etkmod
qui charge les modules.Les modules peuvent être chargés dans le noyau après le démarrage, il n'y a donc pas de préparation spéciale du noyau par le
initramfs
. Ils peuvent être stockés n'importe où: leinitramfs
,/lib/modules
sur le vrai système de fichiers, dans une arborescence de développement si vous développez un module ... Ilinitramfs
suffit de contenir les modules nécessaires pour monter le système de fichiers racine (qui contient le reste).la source
Le noyau entier (mais pas ses modules) sera chargé en mémoire. S'il y a des modules dont le noyau aura besoin avant que des systèmes de fichiers ne soient disponibles (cela signifie généralement les pilotes des systèmes de fichiers et de leurs périphériques), alors ces modules seront dans les initramfs (en mémoire), et le noyau les chargera à partir de là. D'autres modules peuvent être chargés ultérieurement à partir du système de fichiers.
la source
Le noyau dans les configurations Linux modernes est fortement basé sur les modules, c'est-à-dire que le noyau proprement dit (chargé au démarrage dans la RAM) ne comprend que le strict minimum, tout le reste est compilé sous forme de modules (chargeable à l'exécution). Pour que cela fonctionne même lorsque, par exemple, les périphériques ou systèmes de fichiers requis pour le démarrage sont des modules, an
initramfs
est chargé avec le noyau (comme son nom l'indique, il s'agit d'une zone RAM avec un système de fichiers simple, monté au démarrage). Ce système de fichiers temporaire est monté sur/
et contient des programmes de démarrage et les modules requis. Une fois le démarrageinitramfs
terminé, Linux exécute unpivot_root(8)
, montant le réel/
et jetant leinitramfs
contenu.Le point de cette complexité est que, par exemple, une distribution peut compiler un noyau (noyau minimal et ensemble complet de modules), et lors de l'installation du noyau, créer une version
initramfs
adaptée au matériel et à la configuration de la machine cible. Tout cela est nécessaire en raison de la grande variété d'appareils et de configurations des "ordinateurs personnels".la source
pivot_root
.