ln -s vs mount --bind

19

Existe alguma diferença prática entre usar ln -sou mount --bind?

Quero mover algumas pastas para outra partição, sem alterar a configuração do daemon, e me pergunto qual abordagem devo adotar.

Prefiro ln -s, pois requer configuração mínima (sem /etc/fstabmodificações), mas talvez haja uma razão para que isso não seja comum?

SyRenity
fonte

Respostas:

25

Claro que sim. Se você executar, ln -scriará um link simbólico, que é um inode apontando para um determinado objeto do sistema de arquivos, e é por isso que os links simbólicos podem atravessar os sistemas de arquivos e os links físicos não: os links físicos não têm seu próprio inode.

Se você montar um sistema de arquivos --bind, criará um segundo ponto de montagem para um dispositivo ou sistema de arquivos.

Se você visualizar um link simbólico como um redirecionamento, visualize um --bindsistema de arquivos montado como criando outro gateway para dados.

Symlinks e montagens de ligação são um jogo totalmente diferente.

A --bindmontagem parece um pouco mais robusta para mim e provavelmente é um pouco mais rápida do que trabalhar com um link simbólico. Por outro lado, não há desvantagens sérias no uso do link simbólico, pois o impacto no desempenho será pequeno (se houver).

Edit : Eu estive pensando sobre isso, e o impacto no desempenho pode ser um pouco maior do que eu pensava originalmente. Se você tiver um aplicativo que lê muitos arquivos diferentes, todos os novos arquivos abertos exigirão uma leitura extra. Algumas pesquisas aqui sugerem que minha suposição está correta; portanto, se você tiver um aplicativo pesado de E / S em execução lá, considere a --bindopção de montar acima da solução de link simbólico.

O motivo pelo qual isso não é comum é provavelmente o fato de um link simbólico estar visível em um ls, enquanto um mount de ligação é visível apenas quando se olha para / proc / mounts ou / etc / mtab (que é o que o comando mount faz, se for executado sem parâmetros). Fora isso, acho que não há problemas. Eu estaria interessado se houver, no entanto.

Além disso : outro problema ln -sé que, para alguns aplicativos, quando o caminho é desreferenciado, o aplicativo pode ser recusado se "esperar" que determinados itens estejam em locais específicos.

wzzrd
fonte
Obrigado pela explicação completa! Uma pequena pergunta de acompanhamento - o que o parâmetro --rbind realmente faz e como pode ser usado? Pelo manual, parece que o parâmetro suporta a montagem das submontagens na árvore montada, isso está correto? Além disso, é apenas --rbind o suficiente, ou eu preciso fazer --bind then --rebind? Obrigado novamente.
SyRenity
2
mount, quando chamado sem argumentos, imprime o conteúdo de /etc/mtab, que possui informações ligeiramente diferentes de /proc/mounts. (Em particular, /proc/mounts(ligação simbólica para /proc/self/mounts) sempre mostra os pontos de montagem visíveis para o processo de lê-lo.)
grawity
1
@wzzrd - na FAQ "O melhor de tudo - edite e melhore as perguntas e respostas existentes!" :) ..a não é de forma ligeira a sua resposta - é uma pequena melhoria com informações adicionais, para o qual você receberá representante adicional se / quando ele é votado up :)
Warren
1
@warren, não importa, eu não sou louco :) é só você adicionou algo que eu não tenho nenhuma idéia sobre, de modo que me senti um pouco estranho;)
wzzrd
2
@wzzrd - não quis passo em qualquer dedos :) ..o problema específico do aplicativo é algo que eu tenho que correr para com o uso principal produto I
Warren
6

Uma das grandes diferenças entre ln -se uma montagem de ligação é que você pode usar uma montagem de ligação para "modificar" um sistema de arquivos somente leitura. Por exemplo, se houvesse um CD montado /mnt/applicatione você desejasse substituir /mnt/application/badconfigfile.confpor uma versão correta, você poderia fazer o seguinte:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

Não seria possível afetar a mesma alteração usando um link simbólico, porque você não pode modificar o sistema de arquivos de destino.

Isso também pode ser usado com bons efeitos se você distribuiu um conjunto comum de software via NFS (ou algum tipo de sistema de arquivos em cluster) e deseja fazer alterações específicas do host em um sistema. Você pode simplesmente usar uma montagem de ligação no sistema de destino para substituir os arquivos ou diretórios conforme necessário.

larsks
fonte
Protetor de dor de cabeça! (caso raro, mas vale a pena lembrar para esse momento especial)
Jonathan Komar
2

Diferença prática # 1 para mim entre ln -s e mount --bind:

O vsftpd não permite procurar um diretório através de um link simbólico, mas permite quando montado.

Não sei qual daemon você está usando, mas pode se comportar da mesma forma.

petrus
fonte
1

Pode-se notar que, como conseqüência da ligação a uma montagem, que é ela própria uma ligação, que é recuperada posteriormente, a ligação original permanece intacta, assumindo que tudo permanece fisicamente conectado.

Ou seja, se vincular A a B e vincular B a C e, em seguida, vincular D a B, C ainda estará vinculado a A. Isso pode ser o que você deseja ou não. Se alguém deseja que C siga B, remonte usando os mesmos alvos, ou seja mount -o remount B C, ou use em seu --rbindlugar. Não há --rebindopção.

Wiley
fonte