rsync non copia hard link


1

Ho due computer (entrambi MacBook Air) per i quali sincronizzo un albero di directory in entrambi, ma non l'intero disco rigido o altre directory.

Diciamo sul computer Ala directory è/Users/aellett/projects

Diciamo sul computer Bla directory è/Users/bellett/projects

In genere, accedo al computer Be quindi mi collego in remoto al computer Acome utente "aellett". Come superutente sincronizzo le due directory del progetto come segue:

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

e questo funziona come previsto.

Su entrambi i computer ho un altro file letter.txtin una directory diversa che non viene sincronizzata.

Diciamo sul computer in Acui si trova il file/Users/aellett/letters

Sul computer Bil file si trova in/Users/bellett/correspondence

In generale, non voglio condividere ciò che non è incluso in /Users/<username>/projects. Ma voglio condividere questo particolare file.

Quindi su entrambi i computer ho creato una correspondencedirectory projects. E poi ho creato collegamenti reali come segue

Sul computer A:

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

Sul computer B:

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

La prossima volta che ho sincronizzato i due computer ho fatto quanto segue

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

Quando ho controllato il computer B, è /Users/bellett/projects/correspondence/letter.txtstato sincronizzato correttamente. Ma il collegamento fisico a /Users/bellett/correspondence/letter.txtnon era più lì. In altre parole, /Users/bellett/projects/correspondence/letter.txtera identico /Users/aellett/projects/correspondence/letter.txtma diverso da /Users/bellett/correspondence/letter.txt. Poiché questi due file erano strettamente collegati su entrambi i computer, mi aspettavo che avessero ancora il collegamento reale.

Perché i miei hard link non vengono conservati?

Risposte:


3

Non sono sicuro di poterlo spiegare meglio della rsyncpagina man di :

-H , --hard-links Questo dice a rsync di cercare i file hard-link nel trasferimento e di collegare i file corrispondenti sul lato ricevente. Senza questa opzione, i file con collegamenti fissi nel trasferimento vengono considerati come file separati.

Quando si aggiorna una destinazione non vuota, questa opzione garantisce solo che i file collegati in modo sicuro sull'origine siano collegati in modo fisso sulla destinazione. Attualmente NON cerca di rompere i collegamenti reali già esistenti sulla destinazione che non esistono tra i file di origine. Si noti, tuttavia, che se uno o più file con collegamenti extra presentano modifiche al contenuto, questi verranno scollegati durante l'aggiornamento (supponendo che non si stia utilizzando l' opzione --inplace ).

Si noti che rsync è in grado di rilevare solo collegamenti reali tra i file all'interno del set di trasferimento. Se rsync aggiorna un file con collegamenti extra hard-link a file esterni al trasferimento, tale collegamento verrà interrotto. Se sei tentato di usare l' opzione --inplace per evitare questa rottura, fai molta attenzione a sapere come vengono aggiornati i tuoi file in modo da essere sicuro che non si verifichino cambiamenti involontari a causa di persistenti collegamenti (e vedi il --inplace opzione per più avvertenze).

Nota che -anon implica -H, e anche se aggiungi -Hl'altro lato del collegamento non fa parte dello stesso trasferimento (e non può esserlo, perché la struttura della directory circostante è diversa) rsyncnon vede entrambi i lati del collegamento in allo stesso tempo, e quindi non è possibile aggiornare il file collegato in entrambe le posizioni. Cioè, quando aggiorna /Users/bellett/projects/correspondence/letter.txt, può dire che è collegato a qualcos'altro (dal conteggio dei collegamenti), ma non ha idea di dove sia quel collegamento. --inplacepuò risolvere il problema, ma può anche causare altri problemi; vedere la sua sezione della pagina man.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.