Tentei alcançar algo semelhante, mas a resposta efêmera não explicou a semântica do método. Ele falhou para mim e, portanto, fiz praticamente a mesma pergunta anteriormente aqui no unix.SE. Depois de um comentário, descobri por conta própria e atendi. Esta é uma versão editada da minha resposta para caber neste contexto aqui. Eu removi minha outra pergunta (e resposta) em favor desta.
Aqui está o que eu estava tentando fazer:
Exemplo de caso
Suportes:
/dev/sda1 on / type ext4 (rw)
/dev/sdb1 on /data type ext4 (rw)
/data/home on /home type none (rw,bind)
Após a montagem /
, tenho uma pasta /home/joe
para o usuário joe
. Depois que o outro local é montado ( /data
), tenho o conjunto completo de pastas pessoais disponíveis e, portanto, estou montando-as no lugar ( /data/home on /home
). Há uma pasta /data/home/joe
, desde que a montagem seja /dev/sdb1
bem-sucedida, ele receberá o conteúdo /data/home/joe
, caso contrário, voltará a /home/joe
(ligado /dev/sda1
!).
Quando é bem-sucedido, como posso acessar o conteúdo original de /home/joe
(ativado /dev/sda1
!) Em vez daqueles montados no local /data/home/joe
?
Solução
Com base em um comentário do comentário de Patrick sobre minha pergunta e a solução por ephemient (resposta aceita aqui), vim com o seguinte.
Aparentemente, é possível mount --bind
(ou mount -o bind
) a pasta pai ( esta é a parte crucial ) de uma montagem de ligação em outro local e, assim, acessar o conteúdo original. Portanto, no meu exemplo de caso, em vez de tentar:
mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath
(ou seja, montar os locais já montados em ligação em outro local) eu tive que:
test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath
Então é isso que Patrick quis dizer em seu comentário
A menos que você esteja remontando /
(root), essa resposta deve funcionar muito bem.
Contanto que você tenha uma pasta pai disponível no local montado na ligação, ela funcionará, embora com um indireto, como mostrado acima. Se você montou algo sobre uma ligação, /
está sem sorte, pois não há uma pasta pai para ela /
.
mount --bind
, mas só tinha algumas idéias complicadas que certamente quebrariam quando eu precisasse. Isso faz exatamente o que eu preciso e pode até entrar como uma montagem permanente. Graças