Quando criar um link físico seria útil?

11

Existem basicamente duas limitações principais com links físicos:

  1. Hard links normalmente exigem que o link e o arquivo residam no mesmo sistema de arquivos.
  2. Apenas o superusuário pode criar um link físico para um diretório.

Assim, os links simbólicos foram introduzidos para contornar as limitações dos hard links. Então, a questão é: os hard links ainda são necessários? Pode haver uma situação em que eles sejam mais úteis?

    
por Pirooz 25.05.2011 / 07:17

7 respostas

11

Os hardlinks nos ajudam a organizar nosso sistema de arquivos de uma maneira muito mais flexível. Basicamente, hardlinks nos permitem pegar um arquivo e ter vários lugares no sistema de arquivos de uma só vez. Pense em um cenário em que você é fotógrafo e tem muitas fotos (esse é um exemplo da minha vida!). Você pode organizá-los pelas pessoas que aparecem nelas, porque às vezes as pessoas pedem fotos deles. Mas você também pode querer organizá-los pelo local e pela data. Não há uma maneira real de aninhar essas três coisas, elas são eixos totalmente separados de organização. Então você pode criar três hierarquias diferentes para essas três coisas diferentes, e ter cada foto presente em todas as três, sem ter que armazenar cada foto três vezes. Essa é a mágica dos hardlinks. Desvincule links simbólicos, não precisamos nos preocupar com onde o "arquivo real" está, porque eles são todo o arquivo real. Podemos excluir e mover à vontade, porque o arquivo será retido até que não haja mais referências a ele e removido quando você excluir o último link físico. É simples e não exige que você acompanhe muito.

    
por 25.05.2011 / 09:59
7

O conteúdo de um arquivo não será eliminado até que todos os links físicos (sim, todos os nomes de arquivos sejam links físicos, até mesmo o primeiro) tenham sido apagados e o arquivo tenha sido fechado. Como tal, pode ser útil quando um arquivo é necessário em vários lugares, mas pode ser removido de qualquer um deles a qualquer momento, por ex. entre ~/Downloads/coolsong.mp3 e ~/Music/Cool Song.mp3 .

    
por 25.05.2011 / 07:21
1

Uma vantagem não muito importante de um link físico sobre um link simbólico é que quando ele atinge o inode para um link físico, o kernel não tem mais nenhum processamento a fazer para acessar o arquivo. Quando encontra um link simbólico, o kernel deve ler o valor do link e continuar percorrendo a estrutura do diretório antes de chegar ao inode do arquivo. Isso leva mais tempo, embora a diferença não seja necessariamente medida com facilidade. Pode ser muito divertido quando um dos elementos no valor do symlink é um link simbólico.

    
por 25.05.2011 / 07:29
1

existem várias razões para hard-links

  1. para manter referências a um arquivo até a última referência ter sido eliminada (como Ignacio apontou)
  2. quando você faz hard-link de arquivos, eles ocupam apenas o espaço de um arquivo no sistema de arquivos (ambas as referências ao arquivo compartilham os mesmos i-nodes). Portanto, hard-links devem estar no mesmo sistema de arquivos.

Portanto, um dos motivos para usar hard-links é possivelmente economizar muito espaço ...

Você pode anexar a qualquer uma das referências e os dados vão para o arquivo compartilhado. Você também pode anexar a um descritor de arquivo enquanto lê o outro (por exemplo, com tail -f)

    
por 25.05.2011 / 07:40
0

Muitos dos exemplos dados aqui são válidos, mas funcionam igualmente bem com links suaves (por exemplo, o problema "precisa de um arquivo em vários lugares").

Um bom exemplo de onde links são realmente úteis é o software de backup Dirvish :

Dirvish is a fast, disk based, rotating network backup system.

With dirvish you can maintain a set of complete images of your filesystems with unattended creation and expiration. A dirvish backup vault is like a time machine for your data.

