Desreferenciando links físicos

Desreferenciando links físicos

Na página de manual do tarcomando, uma opção para seguir links físicos é listada.

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

Como tarsaber que um arquivo é um link físico? Como é queseguiristo?

E se eu não escolher esta opção? Como é quenãodesreferência difícil?

Responder1

Por padrão, se você solicitar tararquivar um arquivo com links físicos e mais de um desses links estiver incluído entre os arquivos a serem arquivados, ele arquivará o arquivo apenas uma vez e registrará o segundo (e quaisquer nomes adicionais) como links físicos. Isso significa que quando você extrair esse arquivo, os links físicos serão restaurados.

Se você usar a --hard-dereferenceopção, tarentãonãopreservar links físicos. Em vez disso, ele os trata como arquivos independentes que possuem o mesmo conteúdo e metadados. Ao extrair o arquivo, os arquivos serão independentes.

Nota: Ele reconhece links físicos verificando primeiro a contagem de links do arquivo. Ele registra o número do dispositivo e o inode de cada arquivo com mais de um link e usa isso para detectar quando o mesmo arquivo está sendo arquivado novamente. (Quando você usa --hard-dereference, isso não acontece.)

Responder2

Você pode distinguir um arquivo com link(s) físico(s) de um arquivo sem link físico com a "contagem de links". Vejo duas maneiras de obter isso na linha de comando:

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

Ou

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

Aquele solitário '2' antes de "bediger" é a contagem de links. Observe que ambos os nomes de arquivos têm o mesmo número de inode, 932815.

Tenho certeza de que ambos os comandos obtêm a contagem de links do campo st_nlink do struct stat, que é preenchido por uma stat()chamada do sistema.

Pelo que posso dizer, executar tarwith --hard-dereferencesignifica que, em vez de obter um único arquivo com dois nomes de arquivo distintos (como no exemplo acima), você obtém dois arquivos, cada um com um único nome de arquivo. tarprovavelmente verifica a contagem de links em cada arquivo e, por padrão, ao extrair, cria um link físico no segundo nome de arquivo que possui para os dados do arquivo com link físico. Quando chamado --hard-dereferencena criação do arquivo, parece criar um arquivo inteiramente novo para o segundo nome de arquivo quando a chamada de extração é tarexecutada.

informação relacionada