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