What happens to the actual content of /tmp when my hard drive is mounted?
Quase nada. Eles estão apenas escondidos da vista, não alcançáveis através da travessia normal do sistema de arquivos.
Is it possible to perform r/w operations on the actual content of /tmp while the hard drive is mounted?
Sim. Os processos que tinham identificadores de arquivos abertos dentro de seu "original" /tmp
continuarão sendo capazes de usá-los. Você também pode fazer o "reaparecimento" em algum outro lugar por meio da montagem de bind /
em outro lugar.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
Aqui está um pequeno experimento que você pode fazer para melhorar (espero) o que está acontecendo.
Nota: Esta não é uma tentativa de ser perfeitamente correta ou uma descrição exaustiva do que realmente está acontecendo. Deve ser apenas preciso o suficiente para lhe dar uma visão geral.
Eu criei um usuário chamado me
em 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 incomum - é apenas um diretório simples com um arquivo simples. Deixo essa sessão aberta como está, com seu cwd
dentro desse diretório de teste.
Como root, eu crio um pequeno sistema de arquivos e o monto sobre /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
Eu então abro um novo terminal como me
, e dou uma olhada:
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
Então, esse arquivo que criamos claramente não está lá. O diretório lost+found
é indicativo da raiz de um sistema de arquivos ext. E eu perdi permissão de gravação, então claramente não é o diretório original.
Voltar para a primeira sessão de me
, vamos ver como ela vê o mundo:
me@home $ echo something else > other_file
Não há problemas para escrever.
me@home $ cat some_file other_file
hello
something else
O arquivo original ainda está lá, novo arquivo criado sem problemas.
Huh? O que está acontecendo?
A primeira sessão entrou no diretório antes de ser sobreposta pela raiz montando outro sistema de arquivos. Essa ação de montagem não afeta o sistema de arquivos original. O processo shell tem um identificador perfeitamente válido para o diretório no sistema de arquivos original e pode continuar interagindo com ele. É meio que correr abaixo do ponto de montagem carpete .
A segunda sessão entrou no diretório depois que a montaria foi colocada. Então, ele vê o novo sistema de arquivos vazio. E o sysadmin borked 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 de debaixo do tapete? (Está ficando mofado.)
Claro! Se a sessão 1 voltar a subir a árvore do sistema de arquivos para fora da montagem, ela perderá essa alça para dentro 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
Mesma visão da sessão 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 bind se tornam úteis. Eles permitem que você monte 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 ligar-montar um sistema de arquivos "dentro de si". Legal truque, hein?)
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 que eles não são visíveis / alcançáveis em sua localização original, a montagem os oculta de travessias de diretórios normais.
Encorajo-vos a brincar com isso, não é realmente complicado, uma vez que você entendeu o "truque" que está sendo jogado. E uma vez que você tenha Got It ™, olhe para os sistemas de arquivos union para ainda mais puxar carpetes: -)
Uma nota: a montagem sobre /tmp
ou /var
(ou qualquer um dos principais diretórios do sistema operacional) realmente não é uma boa ideia depois que o processo de inicialização é concluído. Muitos aplicativos deixam o estado nesses diretórios e podem ficar seriamente confusos se você jogar jogos montados em volta deles.