Estou executando o Arch Linux e o systemd.
Em /etc/fstab
eu tenho algo assim:
LABEL=XYZ /mypath vfat noauto,[...]
/mypath/main /newplace none bind,noauto 0 0
Atualmente tenho que montar /newplace
com dois comandos:
mount /mypath
mount /newplace
Eu também tenho que umount
ambos.
Eu preciso simplificar isso para apenas um mount
(ou umount
) comando:
mount /newplace
Eu preciso usar o comando exato mount
(e relacionado umount
) mostrado imediatamente acima por causa de um script existente. Esclarecer:
O comando único mount /newplace
deve primeiro montar /mypath
, depois montar /newplace
e /mypath
deve permanecer montado.
O comando umount /newplace
deve primeiro umount /newplace
e depois também umount /mypath
.
Posso alterar /etc/fstab
e alguns outros detalhes do meu aparelho. Mas não consigo alterar o script que chama mount /newplace
. Também não consigo montar automaticamente /newplace
porque geralmente precisa permanecer desmontado, exceto quando o script é executado.
Eu tenho lido sobre montagens de ligação recursivas, compartilhadas, privadas, escravas e outras opções de montagem, mas não vi uma maneira de alcançar o que estou procurando.
Atualização: em resposta aos comentários, isso obviamente não é uma montagem recursiva, então eu a chamei de montagem "pré-requisito". Espero que o termo seja apropriado. Eu pensei sobre o termo "montagem recursiva reversa", mas isso parece muito ruim. Estou tomando "pré-requisito" como algo que deve vir antes e que fornece a base contínua para o requisito. Geralmente, o pré-requisito não pode ser esquecido ou removido enquanto continua com o requisito.
Nesse caso, /mypath
(pré-requisito) e /newplace
(requisito) permanecem montados quando /newplace
são montados e ambos seriam desmontados (provavelmente na ordem inversa, é claro) ao chamar umount /newplace
.
A solução ideal usará systemd, Python 3 ou Xonsh. (Um script Bash também é aceitável. Não tenho zsh ou outros shells instalados.)
Se você quiser que o subdiretório "principal" do FS
LABEL=XYZ
seja montado em/newplace
, sem precisar que todo o FS seja montado em/mypath
, você pode adicionar uma linha como:E crie o
/sbin/mount.subdir
auxiliar (chamado pormount /newplace
, não deve ser chamado diretamente) como um script como:Que monta todo o FS em um tmpdir, monta o subdiretório no destino e depois desmonta e remove o tmpdir.
Se, conforme esclarecido em sua edição posterior, você deseja que ambos
/newplace
e/mypath
sejam montados e/mypath
não seja apenas uma etapa intermediária para o objetivo final de ter um subdiretório do FS montado em/myplace
, você pode adotar uma abordagem semelhante, e isso se torna mais fácil à medida que você só precisa do ajudante para montar o(s) FS(s) de pré-requisito:E crie o
/sbin/mount.prereq
auxiliar como um script como:Observe que
/mypath
não é desmontado automaticamente depois de/newplace
desmontado.O mesmo com a sintaxe do shell POSIX (portanto, deve funcionar em
bash
) pode ser assim:(não testado).
Se você não pode editar seu script, você pode instrumentá-lo. Por exemplo, se estiver escrito em
bash
, chame-o como:Ou se estiver escrito em
zsh
, adicione a~/.zshenv
(ou/some/dir/.zshenv
e definaZDOTDIR=/some/dir
para esse script):Ou para qualquer shell, adicione um
mount
script/some/dir
que faça o mesmo:E chame seu script como: