Por que os hard links são válidos apenas no mesmo sistema de arquivos?

18

Estou lendo esta introdução à linha de comando de Mark Bates.

No primeiro capítulo, ele menciona que hard links não podem abranger sistemas de arquivos.

An important thing to note about hard links is that they only work on the current file system. You can not create a hard link to a file on a different file system. To do that you need to use symbolic links, Section 1.4.3.

Eu só sei de um sistema de arquivos. Aquele a partir da raiz ( / ). Essa afirmação de que hard links não podem se estender por sistemas de arquivos não faz sentido para mim.

O artigo da Wikipedia sobre sistemas de arquivos Unix também não é útil.

    
por Anton Paras 18.06.2016 / 06:57

5 respostas

25

Espero que eu possa responder isso de uma forma que faça sentido para você. Um sistema de arquivos no Linux, geralmente é composto de uma partição que é formatada de várias maneiras (você tem que escolher!) Em que você armazena seus arquivos. Seja que seus arquivos de sistema, ou seus arquivos pessoais ... eles são todos armazenados em um sistema de arquivos. Esta parte você parece entender.

Mas e se você particionar seu disco rígido para ter mais de uma partição (pense em cortar a Apple Pie em pedaços), ou adicionar um disco rígido adicional (talvez um pendrive?). Por uma questão de argumento, todos eles têm sistemas de arquivos neles também.

Quando você olha para os arquivos em seu computador, você está vendo uma representação visual dos dados no sistema de arquivos da sua partição. Cada nome de arquivo corresponde ao que é chamado de inode, que é onde seus dados, nos bastidores, realmente vivem. Um link físico permite que você tenha vários "nomes de arquivos" (por falta de uma descrição melhor) que apontem para o mesmo inode. Isso só funciona se esses hard links estiverem no mesmo sistema de arquivos. Em vez disso, um link simbólico aponta para o "nome do arquivo", que é vinculado ao inode que contém seus dados. Perdoe meu trabalho bruto, mas espero que isso explique melhor.

image.jpg             image2.jpg
          \           /
           [your data]

aqui, image.jpg e image2.jpg apontam diretamente para seus dados. Ambos são hardlinks. No entanto ...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

Neste exemplo (bruto), image2.jpg não aponta para seus dados, aponta para image.jpg ... que é um link para seus dados.

Os links simbólicos podem funcionar nos limites do sistema de arquivos (supondo que o sistema de arquivos esteja conectado e montado, como seu pendrive). No entanto, um link físico não pode. Ele não sabe nada sobre o que está em seu outro sistema de arquivos ou onde seus dados estão armazenados.

Espero que isso ajude a entender melhor.

    
por 18.06.2016 / 07:34
20

O Sistema de arquivos é composto por uma estrutura de diretório composta por entradas de diretório para organizar arquivos. Cada entrada de diretório associa um nome de arquivo a um inode .

Soft links ( simbólico ) são entradas de diretório que não contêm dados, apenas apontam para outra entrada (um arquivo ou diretório no mesmo sistema de arquivos ou outro arquivo sistema). E quando você apaga o arquivo apontado, o link simbólico se torna inutilizável.

Links físicos são entradas de diretório que contêm o nome do arquivo e inode número. Quando você remove o último link físico, não é mais possível acessar o arquivo.

Conclusão:

Comoo inode é uma estrutura de dados usada para representar um objeto de sistema de arquivos, é interno ao sistema de arquivos, e você não pode apontar para um inode de outro arquivo sistema.

Assim, hard-links são válidos apenas dentro do mesmo sistema de arquivos, mas soft-links (link simbólico) podem abranger os sistemas de arquivos simplesmente apontando para outra entrada de diretório (a interface do arquivo -sistema, e não um objeto interno).

    
por 18.06.2016 / 08:09
2

O sistema de arquivos raiz pode ser composto de vários sistemas de arquivos; /usr/local pode ser montado em uma partição separada e /home pode estar em outra partição em um disco da rede em algum outro lugar. Nesse caso, um link físico para /usr/local/bin/git (por exemplo) pode não ser criado fora de /usr/local , porque ele abrangeria os sistemas de arquivos .

A razão para isso é que os inodes são alocados separadamente para / , /usr/local e /home (novamente, neste exemplo), e quando você cria um link físico você realmente cria um nome adicional para um inode.

    
por 18.06.2016 / 07:38
2

Links físicos têm o efeito de manter seu alvo vivo. Desde que qualquer link físico seja acessível, o sistema garantirá que seu alvo não seja liberado. Portanto, é necessário que todas as mídias que possam conter links físicos para um determinado inode sejam montadas a qualquer momento em que o sistema esteja tentando determinar se existem referências a ele.

Dado que a vida útil do inode é normalmente determinada pela manutenção de contagens de referência em vez de procurar referências, pode ser possível organizar coisas em que dois ou mais sistemas de arquivos que continham links entre si poderiam ser usados independentemente, desde que não haja necessidade de use links que tenham ligação entre os sistemas e desde que não haja necessidade de usar o fsck em nenhum deles. Se as contagens de inode em um dos sistemas forem perturbadas, no entanto, a única maneira de tornar esse sistema útil novamente seria usar uma forma de operação fsck que poderia varrer os dois sistemas de arquivos para referências. Devido a essa restrição, embora seja possível permitir que dois sistemas de arquivos interligados sejam utilizáveis de forma independente, os benefícios de fazê-lo provavelmente seriam limitados demais para fazer com que valesse a pena.

    
por 18.06.2016 / 16:25
1

Um único número inode usado para representar o arquivo em cada sistema de arquivos. Todos os hard links baseados no número inode. Link de referência do sistema de arquivos aqui .

    
por 18.06.2016 / 07:12