J'ai essayé d'obtenir quelque chose de similaire, mais la réponse de l' éphémient n'expliquait pas la sémantique de la méthode. Cela a échoué pour moi et j'ai donc posé pratiquement la même question plus tôt ici sous unix.SE. Après un commentaire, je l'ai compris par moi-même et j'ai répondu. Ceci est une version révisée de ma réponse pour entrer dans ce contexte ici. J'ai enlevé mon autre question (et sa réponse) en faveur de celle-ci.
Voici ce que j'essayais de faire:
Exemple de cas
Montures:
/dev/sda1 on / type ext4 (rw)
/dev/sdb1 on /data type ext4 (rw)
/data/home on /home type none (rw,bind)
Après le montage, /
j'ai un dossier /home/joe
pour l'utilisateur joe
. Une fois que l'autre emplacement est monté ( /data
), j'ai l'ensemble des dossiers de base disponibles, je suis donc en train de les monter en place ( /data/home on /home
). Il y a un dossier /data/home/joe
, donc tant que le montage de /dev/sdb1
réussit, il obtiendra le contenu de /data/home/joe
, sinon il retombera sur /home/joe
(sur /dev/sda1
!).
Quand cela réussit, comment puis-je accéder au contenu original de /home/joe
(on /dev/sda1
!) Au lieu de ceux qui sont montés dans la reliure /data/home/joe
?
Solution
Sur la base d’un commentaire de Patrick sur ma question et de la solution de ephemient (réponse acceptée ici), j’ai proposé ce qui suit.
Il est apparemment possible de mount --bind
(ou mount -o bind
) le dossier parent ( c'est la partie cruciale ) d'un montage lié ailleurs et ainsi d'accéder au contenu d'origine. Donc, pour mon exemple, au lieu d'essayer de:
mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath
(c.-à-d. monter les emplacements déjà montés dans des liaisons ailleurs), je devais:
test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath
Voilà donc ce que Patrick voulait dire dans son commentaire
À moins que vous ne remontiez au-dessus /
(racine), cette réponse devrait fonctionner correctement.
Tant que vous avez un dossier parent disponible à l'emplacement monté par la liaison, cela fonctionnera, mais avec une seule indirection, comme indiqué ci-dessus. Si vous avez lié quelque chose de monté, /
vous êtes hors de chance, car il n'y a pas de dossier parent pour /
.
mount --bind
, mais je n'ai eu que quelques idées compliquées qui ne manqueraient pas de casser quand j'en aurais besoin. Cela fait exactement ce dont j'ai besoin et peut même aller en tant que montage permanent. Merci