rsync não copiando links físicos

1

Eu tenho dois computadores (ambos MacBook Airs) para os quais eu sincronizo uma árvore de diretórios em ambos, mas não o disco rígido inteiro ou qualquer outro diretório.

Digamos que no computador A o diretório seja /Users/aellett/projects

Digamos que no computador B o diretório seja /Users/bellett/projects

Geralmente, faço login no computador B e, em seguida, conecto remotamente ao computador A como usuário 'aellett'. Como superusuário eu sincronizo os dois diretórios do projeto da seguinte forma:

rsync -av /Volumes/aellett/projects/ /Users/bellett/projects/

e isso funciona como esperado.

Em ambos os computadores, tenho outro arquivo letter.txt em um diretório diferente que não está sendo sincronizado.

Digamos que no computador A o arquivo seja encontrado em /Users/aellett/letters

No computador B , o arquivo é encontrado em /Users/bellett/correspondence

Geralmente, não quero compartilhar o que não está incluído em /Users/<username>/projects . Mas eu quero compartilhar esse arquivo em particular.

Assim, em ambos os computadores, criei um diretório correspondence em projects . E então eu fiz hard links como segue

No computador A :

ln /Users/aellett/letters/letter.txt   /Users/aellett/projects/correspondence/letter.txt

No computador B :

ln /Users/bellett/correspondence/letter.txt   /Users/aellett/projects/correspondence/letter.txt

Da próxima vez que sincronizei os dois computadores, fiz o seguinte

rsync -av -H /Volumes/aellett/projects/ /Users/bellett/projects/

Quando eu verifiquei no computador B , /Users/bellett/projects/correspondence/letter.txt foi sincronizado corretamente. Mas o hardlink para /Users/bellett/correspondence/letter.txt não estava mais lá. Em outras palavras, /Users/bellett/projects/correspondence/letter.txt era idêntico a /Users/aellett/projects/correspondence/letter.txt , mas diferia de /Users/bellett/correspondence/letter.txt . Como esses dois arquivos tinham links rígidos em ambos os computadores, eu esperava que eles ainda tivessem o link físico.

Por que meus links não estão sendo preservados?

    
por A.Ellett 29.06.2013 / 03:10

1 resposta

3

Não tenho certeza se posso explicar isso melhor do que a página de manual do rsync :

-H, --hard-links This tells rsync to look for hard-linked files in the transfer and link together the corresponding files on the receiving side. Without this option, hard-linked files in the transfer are treated as though they were separate files.

When you are updating a non-empty destination, this option only ensures that files that are hard-linked together on the source are hard-linked together on the destination. It does NOT currently endeavor to break already existing hard links on the destination that do not exist between the source files. Note, however, that if one or more extra-linked files have content changes, they will become unlinked when updated (assuming you are not using the --inplace option).

Note that rsync can only detect hard links between files that are inside the transfer set. If rsync updates a file that has extra hard-link connections to files outside the transfer, that linkage will be broken. If you are tempted to use the --inplace option to avoid this breakage, be very careful that you know how your files are being updated so that you are certain that no unintended changes happen due to lingering hard links (and see the --inplace option for more caveats).

Observe que -a não implica -H e, mesmo se você adicionar -H , o outro lado do link não faz parte da mesma transferência (e não pode ser, porque a estrutura de diretórios adjacente é diferente ) rsync não vê os dois lados do link ao mesmo tempo e, portanto, não pode atualizar o arquivo vinculado nos dois locais. Ou seja, quando atualiza /Users/bellett/projects/correspondence/letter.txt, ele pode dizer que está vinculado a algo mais (pela contagem de links), mas não tem idéia de onde esse link existe. --inplace pode resolver o problema, mas também pode causar outros problemas; veja a seção da man page.

    
por 29.06.2013 / 05:09

Tags