Qual é a diferença entre:
ln -s /mnt/extra/home /
e
mkdir /home
mount --rbind /mnt/extra/home /home
symbolic-link
NerdOfLinux
fonte
fonte
ln
faz links; em particular,ln -s
faz links simbólicos.mount
monta um sistema de arquivos em um diretório. Eles não têm nada em comum.mount --rbind /mnt/extra/home
já é um diretório montadoRespostas:
mount --rbind
faz uma montagem de ligação recursiva; isto é, a hierarquia do sistema de arquivos montada/mnt/extra/home
também será acessível/home
.Na prática, a principal diferença entre a
ln -s
solução e amount --rbind
solução é que comln -s
/home
um link simbólico, enquantomount --rbind
ele é um diretório; isso afeta ferramentas comofind
,df
,test
/[
etc.Além disso,
ln -s
falhará se/home
existir, enquantomount --rbind
falhará se não existir ou não for um diretório vazio.O comentário de Mark abaixo também é importante:
ln -s
precisa de um sistema de arquivos gravável no qual criar o link simbólico.fonte
ln -s
modifica o sistema de arquivos, enquantomount --rbind
não. Isso significa que você pode montar o diretório inicial em uma raiz somente leitura (por exemplo, um CD de inicialização), mas não pode criar um link simbólico nele.--bind
e--rbind
não vejo a importo se meus diretórios de destino estão vazias, eles simplesmente montar "em cima" do que quer que os arquivos estão lá, deixando-os inacessíveisNesse caso, uma montagem de ligação e um link simbólico funcionarão de maneira semelhante para a maioria dos propósitos, mas eles têm diferenças importantes.
Um link simbólico é um pouco mais leve. Você pode ter centenas ou milhares de links simbólicos sem que isso seja um problema de gerenciamento. Eles ficam no sistema de arquivos em vez de exigir uma configuração especial no nível do sistema.
Os links simbólicos podem ser copiados e copiados corretamente por ferramentas como cp e rsync. Ou seja, as ferramentas podem reconhecer e copiar o link simbólico, garantindo que, na restauração em outro lugar, o link seja restaurado e aponte para o destino correto. Tudo funcionará "corretamente" por padrão. Por outro lado, ao fazer backup ou copiar uma montagem de ligação, a montagem será tratada de forma transparente, fazendo com que os arquivos sejam copiados, o que pode levar à duplicação se você também obter os mesmos arquivos em outro local e exigir trabalho extra, se desejar para replicar a montagem de ligação no destino.
Os links simbólicos podem ser modificados ou excluídos por qualquer usuário que tenha acesso ao link; portanto, é fácil torná-lo somente para superusuário ou abri-lo para um usuário específico. As montagens de ligação só podem ser configuradas ou modificadas pelo superusuário.
Se isso soa como um endosso brilhante de links simbólicos, é. Eles são uma maneira mais direta de vincular arquivos e diretórios. Você usaria montagens de ligação apenas para situações em que um link simbólico não funcionaria, o que pode ser menos situações do que você imagina. A maioria das ferramentas, incluindo ferramentas de backup e sincronização, tem um comportamento padrão sensível para links simbólicos e seu tratamento de links simbólicos pode ser configurável. As montagens de ligação são transparentes a essas ferramentas, assim você perde essa flexibilidade e pode perder o comportamento sensível (por exemplo, como mencionado acima, duplicação de diretórios em seus backups).
fonte
Mais uma diferença é que o link simbólico é simbólico , ou seja, apenas faz referência a um caminho - uma sequência de caracteres e é desreferenciado sempre que você abre um subdiretório / arquivo no caminho de destino. Por outro lado,
mount --rbind
comporta-se mais como um link físico, para o qual o caminho não é reavaliado em cada desreferência.Isso faz a diferença em alguns cenários como
chroot
. Por exemplo, vsftpdchroot
s no diretório inicial da conta de usuário do FTP que você efetua login. Portanto, se você colocar um link simbólico nesse diretório,vsftpd
não poderá desreferenciá-lo e, portanto, o destino não poderá ser acessado via FTP. Se preferirmount --rbind
,vsftpd
basta acessar a subárvore como se estivesse realmente lá, da mesma forma que quando você vinculou um arquivo lá.fonte