Desmonte uma montagem rbind sem afetar a montagem original

11

Questionado sobre falha no servidor, mas não recebeu atenção suficiente, então postado aqui, com a esperança de que algumas pessoas aqui saibam a resposta.

Há outra pergunta discutindo sobre a montagem de montagens rbind, mas a solução tem efeito indesejado. Considere o seguinte layout de diretório:

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

Agora eu ligar C_dirpara B_dir/mount_ce rbind B_dirpara 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

Agora umount A_dir/mount_bfalhará, o que não é surpreendente. De acordo com as respostas em todos os lugares da web, precisamos umount A_dir/mount_b/mount_cprimeiro então umount A_dir/mount_b. No entanto, umount A_dir/mount_b/mount_ctambém desmontará B_dir/mount_c, o que é indesejado:

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

Agora a minha pergunta é: como faço para desmontar A_dir/mount_b, mas deixando B_dirinalterado, ou seja, ainda há um dilema B_dir/mount_cpara C_dir?

EDIT: este problema não parece aparecer no Ubuntu. Mais especificamente, ele funciona bem no meu Ubuntu 14.04, mas não funciona no Fedora 23 e no CentOS 7. Por que existe a diferença e qual é o problema do Fedora e do CentOS?

Edição: mais algumas informações sobre o problema real que estou tentando resolver. Tentei criar uma caixa de areia e usado --rbindpara montar o /deve /proca caixa de areia. Ao destruir a caixa de areia, parece que não posso destruí-la de maneira limpa, porque a desmontagem <sandbox-root>/dev/ptsno FC23 e no CentOS7 será desmontada /dev/pts, após o que minhas conexões shell e SSH travam e eu tenho que reiniciar a máquina. É por isso que estou perguntando se existe uma maneira de desmontar as montagens --rbind sem afetar as submounts.

eu posso fazer
fonte
Esta edição também foi levantada em bugs.launchpad.net/ubuntu/+source/util-linux/+bug/759394
imz - Ivan Zakharyaschev

Respostas:

9

Eu mesmo encontrei a solução. Eu só preciso usar --make-rslavepara fazer alterações em A_dir/mount_bnão propagar de volta para B_dir:

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

Consulte a seção da página de manual mount As operações da subárvore compartilhada .

eu posso fazer
fonte
1
Em alguns sistemas, pode-se até combinar mount --rbind src target --make-rslaveem uma chamada; alguns sistemas costumavam impedir isso para mim.
IMZ - Ivan Zakharyaschev