Acesso ao conteúdo original do ponto de montagem

24

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 ?

    
por Janus 30.11.2010 / 04:13

3 respostas

33
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.

    
por 30.11.2010 / 04:56
4

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:

Exemplo de caso

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 ?

Solução

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 / .

    
por 05.04.2013 / 20:26
1

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
    
por 30.11.2010 / 04:22