O Dirvish cria backups no nível do sistema de arquivos (ou seja, copia arquivos, não cria imagens), copiando arquivos para um sistema de arquivos separado (backup) (como um disco rígido USB). Toda vez que você fizer um backup, o dirvish criará uma cópia separada e completa da árvore de diretórios a ser salva.

O truque é que, se dirvish detectar que já existe uma cópia de backup mais antiga da árvore que você está salvando, ela reutilizará automaticamente os arquivos que não foram alterados, criando um link físico na nova árvore para o arquivo no diretório antigo. árvore.

Dessa forma, cada cópia de backup é uma cópia completa e independente da árvore de diretórios, mas, ao mesmo tempo, somente os arquivos alterados ocupam espaço no sistema de arquivos. Em outras palavras, você obtém os benefícios de backups incrementais (economia de espaço) e backups completos (recuperação fácil) ao mesmo tempo.

Isso só é possível porque os links físicos são completamente transparentes para as ferramentas do espaço do usuário.

Isso provavelmente também funcionaria com links simbólicos (embora você pudesse ter problemas ao fazer o backup de dados que usam links simbólicos em si), mas uma vantagem só possível com hard links é:

Se você quiser descartar backups antigos, pode simplesmente excluir a árvore de diretórios de backup correspondente. Os arquivos vinculados somente a essa árvore são excluídos automaticamente pelo sistema de arquivos (porque seu último link físico é excluído), mas os arquivos que também aparecem em outras cópias permanecem no disco.

    
por 22.06.2011 / 12:13
0

Um caso útil é, digamos, quando você tem um programa (ou script) que precisa baixar um tarball temporário grande e depois de extraí-lo seu programa o excluirá imediatamente.

Se por algum motivo você quiser preservar o tarball para uso futuro, a melhor maneira é ln /tmp/tarball.tgz ~ enquanto o tarball ainda está sendo baixado. Então você não precisa fazer nada.

Quando o download termina, e mesmo depois que o seu programa apagou o original, a cópia exata ainda deve estar no seu diretório pessoal.

    
por 29.08.2017 / 19:51
0

Eu uso 'Hard Links' para fazer backup de alguns dos meus 'HowTos' e snippets

Eu tenho um diretório chamado 'Shared Docs' no meu usuário / root. Nesse diretório eu tenho 'hard links' para minhas dicas, truques, trechos, howto's que vivem em seus diretórios apropriados; php, mysql, css, regex, fórmulas, linux, etc., tê-los em 'um lugar' torna muito mais fácil de usar, atualizá-los do que ter que pular em meus documentos / diretórios procurando por esses documentos que eu uso com freqüência. / p>

Há muito tempo, usei links simbólicos. Eu faria backup fielmente desse diretório comum 'Shared Docs' para o meu servidor. O problema é, links simbólicos ou 'Soft Links', se copiados (cp -auv) ou tarados e copiados, somente backup ou copiar o 'link' e não o conteúdo do documento. Então, eu teria que percorrer os diretórios e copiar cada uma das duas dúzias de arquivos de sua localização real.

Com o HARDLINK, posso copiar, tar, rsync o diretório 'Shared Docs' e realmente fazer o backup desses documentos amplamente dispersos com confiança, o conteúdo do backup é feito. É muito ruim para mim, quando eu percebi que estava fazendo o backup de 0 'link files' e não da informação.

A desvantagem de usar 'Hard Links' é que fazer ls em um diretório não fornece uma indicação de que um arquivo está 'vinculado' a outro arquivo ou onde esse arquivo pode coexistir. Existem maneiras de encontrá-los, mas eu estou dizendo que não é óbvio com um simples ls -l - > aponta para... Então, eu costumo adicionar uma nota ao início do documento, indicando que diretório / arquivos 'este arquivo' é 'compartilhado' com

Landis.

    
por 11.01.2018 / 22:23

Tags