Pourquoi sur certains systèmes Linux, le système de fichiers racine apparaît-il sous la forme / dev / root au lieu de / dev / <nœud de périphérique réel> dans mtab?

11

J'ai vu sur divers systèmes Linux où, au lieu du nœud de périphérique réel (par exemple:) /dev/sda1, le périphérique racine apparaît comme /dev/root, ou au lieu du vrai système de fichiers, mtabdit que c'est un système de fichiers appelé rootfs(qui apparaît comme un vrai système de fichiers dans /proc/filesystems, mais n'a pas de code <linux-kernel-source-tree>/fs). Divers utilitaires ont été créés pour utiliser certains attributs afin de déterminer le véritable nœud de périphérique racine (tel que rdev et Chromium OS rootdev). Je ne peux trouver aucune explication logique à cela autre que de lire quelque part que les très petits périphériques intégrés n'ont pas toujours besoin d'avoir un /devnœud de périphérique pour leur périphérique racine. (Est-ce vrai, et si c'est le cas, est-ce la réponse à ma question?) Pourquoi mtab dit-il parfois /dev/root(et je pense que j'aurais pu le voir direrootdevune fois) au lieu du nœud de périphérique réel, et comment puis-je toujours dire le nœud de périphérique réel? Le noyau monte d'abord le périphérique racine en suivant le rootparamètre dans la ligne de commande, puis le init/systemdremonte en fonction de la fstab, correct? Si c'est le cas, je présume que le initmaintien mtab. Si ma théorie est correcte, comment puis-je faire initécrire le vrai nœud de périphérique racine mtab? J'ai remarqué qu'il /etc/mtabs'agit en fait d'un lien symbolique vers /proc/mounts, ce qui signifierait qu'il mtabest maintenu par le noyau. Alors, comment puis-je configurer / patcher un noyau pour, au lieu de dire que le chemin du nœud des périphériques racine est /dev/root, mtabcontenir le véritable nœud du périphérique?

Gamelle
la source

Réponses:

4

Il s'agit généralement d'un artefact de l'utilisation d'un initramfs.

Depuis la documentation du noyau ( 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 cette option est activée), qui est toujours présente 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 processus init; plutôt que d'avoir du code spécial pour rechercher et gérer une liste vide, il est plus petit et plus simple pour le noyau de s'assurer que certaines listes ne peuvent pas devenir vides.

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

Il en rootfsest de même du système de fichiers racine qui a été créé pour les initramfs et ne peut pas être démonté.

En ce qui concerne /dev/root, je suis moins certain à ce sujet, mais si je me souviens bien, il /dev/rootest créé lors de l'utilisation d'un initrd (pas le même qu'un initramfs).

Patrick
la source
mountdonne rootfs on / type rootfs (rw)pour initrd et /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)pour ext2 disque dur avec cette configuration .
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
/dev/rootest utilisé par certaines implémentations d'initramfs mais pas par d'autres - dans ces cas, il n'est pas dû au noyau. Lorsqu'il n'utilise pas d'initramfs, il semble que ce soit une valeur d'espace réservé utilisée par le noyau. (Peut-être pourrait-il être supprimé dans une version ultérieure du noyau). stackoverflow.com/questions/37310046/…
sourcejedi
3

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

Milos Ivanovic
la source
2

Sous Linux, /dev/roots'il est présent, est un lien symbolique vers le périphérique réel créé au démarrage.

Vous utilisez soit readlink /dev/rootou cat /proc/cmdlinepour voir le rootparamètre du noyau démarré, et ainsi découvrir le vrai périphérique derrière lui.

De l'homme dracut(8)

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

Rui F Ribeiro
la source
Je ne suis pas tout à fait sûr s'il /dev/roots'agit d'un artefact de distributions basées sur RedHat.
Rui F Ribeiro
Eh bien, mon Debian 8 n'en a pas /dev/root/. Sur un ancien CentOS, il semble être un véritable nœud de périphérique au lieu d'un lien symbolique.
ilkkachu
1
Eh bien, la base-filesrecette d' OpenEmbeddedfstab mentionne /dev/root, donc ce ne sont pas seulement les distributions provenant de Red Hat qui l'utilisent.
Ack