Estou tentando entender a diferença entre usar ln -s
e mount --bind
. No cenário básico, posso usar os dois para acessar um diretório de outro lugar. Em quais cenários esses dois se comportarão de maneira diferente?
command-line
mount
symbolic-link
Łukasz
fonte
fonte
rm -r
amount --bind
. Com aln
, ele remove o link, enquanto que para a--bind
, ele tem o mesmo efeito que a execuçãorm -r
no destino. Não é bom, como eu encontrei pouco antes de reconstruir um dos meus servidores ...Respostas:
Eles se comportarão de maneira diferente em pelo menos dois casos:
A
) que tem algo mais (B
) montado neles. O link mostrará o conteúdo da montagem target (B
) em vez do original (A
).Além disso, você pode montar um diretório ou arquivo em um diretório ou arquivo existente, mascarando o conteúdo original (tornando o conteúdo original inacessível, a menos que o original tenha sido montado em outro lugar). Um link simbólico requer que o original seja movido ou excluído.
fonte
Bem,
ln -s
cria um link simbólico, enquantomount --bind
cria uma montagem.Um link simbólico é um tipo especial de arquivo. Se você o fizer
ln -s /var/target /var/link
,/var/link
haverá um arquivo contendo o caminho "/var/target
" nele. A única diferença entre um link simbólico e um arquivo comum é que, quando um programa tenta executar uma operação em um link simbólico, a operação geralmente é executada no destino, e não no arquivo. Portanto, agora, se o fizerls /var/link
, ols
programa tentará obter uma listagem de diretórios/var/link
, mas na verdade obterá uma listagem de diretórios/var/target
.Links simbólicos ainda são apenas arquivos. Eles podem ser renomeados e excluídos e todo esse jazz. Observe que você não pode criar um link simbólico (ou um arquivo comum, nesse caso) chamado
/var/link
se já houver um arquivo chamado/var/link
; você precisaria se livrar dele primeiro.Uma montagem não é um arquivo; é um registro que o kernel mantém na memória. Se você o fizer
mount --bind /var/target /var/mount
, o kernel registrará o fato de que/var/mount
agora é um novo nome para/var/target
. (Não conheço os detalhes; em particular, não sei se montar algo em um subdiretório/var/target
também fará com que apareça/var/mount
, ou por que ou por que não. Edições para esta resposta seriam apreciadas.) se você fizerls /var/mount
isso, acontecerá o mesmo que você fezls /var/target
, porque/var/mount
e/var/target
é o mesmo diretório.Montagens não são arquivos. Não sei o que aconteceria se você tentasse renomear ou excluir
/var/mount
. Observe que você não pode montar nada a/var/mount
menos que já exista um diretório em/var/mount
.fonte
ln -s ../../myfile .
. Se você mover isso para outro diretório, ele apontará para outro lugar porque é um link relativo. Isso pode ser útil se você precisar fazer backup de uma subárvore e ainda assim os links funcionarem no backup.Além disso, ln -s sobreviveria a uma reinicialização; enquanto o mount --bind não, a menos que você edite o / etc / fstab para torná-lo persistente.
fonte
Além das outras respostas. O sistema não permite o link físico para o diretório:
A montagem permite criar um link rígido, ou seja, dois ou mais nomes para o mesmo inode :
(Pode-se achar que isso ajuda no backup de instantâneo com a versão antiga do rsync.)
Além disso, observe que esta montagem não está completa:
Portanto, o mount ainda é lido e gravado, mesmo que eu tenha solicitado a opção ro (somente leitura).
fonte