Initramfs utilise-t-il / etc / fstab?

20

D'après ce que je comprends, initramfs est responsable du chargement du "vrai" système de fichiers racine.

Maintenant, il y a deux endroits où nous définissons cette racine. Nous avons d'abord mis une entrée /etc/fstab. Deuxièmement, nous mettons le périphérique sur les commandes de démarrage du noyau, par exemple root=/dev/sda1.

Lequel utilise initramfs pour déterminer où se trouve le système de fichiers racine? S'il utilise le paramètre du noyau racine, pourquoi avons-nous une entrée dans /etc/fstab? La deuxième option, (elle lit /etc/fstab), est assez illogique parce que le /etc/fstabfichier se trouve sur le périphérique très racine que initramfs essaie de monter en premier lieu.

Des trucs très déroutants.

Ahmed Ghonim
la source

Réponses:

14

Comme vous l'avez dit, le but d'initramfs est de monter le "vrai" système de fichiers racine (il peut aussi faire autre chose, mais c'est la tâche courante).

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

Maintenant, en dehors de l'arrière-plan sur initramfs, votre /etc/fstabréside sur votre système de fichiers racine. En tant que tel, lorsque initramfs est lancé, ce système de fichiers racine n'est pas là, et il ne peut donc pas accéder au fstab (problème de poulet et d'oeuf).
Au lieu de cela, nous devons passer un paramètre dans les arguments de démarrage du noyau pour que les initramfs l'utilisent. Normalement, c'est quelque chose comme ça root=/dev/sdX. Cependant, il pourrait également faire quelque chose pour déterminer automatiquement où se trouve votre périphérique racine, et donc il n'y a aucun paramètre du tout. Comme il ne s'agit que d'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 noyau montera la vraie racine en lecture seule. Les initramfs devraient faire exactement cela. Une fois les initramfs terminés, le système démarre le démarrage exactement comme s'il n'y avait aucun initramfs et /sbin/initdémarre. Cette init démarre alors tous vos scripts de démarrage normaux, et c'est le travail de l'un de ces scripts de lire /etc/fstab, de basculer root en lecture-écriture et de monter tous vos autres systèmes de fichiers.

Patrick
la source
Donc, vous dites que / sbin / init à l'intérieur du vrai système de fichiers racine remonterait à nouveau root en utilisant les options dans / etc / fstab?
Ahmed Ghonim
3
Oui. Habituellement via un simple mount -o remount,rw /. Cela ne changera pas le périphérique qui est monté, mais cela changera les options sur le support. Depuis la page de manuel:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick
Comment passer un paramètre dans les arguments de démarrage du noyau si nous utilisons la ligne de commande grub2? Mon système n'affiche pas le menu grub pour une raison quelconque.
intuition
@intuited Vous devriez poser une nouvelle question. Les commentaires ne sont pas la place pour Q & A.
Patrick
lsinitramfs /boot/initrd* | fgrep fstabet surprise, initramfs contient un fichier fstab, du moins pour moi.
youfu
2

Cela peut ou non. Comme les Initramfs peuvent être construits de différentes manières (le noyau le charge et s'exécute /initqui fait tout). Cependant, l'utilisation d'un paramètre est plus courante, car elle permet plus de flexibilité - c'est-à-dire que si quelque chose change, vous pouvez simplement modifier l'entrée de démarrage et les choses continuent de fonctionner. Avec une racine codée en dur intégrée, cela ne serait pas nécessairement possible.

L'entrée fstab peut toujours être requise dans les deux cas car elle détermine également d'autres choses, telles que les options de montage (dont certaines peuvent être modifiées à tout moment) et l' fsckordre. De plus, même s'il était entièrement superflu (et si les Initramfs le gèrent, cela peut fonctionner sans), je garderais toujours l'entrée là simplement pour être complet.

frostschutz
la source
1

Vous pouvez considérer / etc / fstab comme un montage statique, ce n'est qu'une façon de faire une telle tâche, mais pas la seule, en fait, exécuter le montage de commande, et vous voyez beaucoup de systèmes de fichiers qui manquent dans fstab. Un tel service udev et udisk gère une grande partie du "montage automatique" en ignorant le fichier / 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 processus de démarrage jusqu'à ce que le "vrai" rootfs soit monté, alors pourquoi initramfs devrait-il être sur / etc / fstab?

sebelk
la source