Est-ce que initramfs utilise / etc / fstab?

La façon dont je le comprends, initramfs est chargé de charger le "vrai" système de files racine.

Maintenant, il y a deux endroits où nous définissons cette racine. Tout d'abord, nous mettons une input dans /etc/fstab . Deuxièmement, nous mettons le périphérique sur les commands de démarrage du kernel, par exemple root=/dev/sda1 .

Lequel initramfs utilise-t-il pour déterminer où est le système de files racine? S'il utilise le paramètre root kernel, pourquoi avons-nous une input dans /etc/fstab ? La seconde option, (elle lit /etc/fstab ), est tout à fait illogique car le file /etc/fstab trouve sur le périphérique racine que initramfs tente de monter en premier lieu.

Des trucs très confus.

Comme vous l'avez dit, le but d'initramfs est d'installer le "vrai" système de files racine (il peut faire d'autres choses, mais c'est la tâche courante).

Sans initramfs, le kernel montera normalement une partition en lecture seule, puis passera le contrôle sur /sbin/init . Un initramfs prend en charge cette tâche à partir du kernel, généralement lorsque le système de files racine n'est pas une partition normale (mdraid, lvm, encrypted, etc.).

Maintenant, en dehors de l'arrière-plan sur initramfs, votre /etc/fstab réside sur votre système de files racine. En tant que tel, quand initramfs est lancé, ce système de files racine n'est pas présent et ne peut donc pas accéder au fstab (problème de poule et d'oeuf).
Au lieu de cela, nous devons passer un paramètre dans les arguments de démarrage du kernel pour les initramfs à utiliser. Normalement, c'est quelque chose comme root=/dev/sdX . Cependant, il peut également faire quelque chose pour déterminer automatiquement où votre périphérique racine est, et donc il n'y a pas de paramètre du tout. Comme c'est juste un logiciel (généralement un script), il peut vraiment faire tout ce qu'il veut pour monter le périphérique racine.

Maintenant, comme indiqué précédemment, le kernel montera la racine réelle en lecture seule. Le initramfs devrait faire exactement cela. Une fois que l'initramfs est terminé, le système continue à démarrer exactement comme s'il n'y avait pas d'initramfs, et /sbin/init démarre. Cette initialisation démarre alors tous vos scripts de démarrage normaux, et c'est l'un de ces scripts de lire /etc/fstab , de changer de racine en lecture-écriture et de monter tous vos autres filesystems.

Cela peut arriver ou non. Comme les Initramfs peuvent être construits de différentes manières (le kernel le charge et exécute /init qui fait quoi). Cependant, l'utilisation d'un paramètre est plus fréquente, car elle permet plus de flexibilité – par exemple, si quelque chose change, vous pouvez simplement modifier l'input de démarrage et les choses continuent de fonctionner. Avec une racine codée en dur embeddede, cela ne serait pas nécessairement possible.

L'input fstab peut toujours être requirejse d'une manière ou d'une autre, car elle détermine également d'autres choses, telles que les options de assembly (dont certaines peuvent être modifiées lors de vos déplacements) et l'ordre fsck . Même si c'était totalement superflu (et si l'Initramfs le gère, cela peut fonctionner sans), je garderais toujours l'input là-bas simplement par souci d'exhaustivité.

Vous pouvez considérer / etc / fstab comme un assembly statique, c'est seulement une façon de faire une telle tâche, mais pas le seul, en fait, exécuter la command mount, et vous voyez beaucoup de filesystems manquants dans fstab. Un tel service udev et udisk gère une grande partie du "assembly automatique" en ignorant le file / etc / fstab …

Donc, si quelque chose est monté ou pas souvent cela n'a rien à voir avec / etc / fstab.

initramfs c'est seulement un rootfs temporaire utilisé pendant le process de démarrage jusqu'à ce que le "vrai" rootfs soit monté, alors pourquoi devrait initramfs être sur / etc / fstab?