mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh
Contanto que você use --bind (ao contrário de --rbind ), você obtém um clone da montagem sem o material montado em cima dela.
No meu NAS sem cabeça, tenho sdf1 (um cartão flash) montado como / , enquanto /home é montado a partir de lv00 (um volume LVM respaldado por um RAID de software). Para poder acessar a máquina quando o RAID falha, eu tenho uma cópia da minha chave pública ssh, etc. em /home/foo/.ssh no sistema de arquivos de sdf1 .
Para atualizar os arquivos ocultos pelo /home montado, normalmente remonto lv00 em /mnt/home , faça o que preciso fazer e mova lv00 de volta ao lugar.
Existe uma maneira de conseguir isso sem desmontar /home ?
Eu tentei conseguir algo semelhante, mas a resposta do ephemient não explicou a semântica de o método. Ele falhou para mim e então eu fiz praticamente a mesma pergunta anteriormente aqui no unix.SE. Depois de um comentário, descobri por conta própria e respondi. Esta é uma versão editada da minha resposta para se encaixar neste contexto aqui. Eu removi minha outra pergunta (e respondi) em favor desta.
Veja o que eu estava tentando fazer:
Montagens:
/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 . Uma vez que o outro local é montado ( /data ) eu tenho o conjunto completo de pastas base disponíveis, então estou montando-as no lugar ( /data/home on /home ). Existe uma pasta /data/home/joe , então, desde que a montagem de /dev/sdb1 seja bem-sucedida, ele obterá o conteúdo de /data/home/joe , caso contrário, ele voltará para /home/joe (em /dev/sda1 !). / p>
Quando é bem-sucedido, como posso acessar o conteúdo original de /home/joe (em /dev/sda1 !) em vez daqueles montados no bind a partir de /data/home/joe ?
Baseado em um comentário do comentário de Patrick sobre minha pergunta e a solução por ephemient (resposta aceita aqui ), Eu vim com o seguinte.
é aparentemente possível para mount --bind (ou mount -o bind ) da pasta pai ( esta é a parte crucial ) de um ligar-montar em outro lugar e, assim, acessar o conteúdo original. Então, para o meu caso de exemplo, em vez de tentar:
mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath
(ou seja, monte as localizações já montadas em bind em outro lugar) 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
Unless you're remounting over
/(root), that answer should work just fine.
Desde que você tenha uma pasta pai para o local de montagem de bind disponível, ela funcionará, embora com uma indireção, como mostrado acima. Se você montou algo sobre / sem sorte, já que não há pasta pai para / .
Você pode mover a montagem para um novo local sem desmontá-lo, usando mount --move :
$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home