Así que estoy tratando de entender cómo funciona el espacio de nombres de montaje de Linux. Entonces, hice un pequeño experimento, abrí dos terminales y ejecuté lo siguiente:
Terminal 1
root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt
Terminal 2
root@goliath:~# ls b
foo.txt
¿Cómo es que el montaje es visible en la Terminal 2? Como no es parte del espacio de nombres de montaje, esperaba que el directorio apareciera vacío aquí. También intenté pasar -o shared=noy usar --make-privateopciones con mount, pero obtuve el mismo resultado.
¿Qué me estoy perdiendo y cómo puedo hacer que sea realmente privado?
linux
namespace
bind-mount
Error fatal
fuente
fuente

man mount.--make-privateno es lo que quiero. Pero, ¿no es ese el objetivo de los espacios de nombres de montaje (que no son de todo el sistema)?Respuestas:
Si está en una distribución basada en systemd con una
util-linuxversión inferior a 2.27, verá este comportamiento poco intuitivo. Esto se debe a queCLONE_NEWNSpropaga indicadores, comoshareddepender de una configuración en el kernel. Esta configuración es normalmenteprivate, pero systemd cambia esto ashared. A partir deutil-linux2.27, se realizó un parche que cambia el comportamiento predeterminado delunsharecomando para usarloprivatecomo comportamiento de propagación predeterminado para que sea más intuitivo.Solución
Si está en un sistema systemd con <2.27
util-linux, debe volver a montar el sistema de archivos raíz después de ejecutar elunsharecomando:Si está en un sistema systemd con> = 2.27
util-linux, debería funcionar como se esperaba en el ejemplo que dio en su pregunta, textualmente, sin la necesidad de volver a montar. Si no es así: pase--propagation privatealunsharecomando para forzar que la propagación del espacio de nombres de montaje sea privada.fuente
esto no funcionó en ubuntu (15.04 y 14.04). Funcionó en Fedora. y para fedora. si necesita --make-private o no, también puede verificar
si se comparte, significa que algún otro espacio de nombres aún puede ver los montajes. Entonces es un problema relacionado con el sistema. Puedes usar --make-private para que funcione
fuente