Démontez une monture rbind sans affecter la monture d'origine

11

Interrogé sur une erreur de serveur mais n'a pas reçu suffisamment d'attention, donc republié ici, avec l'espoir que certaines personnes ici connaissent la réponse.

Il y a une autre question sur le démontage des montages rbind, mais la solution a un effet indésirable. Considérez la disposition de répertoire suivante:

.
├── A_dir
│   └── mount_b
├── B_dir
│   └── mount_c
└── C_dir

Maintenant , je lie C_dirà B_dir/mount_cet rbind B_dirà A_dir/mount_b:

[hidden]$ sudo mount --bind C_dir B_dir/mount_c
[hidden]$ sudo mount --rbind B_dir A_dir/mount_b
[hidden]$ mount | grep _dir | wc -l
3

Maintenant umount A_dir/mount_béchouera, ce qui n'est pas surprenant. Selon les réponses partout sur le Web, nous devons d' umount A_dir/mount_b/mount_cabord d' abord umount A_dir/mount_b. Cependant, umount A_dir/mount_b/mount_csera également démonté B_dir/mount_c, ce qui n'est pas souhaité:

[hidden]$ sudo umount A_dir/mount_b/mount_c
[hidden]$ mount | grep _dir | wc -l
1

Maintenant, ma question est, comment puis-je démonter A_dir/mount_bmais en laissant B_dirinchangé, c'est-à-dire qu'il y a toujours un lien B_dir/mount_cavec C_dir?

EDIT: ce problème ne semble pas apparaître dans Ubuntu. Plus précisément, cela fonctionne bien sur mon Ubuntu 14.04 mais ne fonctionne pas sur Fedora 23 et CentOS 7. Pourquoi y a-t-il une différence et quel est le problème pour Fedora et CentOS?

EDIT: quelques informations supplémentaires sur le problème réel que j'essaie de résoudre. J'ai essayé de créer un bac à sable et j'ai utilisé --rbindpour monter le /devet /procsur le bac à sable. Lors de la destruction du bac à sable, il semble que je ne puisse pas le détruire proprement car le <sandbox-root>/dev/ptsdémontage dans FC23 et CentOS7 se démontera /dev/pts, après quoi mes connexions shell et SSH se bloqueront et je devrai redémarrer la machine. C'est pourquoi je demande s'il existe un moyen de démonter les montages --rbind sans affecter les sous-montages.

Je peux faire
la source
Ce problème a également été signalé sur bugs.launchpad.net/ubuntu/+source/util-linux/+bug/759394
imz - Ivan Zakharyaschev

Réponses:

9

J'ai trouvé la solution moi-même. J'ai simplement besoin d'utiliser --make-rslavepour apporter des modifications à A_dir/mount_bne pas se propager vers B_dir:

sudo mount --make-rslave A_dir/mount_b
sudo umount -R A_dir/mount_b

Voir la section de la page de manuel mount Les opérations de sous-arborescence partagées .

Je peux faire
la source
1
Dans certains systèmes, on peut même combiner mount --rbind src target --make-rslaveen un seul appel; certains systèmes interdisaient cela pour moi.
imz - Ivan Zakharyaschev