Comment le Linux ou Unix "/" est-il monté pendant le démarrage?

Les périphériques peuvent être montés sur un path. Par exemple "/ dev / sda1" peut être monté sur "/ home / user". Ce que je ne comprends pas, c'est comment et où le "/" est monté pendant le démarrage. Toute aide expliquant?

Pendant le démarrage d'un système Unix, le kernel fait quelques choses qu'il ne fait pas en fonctionnement normal. L'une de ces choses consiste à monter un système de files sur le directory / ; ceci est très différent des opérations de assembly normales car le assembly n'est pas déclenché par un appel système de mount et le directory cible n'est pas un directory existant. Une autre chose est d' exécuter un programme en tant que PID 1 , ce qui est différent du fonctionnement normal car cela crée un process sans dupliquer un process existant .

La façon dont ce assembly "magique" du directory racine est très différent dans les différentes variantes Unix. Le kernel choisit le périphérique à monter en fonction des parameters de configuration qui peuvent être spécifiés de différentes manières: configuration de la compilation, configuration du runtime dans l'image du kernel, configuration de l'exécution dans un location memory prédéfini, parameters de la command line, … fonctionne sur votre machine, vous devriez regarder la documentation de votre variante Unix et find comment votre machine est configurée.

Pour donner une idée de son fonctionnement, voici un aperçu du fonctionnement d'un kernel Linux moderne. Ce n'est pas l'exemple le plus simple car Linux a beaucoup d'historique et de cas d'utilisation variés.

  • Linux peut commencer avec un système de files "spécial" attaché au path / , qui consiste en des files stockés dans la RAM. Ce système de files spécial s'appelle initramfs ; c'est une instance du type de système de files rootfs. Le file initramfs est rempli par le contenu transmis par le chargeur de démarrage via un protocole dépendant de l'architecture, compilé directement dans l'image du kernel chargée en memory par le chargeur de démarrage.
  • Sinon, Linux peut monter un périphérique sur / faisant partie d'un set restreint (mais grand) de types de volumes reconnus par le code d'initialisation dans le kernel. Ces types de périphériques incluent tout système de files sur des types communs de partitions sur des types de disques courants (tout ce qui ressemble à un SCSI, y compris ATA, USB, etc.), ainsi que des disques RAM et des assemblys NFS.
  • En fonction du path emprunté, le système de files racine initial peut ensuite être ombré ou remplacé par un autre. L'observation est ce qui se passe avec un initramfs, et c'est ainsi que fonctionnent la plupart des systèmes de bureau et de server (les systèmes embarqués, en revanche, ont souvent un système de files racine codé en dur). Le rlocation est ce qui se passe avec un initrd , qui est un type particulier de disque RAM. Le travail de initramfs ou initrd consiste à charger les pilotes qui fournissent le système de files racine «réel» qui sera utilisé en fonctionnement normal.

Cela provient du manuel bootup(7) sur une machine Ubuntu:

Un certain nombre de composants différents sont impliqués dans le démarrage du système. Immédiatement après la mise sous tension, le BIOS du système effectuera une initialisation matérielle minimale et contrôlera manuellement un chargeur de démarrage stocké sur un périphérique de stockage persistant. Ce chargeur de démarrage invoque ensuite un kernel du operating system à partir du disque (ou du réseau). Dans le cas de Linux, ce kernel extrait et exécute une image disque initiale ( initrd ), telle que générée par dracut(8) , qui search le système de files racine (éventuellement en utilisant systemd(1) ). Après avoir trouvé et monté le système de files racine, l' initrd remet le contrôle au gestionnaire système de l'hôte (tel que systemd(1) ) stocké sur l'image du operating system, qui est ensuite chargé de vérifier tout le matériel restant frayant tous les services configurés.

Vous auriez trouvé cela par le man boot , en le lisant et en ne trouvant pas la réponse, mais en voyant "Voir aussi: bootup(7) " en bas du manuel.

Étant curieux, j'ai ensuite regardé le manuel d' initrd :

Dans la première phase de démarrage, le kernel démarre et monte un système de files racine initial à partir du contenu de /dev/initrd (par exemple, disque RAM initialisé par le chargeur de démarrage). Dans la deuxième phase, des pilotes supplémentaires ou d'autres modules sont chargés à partir du contenu du périphérique racine initial. Après le chargement des modules supplémentaires, un nouveau système de files racine (c'est-à-dire le système de files racine normal) est monté à partir d'un autre périphérique.

Vous avez mentionné "Unix", donc je vais vous montrer la documentation pour le bootstrap du système de première étape d' OpenBSD et le bootstrap de deuxième étape aussi.