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 J'ai remarqué que init
écrire le nœud du périphérique racine réel sur mtab
?/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