Qual é a diferença entre ln -s e mount --rbind?

8

Qual é a diferença entre:

ln -s /mnt/extra/home /

e

mkdir /home
mount --rbind /mnt/extra/home /home
NerdOfLinux
fonte
1
lnfaz links; em particular, ln -sfaz links simbólicos. mountmonta um sistema de arquivos em um diretório. Eles não têm nada em comum.
AlexP
Mas mount --rbind /mnt/extra/homejá é um diretório montado
NerdOfLinux
Coloque isso como uma resposta e eu vou marcar esta pergunta como resolvido :)
NerdOfLinux

Respostas:

13

mount --rbindfaz uma montagem de ligação recursiva; isto é, a hierarquia do sistema de arquivos montada /mnt/extra/hometambém será acessível /home.

Na prática, a principal diferença entre a ln -ssolução e a mount --rbindsolução é que com ln -s /homeum link simbólico, enquanto mount --rbindele é um diretório; isso afeta ferramentas como find, df, test/ [etc.

Além disso, ln -sfalhará se /homeexistir, enquanto mount --rbindfalhará se não existir ou não for um diretório vazio.

O comentário de Mark abaixo também é importante: ln -sprecisa de um sistema de arquivos gravável no qual criar o link simbólico.

AlexP
fonte
7
A grande diferença é que ln -smodifica o sistema de arquivos, enquanto mount --rbindnã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.
Mark
3
--binde --rbindnã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íveis
Xen2050
7

Nesse 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).

thomasrutter
fonte
0

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 --rbindcomporta-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, vsftpd chroot 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, vsftpdnão poderá desreferenciá-lo e, portanto, o destino não poderá ser acessado via FTP. Se preferir mount --rbind, vsftpdbasta acessar a subárvore como se estivesse realmente lá, da mesma forma que quando você vinculou um arquivo lá.

Ruslan
fonte