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=no
y usar --make-private
opciones 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-private
no 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-linux
versión inferior a 2.27, verá este comportamiento poco intuitivo. Esto se debe a queCLONE_NEWNS
propaga indicadores, comoshared
depender de una configuración en el kernel. Esta configuración es normalmenteprivate
, pero systemd cambia esto ashared
. A partir deutil-linux
2.27, se realizó un parche que cambia el comportamiento predeterminado delunshare
comando para usarloprivate
como 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 elunshare
comando: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 private
alunshare
comando 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