você está aqui: Home  → Arquivo de Mensagens

hard link vs soft link

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 02 de outubro de 2010

Eu estava lendo um artigo interessante sobre o assunto :

Softlinks vs. Hardlinks: A Quick Explanation.

Tá, ele está em inglês, mas muitos aqui têm capacidade de ler, por isto fica a dica do artigo. Um resumo da história é que o soft link tem que ser usado sempre que o hard link não funcionar (para diretórios ou para arquivos em outros sistemas de arquivos). De resto use o que quiser. Pode haver um ganho marginal de desempenho para o hard link, mas no dia-a-dia da gente isto não vai fazer muita diferença.

Tá, você está escrevendo uma dica só para apontar um artigo? Não, é que lendo o artigo me lembrei de vários "causos" onde trabalhava com programas que geravam arquivos temporários que poderia ser interessante olhar para, por exemplo, poder analisar uma mensagem de erro ou verificar se um passo intermediário estava sendo executado corretamente ou não. O problema é que o arquivo era transiente, existia durante um tempo, ao fim do qual ele era removido pelo software.

Como conseguir analisar um arquivo destes?

Simples, durante a execução, enquanto o arquivo existia, bastava fazer um hard link para um outro nome. Se o diretório do arquivo temporário fosse permanente (p. ex. o '/tmp') bastava fazer um hard link no mesmo diretório. Se o diretório também fosse transiente era só criar um outro diretório fora deste e criar os hard link por lá.

Mas quando o arquivo original fosse removido não se perderia tudo?

Não Quando se remove um arquivo o que o sistema faz é subtrair de uma unidade o link count. Se o link count chegar a zero o arquivo é removido da tabela do sistema e o espaço tornado disponível para reuso. Se o link count não for zero apenas a entrada do diretório é removida, os dados continuam disponíveis através do outro nome.

Por exemplo :

  $ cd /tmp
  $ date > blah.txt
  $ cat blah.txt
  $ ls -l blah.txt
  -rw-r--r-- 1 roxo roxo 29 2010-09-28 22:15 blah.txt

Vejam aquele "1" antes do nome do proprietário do arquivo. Aquele é o link count. Vamos criar um hard link para este arquivo

  $ ln blah.txt bloh.txt
  $ ls -l bl*.txt
  -rw-r--r-- 2 roxo roxo 29 2010-09-28 22:15 blah.txt
  -rw-r--r-- 2 roxo roxo 29 2010-09-28 22:15 bloh.txt

Ahá !!! Agora o link count está com o valor "2". Portanto se o arquivo 'blah.txt' for o arquivo transiente, o que acontecerá se ele for removido pelo programa?

  $ rm -f blah.txt
  $ ls -l bl*.txt
  -rw-r--r-- 1 roxo roxo 29 2010-09-28 22:15 bloh.txt

E o link count volta para "1". O que aconteceu com o conteúdo?

  $ cat bloh.txt
  Ter Set 28 22:15:06 BRT 2010

Resumindo, embora o arquivo transiente 'blah.txt' seja removido, o seu conteúdo original continua disponível através do uso de um hard link.

É claro que isto pode ser usado para um conjunto de arquivos gerados durante a execução de um programa ou de uma sequência de programas encadeados por pipes. Como fazer para um conjunto de arquivos? Da mesma maneira. Normalmente usando um script, mas deixo isto como exercício para o leitor. ;)

HTH



 

 

Veja a relação completa dos artigos de Fernando M. Roxo da Motta

Opinião dos Leitores

Jose Lera
16 Out 2010, 22:20
Oi Grande Roxo, tá tudo azul?
Estou procurando informações sobre Hercules/Turnkey. Tu conhece alguma documentação, sobre a instalação/configuração desse sistema em "português" ?

Qualquer ajuda será bem vinda.

Um forte abraço amigo.

Marco
11 Out 2010, 13:28
Uma dúvida que tenho há muito tempo: o que acontece quando um hardlink é gravado, quero dizer, numa operação como append?
lucas leite galvão
02 Out 2010, 18:30
Eu entendi a dica é de muita utilidade para os interesados eu consigo lêr em inglês porque quem realmente que aprofundar informação o inglês é de+ necessário. muuuuiiiito obrigado.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script