Rsync che gestisce le mosse in modo sensato


10

Ho usato con successo rsync per sincronizzare le mie home directory tra il mio laptop e il mio netbook (entrambi usando ext4 con Linux). Il mio unico problema è che ogni tanto mi piace riorganizzare completamente determinate directory e rsync vede questo come eliminazioni e creazione di nuovi file, il che lo rende molto lento e inefficiente.

Qualcuno sa di un buon software che gestisce bene i movimenti dei file?

Ho scoperto che l' unisono dovrebbe essere in grado di farlo, ma non sembra funzionare in pratica. Ho provato all'unisono sincronizzando due directory locali, ognuna con un file di grandi dimensioni, e ha comunque rilevato la mia mossa come una cancellazione + creazione ed era in effetti anche più lenta di rsync .

Inoltre, se ricordo bene dal mio esame del codice sorgente all'unisono un paio di mesi fa, ha provato a fare qualcosa come fare somme sha - e non voglio che la mia soluzione ideale per fare somme sha - sia troppo lenta in generale file / directory. Vorrei qualcosa che nota cose come:

"L'ultima controparte di origine di questo file sembra essere stata eliminata e c'è un nuovo file altrove nella struttura della directory di origine che ha lo stesso mdate, dimensioni e numero di inode, quindi suppongo che questa sia stata una mossa e sposta di conseguenza la sua controparte target invece di fare una cancellazione + copia. "

È importante per me poter sincronizzare rapidamente queste macchine.

Eventuali suggerimenti?

Risposte:


6

Dovresti dare un'occhiata a rdiff-backup che fa rsyncsotto, ma con l'intelligenza aggiuntiva di cui hai bisogno (e rende i backup incrementali in grado di eseguire il rollback, ma puoi configurarlo per spegnerlo).

L'ultima versione è vecchia (2009), ma questo è un segno di stabilità.


2
Qualcuno l'ha provato?
nebbia

3

Unison fa quello che vuoi, ma solo per la sincronizzazione remota. Prova a utilizzare ssh://localhost/path/to/dircome una delle radici.

Unison basa le sue decisioni sul contenuto del file, non tiene traccia dei numeri di inode.


1

È possibile gestire i file spostati e rinominati con rsync se i filesystem nella directory di origine e destinazione hanno il supporto per i collegamenti reali. L'idea è di consentire a rsync di ricostruire i collegamenti reali prima del trasferimento reale. Puoi trovare una buona spiegazione qui

Abbiamo finito con una semplice soluzione che creava un albero nascosto di hard link all'interno della directory source / target, lo script di base potrebbe essere così:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

Ho uno script di esempio su GitHub . Ma ti consiglio di fare molti test prima di usare questo metodo in produzione.


0

Se si desidera sincronizzare i file tra più macchine, è possibile utilizzare semplicemente un sistema di controllo versione centralizzato come Subversion (o FSVS, che utilizza SVN come backend). La parte interessante è che tutto in / home (che aggiungi al controllo versione) viene quindi aggiornato e può essere facilmente sincronizzato con altre macchine o ripristinato.


0

lsyncd gestisce anche i file spostati con il comportamento rsync + ssh, sebbene in qualche modo difettoso (ottengo circa il 15% di spostamenti gestiti come elimina / copia, ma ancora per capire perché). Il più delle volte funziona.

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.