Pourquoi sur certains systèmes Linux, le système de files racine apparaît-il comme / dev / root au lieu de / dev / <noeud de périphérique réel> dans mtab?

J'ai vu sur différents systèmes Linux où, à la place du vrai périphérique (par exemple: /dev/sda1 ), le périphérique racine apparaît sous la forme /dev/root ou à la place du vrai système de files, mtab dit qu'il s'agit d'un système de files appelé rootfs (qui apparaît comme un système de files réel dans /proc/filesystems , mais qui n'a pas de code dans <linux-kernel-source-tree>/fs ). Divers utilitaires ont été utilisés pour utiliser certains attributes afin de déterminer le nœud du périphérique racine réel (tel que rdev et le operating system Chrome rootdev). Je ne peux find aucune explication logique à cette autre que la lecture quelque part que de très petits périphériques embarqués ne doivent pas toujours avoir un nœud de périphérique /dev pour leur périphérique racine. (Est-ce vrai, et si oui, est-ce la réponse à ma question?) Pourquoi mtab dit parfois /dev/root (et je pense l'avoir vu dire rootdev une fois) au lieu du vrai périphérique Je le fais toujours dire le vrai noeud de périphérique? Le kernel monte d'abord le périphérique racine en suivant le paramètre root dans cmdline, puis init/systemd monte en fonction du fstab , correct? Si c'est le cas, alors je présume que init maintient mtab . Si ma théorie est correcte, comment puis-je faire init écrire le nœud du périphérique racine réel sur mtab ? J'ai remarqué que /etc/mtab est en fait un lien symbolique vers /proc/mounts , ce qui signifierait que mtab est maintenu par le kernel. Alors, comment configurer / corriger un kernel, au lieu de dire que le path du nœud des périphériques racine est /dev/root , mtab contient-il le nœud du périphérique réel?

C'est généralement un artefact d'utiliser un initramfs.

A partir de la documentation du kernel ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Qu'est-ce que rootfs?

Rootfs est une instance spéciale de ramfs (ou tmpfs, si c'est activé), qui est toujours présent dans les systèmes 2.6. Vous ne pouvez pas démonter rootfs pour la même raison que vous ne pouvez pas tuer le process d'initialisation; plutôt que d'avoir un code spécial pour vérifier et gérer une list vide, il est plus petit et plus simple pour le kernel de s'assurer que certaines lists ne peuvent pas être vides.

La plupart des systèmes montent un autre système de files sur rootfs et l'ignorent. La quantité d'espace qu'une instance vide de ramfs prend est minuscule.

rootfs est donc le système de files racine créé pour initramfs et ne peut pas être démonté.

En ce qui concerne /dev/root , je suis less sûr à ce sujet, mais si je me souviens bien, /dev/root est créé lors de l'utilisation d'un initrd (différent de initramfs).

Sous Linux, /dev/root , s'il existe, est un lien symbolique vers le périphérique créé au moment du démarrage.

Vous utilisez soit readlink /dev/root ou cat /proc/cmdline pour voir le paramètre root du kernel démarré, et ainsi find le périphérique réel derrière.

De l'homme dracut(8)

Cependant, pour continuer avec un démarrage réussi, l'objective est de localiser votre volume racine et de créer un lien symbolique / dev / root qui pointe vers le système de files.

Gentoo a un correctif qui fait exactement cela (garantit que le périphérique racine réel est affiché). Vous pouvez le find ici: https://lkml.org/lkml/2013/1/31/574