Beaucoup de gens continuent de dire que Linux ne conserve pas d'informations sur les montages de liaison, il n'y a donc aucun moyen d'obtenir une liste d'entre eux et leurs sources. Voici quelques exemples:
à partir d' un des commentaires ici :
IIRC cette information n'est conservée nulle part: après
mount --bind
, les deux exemplaires sont équivalents, il n'y en a pas un qui soit plus «original» que l'autre. Après tout, il ne pourrait y avoir d'original si vous l'aviez déjà démonté/mnt
.-
Donc, la seule façon de se souvenir des montures étaient des montures de liaison est le journal des commandes de montage restantes
/etc/mtab
. Une opération de montage de liaison est indiquée par l'option de montage de liaison (qui entraîne l'ignorance du type de système de fichiers). Mais mount n'a pas d'option pour répertorier uniquement les systèmes de fichiers montés avec un ensemble particulier d'ensembles d'options. à partir d' un rapport de bogue Debian :
C'est intentionnel. Les deux points de montage sont entièrement égaux à tous égards, de sorte que le noyau ne conserve aucun indicateur pour les différencier.
Ce qui précède est cependant insensé. L'outil findmnt
est capable de répertorier les chemins source des montages de liaison (sous la forme de device[source-path]
; j'essaie également de le faire lister uniquement le chemin source et non le périphérique). Si le noyau Linux doit maintenir un montage de liaison, alors ces informations doivent être stockées quelque part , sinon il ne pourrait pas savoir à quoi il /home
est lié /users
. Alors, où sont ces données? Est-il stocké dans une région obscure de la RAM? Est -ce que findmnt
regarder dans /proc
quelque part?
la source
findmnt
utilisez-vous et quelles options proposez-vous? Le mien ne l'imprime pas comme ça et regarde le code source qu'il semble utiliser_PATH_PROC_MOUNTINFO
et/proc/self/mountinfo
qui ne contient pas non plus ces informations./proc/self/mountinfo
restructuration a été relativement récente. J'étais sur ma machine RHEL6 avant qui n'avait pas les informations de chemin mais ma machine RHEL7 en a et comme mentionné dans votre lien Wheezy aussi./dev/A
est monté à/B
et vous le faitesmount --bind /B /C
, les noyaux plus anciens ne se souviennent que de,/B → /dev/A
et/C → /dev/A
ils ne se souviennent d'aucune relation entre/B
et/C
. Le démontage/B
n'a donc naturellement aucun effet/C
. Les noyaux plus récents se souviennent que/C
c'était un montage de liaison/B
, mais d'une manière qui n'empêche pas/C
de continuer à fonctionner s'il/B
n'est pas monté, je ne sais pas exactement comment.Réponses:
Vous avez un peu mal compris; les deux points de montage sont égaux en termes d'autorisations, d'indicateurs, etc. car la liaison redirige efficacement l'accès d'un chemin à un autre. Mais ils sont encore distincts .
Si vous regardez,
/proc/self/mountinfo
vous verrez la vue du noyau du monde de montage pour ce processus (les espaces de noms rendent les choses plus compliquées; il n'y a pas qu'une seule vue de la table de montage).man 5 proc
expliquera le format de ce fichier, mais vous pouvez voir la hiérarchie de l'arborescence et où les montures de liaison ont leur "parent". Il s'agit du fichier quifindmnt
analyse.la source
Linux ne conserve pas les informations sur le montage qui était un montage de liaison . Il conserve des informations sur tous les montages, y compris les montages de liaison .
C'est assez similaire aux liens durs. Monte les liens vers les systèmes de fichiers comme les noms de fichiers vers les inodes. Les seules différences sont que les montages ont également des indicateurs par point de montage et peuvent faire référence à un sous-répertoire du système de fichiers cible au lieu de la racine du système de fichiers.
Lorsque vous créez un lien dur, le système de fichiers n'enregistre pas quel nom de fichier était l'original et quel était le lien dur. Les deux se réfèrent simplement au même inode. Si vous dissociez le fichier d'origine, il est impossible de distinguer la situation de la création directe du fichier avec le deuxième nom de fichier.
Retour pour lier les montages: Le noyau conserve une table qui contient le système de fichiers (identifié par une paire de nombres majeurs: mineurs), le point de montage, le chemin relatif à la racine du système de fichiers et quelques indicateurs. Vous pouvez accéder à cette liste en consultant
/proc/self/mountinfo
. (Cela devient plus compliqué lorsque les espaces de noms sont impliqués, comme l'a mentionné @ stephen-harris).findmnt
analyse cette liste.Si votre racine est
/dev/sda1
avec le majeur: mineur8:1
et que vous exécutezmount --bind /a /b
/proc/self/mountinfo
contiendra des lignes similaires à ceci:Si votre
/home
est/dev/sda2
avec le majeur: mineur8:2
et que vous exécutez ,mount --bind /home /users
il ressemblera à ceci:Les colonnes pertinentes pour votre question sont les troisième, quatrième et cinquième. Il s'agit de l'ID du système de fichiers (pour les systèmes de fichiers réels, c'est la même chose que le périphérique majeur: mineur; pour les systèmes de fichiers virtuels comme tmpfs, c'est [0: compteur ]), le chemin relatif à la racine du système de fichiers qui est liée au point de montage (généralement / pour la normale montures, peut être n'importe quoi pour les montures de liaison) et le point de montage.
Pour la signification des colonnes restantes, voir la documentation du noyau Linux .
findmnt
appelle le chemin source par rapport à la racine du système de fichiers "FSROOT". Vous pouvez utiliserfindmnt -o TARGET,FSROOT
pour l'obtenir. Si vous voulez le chemin source absolu, vous devrez probablement analyser/proc/self/mountinfo
par vous-même et combiner les informations sur les montages pour le même système de fichiers.Pour plus d'informations, voir ma réponse à "Liste uniquement des montures de liaison" .
la source
/proc/self/mountinfo
peut contenir des lignes comme2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-ro
, alors Linux certainement ne conserver certaines informations sur les montages se lient.mount --bind /home/melab /mnt
la ligne résultante pourrait ressembler à une des opérations suivantes selon le de/home
et/home/melab
est un point de montage:3 1 8:1 /home/melab /mnt rw - ext4 /dev/sda1 rw
,3 1 8:2 /melab /mnt rw - ext4 /dev/sda2 rw
,3 1 8:3 / /mnt rw - ext4 /dev/sda3 rw
/
de la quatrième colonne indique souvent un montage de liaison. Mais il pourrait également s'agir d'un sous-volume Btrfs./dev/sda3
censé être monté à/home/melab
?/dev/sda1
as/
,/dev/sda2
as/home
and/dev/sda3
as/home/melab