Desmonta una montura rbind sin afectar la montura original

11

Se le preguntó sobre el servidor predeterminado, pero no recibió suficiente atención, así que se volvió a publicar aquí, con la esperanza de que algunas personas aquí sepan la respuesta.

Hay otra pregunta discutiendo sobre el montaje de los montajes de rbind, pero la solución tiene un efecto no deseado. Considere el siguiente diseño de directorio:

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

Ahora me ato C_dira B_dir/mount_cy rbind B_dira 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

Ahora umount A_dir/mount_bfallará, lo cual no es sorprendente. De acuerdo con las respuestas en todas partes en la web, umount A_dir/mount_b/mount_cprimero tenemos que hacerlo umount A_dir/mount_b. Sin embargo, umount A_dir/mount_b/mount_ctambién se desmontará B_dir/mount_c, lo que no se desea:

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

Ahora mi pregunta es, ¿cómo puedo desmontar A_dir/mount_bpero dejando B_dirafectado, es decir, todavía hay un aprieto B_dir/mount_ca C_dir?

EDITAR: este problema no parece aparecer en Ubuntu. Más específicamente, funciona bien en mi Ubuntu 14.04 pero no funciona en Fedora 23 y CentOS 7. ¿Por qué existe la diferencia y cuál es el trabajo para Fedora y CentOS?

EDITAR: algo más de información sobre el problema real que estoy tratando de resolver. Traté de crear un sandbox y solía --rbindmontar el /devy /procal sandbox. Al destruir la caja de arena, parece que no puedo destruirla limpiamente porque desmontar <sandbox-root>/dev/ptsen FC23 y CentOS7 se desmontará /dev/pts, después de lo cual mis conexiones de shell y SSH se bloquean y tengo que reiniciar la máquina. Es por eso que pregunto si hay una manera de desmontar los montajes --rbind sin afectar los submontes.

puedo hacer
fuente
Este problema también se ha mencionado en bugs.launchpad.net/ubuntu/+source/util-linux/+bug/759394
imz - Ivan Zakharyaschev

Respuestas:

9

Encontré la solución yo mismo. Simplemente necesito usar --make-rslavepara hacer cualquier cambio en A_dir/mount_bno propagar de nuevo a B_dir:

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

Consulte la sección de la página de manual de mount Las operaciones de subárbol compartidas .

puedo hacer
fuente
1
En algunos sistemas, incluso se puede combinar mount --rbind src target --make-rslaveen una llamada; algunos sistemas solían no permitirme esto.
imz - Ivan Zakharyaschev