Não, você não pode realmente propagar as montagens de volta ao namespace raiz quando estiver executando em um namespace de montagem desanexado.
Além de desativar o sandbox de namespace de montagem, você pode usar systemd-mount
para corrija o problema.
Justificativa para sandboxing
O systemd prefere que as regras do udev não montem sistemas de arquivos diretamente, mas sim que ele inicie unidades (como unidades de montagem) a partir das regras do udev. É por isso que o udevd é executado em um namespace de montagem separado (com MountFlags=slave
), para evitar erros nas regras ou regras que desejam montar temporariamente um sistema de arquivos para poluir as montagens do host.
Mas, claro, no seu caso, é isso que você quer fazer, através do seu roteiro automontador.
systemd-mount
Você pode adaptar seu script automounter para trabalhar dentro do namespace de montagem separado do udevd, simplesmente substituindo as chamadas para mount
por systemd-mount
, que é uma ferramenta que usa os mesmos argumentos que mount
(na medida do possível), mas monta os sistemas de arquivos pedindo ao systemd para fazê-lo (mais especificamente, criando uma unidade de montagem e um unidade de montagem automática para ela, ambas as unidades criadas sob o diretório transitório /run/systemd/system
que não é preservado na reinicialização.)
Desativando o sandbox de montagem com uma substituição
Se você realmente quiser desabilitar o sandbox dos namespaces de montagem do udevd, use um arquivo de configuração de substituição para fazê-lo, em vez de modificar o fornecido em /lib
com o pacote systemd (que provavelmente será danificado na próxima vez que pacote é atualizado pelo apt.)
Você pode abrir um arquivo de substituição no seu editor com:
$ sudo systemctl edit systemd-udevd
Onde é possível redefinir MountFlags
para seu padrão ("compartilhado") com as duas linhas a seguir:
[Service]
MountFlags=
Configurar uma variável para uma string vazia geralmente a redefine para o padrão no systemd.
Por favor, note que em versões recentes do systemd isto está configurado usando PrivateMounts=
, por exemplo, veja o commit que converte o arquivo de serviço do udevd para usá-lo.
O que destaca um dos problemas com a substituição: você está se desviando da configuração padrão do systemd, portanto pode acabar tendo que se adaptar de tempos em tempos, já que precisa de configuração adicional ou alternativa para manter esse funcionamento à medida que for atualizado systemd.
Além disso, você perde os benefícios do sandboxing do udevd para seu próprio namespace de montagem em primeiro lugar.
Portanto, se a solução que usa systemd-mount
funcionar para você, recomendo-a durante a substituição.