Então, eu estou tentando entender como o namespace de montagem do Linux funciona. Então, fiz um pequeno experimento, abri dois terminais e executei o seguinte:
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
Como é que a montagem é visível no Terminal 2? Como ele não faz parte do espaço para nome da montagem, eu esperava que o diretório aparecesse vazio aqui. Também tentei passar -o shared=no
e usar --make-private
opções com mount
, mas obtive o mesmo resultado.
O que estou perdendo e como posso torná-lo realmente privado?
linux
namespace
bind-mount
Erro fatal
fonte
fonte
man mount
.--make-private
não é o que eu quero. Mas, esse não é o ponto de montagem dos namespaces (que eles não são de todo o sistema)?Respostas:
Se você estiver em uma distribuição baseada em sistema com uma
util-linux
versão menor que 2,27, verá esse comportamento não intuitivo. Isso ocorre porqueCLONE_NEWNS
propaga sinalizadores, comoshared
depender de uma configuração no kernel. Essa configuração é normalmenteprivate
, mas systemd altera isso parashared
. A partir dautil-linux
versão 2.27, foi feito um patch que altera o comportamento padrão dounshare
comando para usarprivate
como comportamento de propagação padrão, para ser mais intuitivo.Solução
Se você estiver em um sistema systemd com <2,27
util-linux
, remonte o sistema de arquivos raiz depois de executar ounshare
comando:Se você estiver em um sistema systemd com> = 2,27
util-linux
, ele deve funcionar conforme o esperado no exemplo que você deu na sua pergunta, literalmente, sem a necessidade de remontar. Caso contrário: passe--propagation private
para ounshare
comando para forçar a propagação do espaço para nome de montagem a ser privado.fonte
isso não funcionou no ubuntu, (15.04 e 14.04). funcionou no fedora. e para o fedora. se você precisa - tornar privado ou não, você também pode verificar
se compartilhado, significa que algum outro espaço de nome ainda pode ver essa montagem. Então é problema relacionado ao systemd. Você pode usar --make-private para fazê-lo funcionar
fonte