Je suis confus. Le système de fichiers Linux est une structure arborescente, avec le nœud racine (nœud de départ) comme répertoire racine. Supposons maintenant que j'ai un dossier abc
à l'emplacement /home/abc
et un autre dossier xyz
à l'emplacement /home/xyz
Le dossier xyz
se compose d'autres dossiers et fichiers qu'il contient. (ex def
et mno
sont des dossiers à l'intérieur)
/
├── home/
│ ├── abc
│ └── xyz
│ ├── def
│ └── mno
Lorsque j'exécute la commande
mount --rbind /home/xyz /home/abc
(rbind est récursivement lié) Je vois tout le contenu du dossier xyz
dans abc
. Maintenant, quand je viens d'exécuter la commande
mount --bind /home/xyz /home/abc
Je vois toujours tout le contenu de xyz
dans abc
.
Pourquoi donc?
--bind
pour fonctionner de la même manière que --rbind
.
Vous avez constaté à juste titre que, avec les deux --bind
et --rbind
, vous voyez des répertoires sous le montage bind.
La différence est que, avec --rbind
mais pas avec --bind
, vous voyez le contenu des autres montures de liaison sous la monture de liaison.
Comme appliqué à votre exemple, supposons pour simplifier que /home/xyz/def
et /home/xyz/mno
sont des répertoires vides. Supposons en outre que vous utilisez ensuite les comme montures de liaison, c'est-à-dire que vous les utilisez comme points de montage dans mount --bind
ou mount --rbind
. Cela les fait apparaître non vides. Supposons ensuite que vous exécutez:
mount --bind /home/xyz /home/abc
Alors, /home/abc/def
et /home/abc/mno
les deux existent, mais ils semblent vides, car vous avez utilisé mount --bind
, qui n'est pas récursif.
En revanche, supposons que vous ayez plutôt créé /home/abc
un montage de liaison en exécutant cette commande:
mount --rbind /home/xyz /home/abc
Alors, /home/abc/def
et /home/abc/mno
les deux existent et ils semblent non vides - ils ont le contenu du /home/xyz/def
et /home/xyz/mno
lier les montures - parce que vous avez utilisé mount --bind
, qui est récursif.
Voici un exemple entièrement élaboré:
ek@Gnar:~$ mkdir original
ek@Gnar:~$ touch original/a-regular-file
ek@Gnar:~$ mkdir original/a-directory
ek@Gnar:~$ mkdir parent-of-mountpoint
ek@Gnar:~$ mkdir parent-of-mountpoint/mountpoint
ek@Gnar:~$ Sudo mount --bind ~/original ~/parent-of-mountpoint/mountpoint
ek@Gnar:~$ mkdir nonrecursive-other-mountpoint recursive-other-mountpoint
ek@Gnar:~$ Sudo mount --bind ~/parent-of-mountpoint ~/nonrecursive-other-mountpoint
ek@Gnar:~$ Sudo mount --rbind ~/parent-of-mountpoint ~/recursive-other-mountpoint
ek@Gnar:~$ tree -F original/
original/
├── a-directory/
└── a-regular-file
1 directory, 1 file
ek@Gnar:~$ tree -F parent-of-mountpoint/
parent-of-mountpoint/
└── mountpoint/
├── a-directory/
└── a-regular-file
2 directories, 1 file
ek@Gnar:~$ tree -F nonrecursive-other-mountpoint/
nonrecursive-other-mountpoint/
└── mountpoint/
1 directory, 0 files
ek@Gnar:~$ tree -F recursive-other-mountpoint/
recursive-other-mountpoint/
└── mountpoint/
├── a-directory/
└── a-regular-file
2 directories, 1 file
ek@Gnar:~$ mount | grep ~
/dev/sda2 on /home/ek/parent-of-mountpoint/mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/nonrecursive-other-mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/recursive-other-mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/recursive-other-mountpoint/mountpoint type ext4 (rw,relatime)
Lis man 8 mount
. Il dit (c'est moi qui souligne):
Lier les montures
Remontez une partie de la hiérarchie des fichiers ailleurs. L'appel est:
mount --bind olddir newdir
ou en utilisant cette entrée fstab:
/olddir /newdir none bind
Après cet appel, le même contenu est accessible à deux endroits. On peut également remonter un seul fichier (sur un seul fichier). Il est également possible d'utiliser le montage de liaison pour créer un point de montage à partir d'un répertoire normal, par exemple:
mount --bind foo foo
L'appel de montage de liaison attache uniquement (une partie de) un seul système de fichiers, pas de sous-montages possibles. La hiérarchie complète des fichiers, y compris les sous-montages, est attachée à la deuxième place en utilisant :
mount --rbind olddir newdir
Notez que les options de montage du système de fichiers resteront les mêmes que celles du point de montage d'origine.