Por que existem links físicos?

73

Eu sei o que são links físicos, mas por que eu os usaria? Qual é a utilidade de um link físico?

    
por Luc M 14.09.2011 / 05:29

5 respostas

49

A principal vantagem dos hard links é que, em comparação com soft links, não há penalidade de tamanho ou velocidade. Links suaves são uma camada extra de indireção sobre o acesso normal a arquivos; o kernel precisa cancelar a referência ao link quando você abre o arquivo, e isso leva um pouco de tempo. O link também ocupa uma pequena quantidade de espaço no disco para conter o texto do link. Essas penalidades não existem com hard links porque elas são construídas na própria estrutura do sistema de arquivos.

A melhor maneira que conheço para ver isso é:

$ ls -id .
1069765 ./
$ mkdir tmp ; cd tmp
$ ls -id ..
1069765 ../

A opção -i para ls faz com que ele forneça o número do inode do arquivo . No sistema em que preparei o exemplo acima, aconteceu de eu estar em um diretório com o número de inode 1069765, mas o valor específico não importa. É apenas um valor único que identifica um determinado arquivo / diretório.

O que isso diz é que quando entramos em um subdiretório e olhamos para uma diferente entrada do sistema de arquivos chamada .. , ele tem o mesmo número de inode que obtivemos antes. Isso não está acontecendo porque o shell está interpretando .. para você, como acontece com o MS-DOS e o Windows. Em sistemas de arquivos Unix .. é uma entrada de diretório real; é um link difícil apontando para o diretório anterior.

Hard links são os tendões que unem os diretórios do sistema de arquivos. Era uma vez, o Unix não tinha links físicos. Eles foram adicionados para transformar o sistema de arquivos simples original do Unix em um sistema de arquivos hierárquico.

(Para mais informações, consulte Por que '/' tem um '. . 'entrada? .)

Também é comum em sistemas Unix que vários comandos diferentes sejam implementados pelo mesmo executável. Não parece ser mais o caso no Linux, mas nos sistemas que eu usei no passado, cp , mv e rm eram todos executáveis. Faz sentido se você pensar sobre isso: quando você move um arquivo entre volumes, é efetivamente uma cópia seguida por uma remoção, então mv já teve que implementar as funções dos outros dois comandos. O executável pode descobrir qual operação deve ser fornecida porque recebe o nome pelo qual foi chamado.

Outro exemplo, comum em Linuxes embarcados, é o BusyBox , um único executável que implementa dezenas de comandos.

Devo salientar que, na maioria dos sistemas de arquivos, os usuários não podem criar links físicos para diretórios. As entradas . e .. são gerenciadas automaticamente pelo código do sistema de arquivos, que normalmente faz parte do kernel. A restrição existe porque é possível causar problemas sérios no sistema de arquivos se você não tiver cuidado com a maneira como cria e usa links diretos de diretório. Esta é uma das muitas razões pelas quais existem soft links; eles não carregam o mesmo risco.

    
por 14.09.2011 / 20:16
35

Um uso de hardlinks é extremamente útil em backups incrementais combinados com o rsync. Ele economiza muito espaço e torna o procedimento de restauração realmente fácil. Eu uso essa abordagem para backup em meus servidores.

Reserve algum tempo para ler esta explicação .

    
por 14.09.2011 / 08:07
11

Se, depois de ler essa página da wikipedia, a sua pergunta for "por que eu nunca a usaria", você não entenderá o que são links físicos.

Um link é uma entrada de diretório que aponta para blocos no disco. Em outras palavras, todos os arquivos no seu sistema têm pelo menos um link. Quando você rm um arquivo, a chamada real do sistema é unlink() . Remove a entrada do diretório. Os blocos no disco não mudaram, mas o link sumiu, assim o arquivo sumiu da lista de diretórios.

Você, pessoalmente, pode nunca usar links físicos, mas eles estão em todo o seu sistema. Por exemplo:

$ ls -li /bin | grep 53119771
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bunzip2
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bzcat
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bzip2

Você pode ver que bunzip2 , bzcat e bzip todos usam o mesmo inode. Em essência, é um arquivo com três nomes. Você poderia ter três cópias do arquivo, mas por quê? Só gastaria espaço em disco desnecessariamente.

    
por 14.09.2011 / 19:19
8

Existem vários usos. Eu os uso para criar bloqueios baseados em arquivos. A chamada do sistema link (2) é atômica, diferente da maioria das outras chamadas do sistema.

Outro uso está dentro do rsnapshot, em que os backups são feitos com o tempo, usando hard-links para reduzir a quantidade de espaço em disco. Se um arquivo não tiver sido alterado, o arquivo será vinculado às instâncias mais antigas do arquivo, os arquivos que foram alterados serão copiados novamente.

Eu também os uso para trocar arquivos de configuração em servidores: rm file.cfg && ln ~/tmp/file.cfg file.cfg , então os arquivos ~ / tmp / * podem ser deletados com segurança.

    
por 14.09.2011 / 06:40
6

Para adicionar várias discussões boas já presentes ...

  • A forma como o acesso a recursos para programas é implementado no unix (ou seja, "tudo é um arquivo" ), significa que a infraestrutura para manipular várias referências a um arquivo é necessária para que o SO funcione. , então não há custo adicional aqui.
  • A maneira como os diretórios foram implementados nos sistemas de arquivos unix originais (isto é, uma lista de formatos fixos de (inode, name) pares significa que não há custo extra no sistema de arquivos para ter hardlinks), desde que evitemos ciclos não permitindo hardlinke para diretórios (diferente de . e .. (isso começa a parecer lisp para mais ninguém?)))

então nós os recebemos de graça.

    
por 15.09.2011 / 01:00