O que acontece com o conteúdo real de / tmp quando meu disco rígido está montado?
Praticamente nada. Eles estão apenas ocultos, não acessíveis através do sistema de arquivos normal.
É possível executar operações r / w no conteúdo real de / tmp enquanto o disco rígido está montado?
Sim. Os processos que tinham identificadores de arquivos abertos dentro do seu "original" /tmp
continuarão sendo capazes de usá-los. Você também pode fazer o "reaparecer" em outro lugar montando-o em /
outro local.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
Aqui está um pequeno experimento que você pode executar para ter uma ideia melhor (espero) do que está acontecendo.
Nota: Esta não é uma tentativa de estar perfeitamente correta ou uma descrição exaustiva do que realmente está acontecendo. No entanto, deve ser preciso o suficiente para fornecer uma imagem geral.
Criei um usuário chamado me
na minha máquina e um diretório aleatório em sua casa, com um arquivo:
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
Neste ponto, nada de incomum - é apenas um diretório simples com um arquivo simples. Deixo essa sessão aberta da maneira que está, com a pasta cwd
dentro desse diretório de teste.
Como root, crio um pequeno sistema de arquivos e o montei /home/me/tmp
.
root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s
root@home # mkfs -t ext2 ./fs
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done
root@home # mount ./fs /home/me/tmp
Abro um novo terminal como me
e olho em volta:
me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied
Portanto, esse arquivo que criamos claramente não está lá. O lost+found
diretório é indicativo da raiz de um sistema de arquivos ext. E eu perdi a permissão de gravação, portanto, claramente não é o diretório original.
De volta à primeira me
sessão, vejamos como ele vê o mundo:
me@home $ echo something else > other_file
Não há problema em escrever.
me@home $ cat some_file other_file
hello
something else
O arquivo original ainda está lá, novo arquivo criado sem problemas.
Hã? O que está acontecendo?
A primeira sessão entrou no diretório antes de ser sobreposta pela montagem raiz de outro sistema de arquivos nele. Essa ação de montagem não afeta o sistema de arquivos original. O processo do shell possui um identificador perfeitamente válido para o diretório no sistema de arquivos original e pode continuar interagindo com ele. É meio que correndo por baixo do ponto de montagem do tapete .
A segunda sessão entrou no diretório depois que a montagem foi estabelecida. Então ele vê o novo sistema de arquivos vazio. E o sysadmin utilizou as permissões, por isso não pode usar o espaço solicitado ... vamos corrigir isso.
root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls
lost+found some_file
me@home #2 $ cat some_file
bye bye
A sessão 1 pode escapar debaixo do tapete? (Está ficando mofado.)
Certo! Se a sessão 1 voltar a subir a árvore do sistema de arquivos da montagem, ela perderá o identificador para o interior e seguirá a montagem como todos os outros.
me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory
Da mesma maneira que a sessão nº 2, voltamos ao normal.
Mas como você sabe que os arquivos não desapareceram? Ninguém está mais olhando!
Esse é um dos momentos em que montagens de encadernação se tornam úteis. Eles permitem montar um sistema de arquivos já montado em outro lugar.
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(Sim, você pode montar um sistema de arquivos "dentro de si". Truque legal, não é?)
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
Então eles estão realmente lá, prontos para a ação. Simplesmente eles não são visíveis / alcançáveis em seu local original, a montagem os oculta dos percursos normais de diretório.
Encorajo-vos a brincar com isso, não é realmente complicado uma vez que você entendeu o "truque" que está sendo jogado. E depois que o Got It ™, analise os sistemas de arquivos da união para obter ainda mais carpetes :-)
A observação embora: montagem sobre /tmp
ou /var
(ou qualquer um dos diretórios do núcleo do sistema operacional) realmente não é uma boa idéia uma vez que o processo de inicialização for concluído. Muitos aplicativos deixam o estado nesses diretórios e podem ficar seriamente confusos se você jogar jogos de montagem em torno deles.
/home/me
em/home/me
vez da pasta "bind"? Ou seja, coloque outro tapete em cima do tapete. Ou você teria que desmontarfs
primeiro?union
opção pode ajudar.