Salve a tutti,

Uso già grsync per sincronizzare le cartelle ma non so come far sì che tre (o più) cartelle siano sempre automaticamente sincronizzate. Qualora io inserisca un file in una delle tre vorrei che in automatico ci fosse anche sulle altre cartelle. Una di queste cartelle è su hdd esterno... non sempre collegato.

C'è un modo di ottenere tutto questo?

chiesto 23 Sep '14, 23:36

gisnio-sell's gravatar image

gisnio-sell
881576279

modificato 23 Sep '14, 23:39

@gisnio-sell: cartello locali, remote, o cosa? Sarebbe il caso che specificassi meglio.

(24 Sep '14, 07:16) enzotib ♦♦ enzotib's gravatar image

@gisnio-sell: come dice @enzotib sarebbe meglio tu fornissi più dettegli, invece non dici neppure che sistema operativo usi.
Non ho esperienza su grsync ne su rsync, ma so che in certi casi è difficile ottenere tutto automaticamente (soprattutto quando le periferiche non sono sempre collegate), ma ho visto che sia sul sito di grsync, che su quello di rsync (che potresti prendere in considerazione), vengono fornite molte spiegazioni che potrebbero aiutarti a snellire il lavoro.
Se poi i comandi da impostare fossero troppi e ripetitivi, puoi cercare di semplificare con l'uso di alias.

(24 Sep '14, 07:47) enzoge enzoge's gravatar image

Giusto :) non ci avevo pensato.

Sono cartelle locali, e poi quelle dell' hdd esterno che credo possano essere considerate anch'esse tali quando fosse attaccato.

(24 Sep '14, 08:01) gisnio-sell gisnio-sell's gravatar image

@gisnio-sell: non mi è chiara la necessità di avere due cartelle locali identiche. In ogni caso per questa esigenza, anziché la sincronizzazione, ti potrebbero tornare utili i link (in particolare gli hard link) oppure i bind mount.

(24 Sep '14, 08:45) enzotib ♦♦ enzotib's gravatar image

Mi servirebbe in particolare per i file che produco in virtualbox, vorrei fossero copiati in automatico sia sull'altra partizione che uso come archivio, sia sull'hdd esterno in cui c'è il backup dei file

Non sò cosa siano i bind mount

(24 Sep '14, 09:17) gisnio-sell gisnio-sell's gravatar image

@gisnio-sell: sincronizzazione a 1 via (in un solo verso) o a due vie (bidirezionale)?

(24 Sep '14, 09:47) enzotib ♦♦ enzotib's gravatar image

Se si può, preferirei bidirezionale ...

(24 Sep '14, 16:08) gisnio-sell gisnio-sell's gravatar image

Cerco di proporti una soluzione completa, quasi chiavi in mano.

Un tool che permette la sincronizzazione tra due directory (comprese subdirectory) è Unison:

sudo apt-get install unison

È necessario effettuare una sincronizzazione iniziale (quando le due directory /path1/dir e /path2/dir hanno un identico contenuto), e si ottiene con un comando del tipo:

unison /path1 /path2 -path dir

Successivamente, se viene cambiato uno o più file da una parte o dall'altra, lo stesso comando di prima riporta le due directory allo stesso stato. In che modo?

  • se un file è modificato da una parte (rispetto all'ultima sincronizzazione), allora è copiato anche dall'altra parte;
  • se un file è aggiunto da una parte (rispetto all'ultima sincronizzazione), allora è copiato anche dall'altra;
  • se un file è cancellato da una parte (rispetto all'ultima sincronizzazione), allora è cancellato anche dall'altra;
  • se un file è modificato da entrambe le parti (rispetto all'ultima sincronizzazione), allora è considerato un conflitto e solo l'utente può decidere cosa fare.


Per la gestione dei conflitti, che comunque voglio supporre siano casi sporadici, propongo di mostrare una finestra di dialogo con l'elenco dei file che sono in conflitto. Sarà poi cura dell'utente copiare il file buono dall'altra parte, sovrascrivendo quello cattivo e riportando l'uguaglianza tra i due path, cosa che risolve il conflitto per quel file.

Unison non ha funzionalità per effettuare la sincronizzazione automatica basata su eventi o temporizzata, quindi bisogna ricorrere a questo scopo a qualche altro tool. La soluzione semplice che propongo è di usare un cron job che gira ogni N minuti, tempo da scegliere secondo le proprie esigenze.

Per fare questa cosa ho preparato uno script che ho chiamato my-unison da mettere in $HOME/bin (directory da creare se non esiste):

#!/bin/bash
# nome: my-unison

conflicts="$(unison "$@" -batch -log 2>&1 | sed -n 's/.*<-?-> changed *//p')"
if [[ $conflicts ]]; then
  if ! pgrep zenity; then
    zenity --error --no-markup --text="$conflicts" &
  fi
fi

Ricordarsi di rendere eseguibile il file con il comando:

chmod +x ~/bin/my-unison

Poi creare o modificare il proprio crontab con il comando

EDITOR=gedit crontab -e

ed aggiungere in coda le seguenti righe

PATH=/bin:/usr/bin:/home/USER/bin
DISPLAY=:0

*/MIN * * * * my-unison /PATH1 /PATH2 -path DIR

dove in questo esempio è necessario sostituire manualmente USER con il proprio username, MIN con il numero di minuti tra due sincronizzazioni, /PATH1/DIR e /PATH2/DIR con le due directory che si vogliono sincronizzare.

Per gestire la sincronizzazione tra due directory di cui una potrebbe non essere presente (dato che potrebbe far riferimento ad un device rimovibile), c'è l'opzione -mountpoint di Unison che permette di ottenere questo:

*/MIN * * * * my-unison /PATH1 /PATH2 -path DIR -mountpoint DIR

in tal caso la sincronizzazione avverrà solo se entrambe /PATH1/DIR e /PATH2/DIR esistono.

Volendo sincronizzare tre path, di cui uno rimovibile, nello specifico /PATH3/DIR, possiamo pensare ad un crontab di questo tipo:

PATH=/bin:/usr/bin:/home/USER/bin
DISPLAY=:0

*/MIN * * * * my-unison /PATH1 /PATH2 -path DIR
*/MIN * * * * my-unison /PATH1 /PATH3 -path DIR -mountpoint DIR

Nella propria home c'è una directory nascosta .unison dove viene prodotto un file di log di nome unison.log che può essere utile controllare se qualcosa non va.

Attenzione: suggerisco di fare delle prove su qualche copia dei dati prima di applicare il sistema ad un caso reale, e senza mettere subito in gioco crontab, infatti lo script my-unison può essere invocato a mano da terminale con la stessa identica sintassi che compare nel crontab.
Ho fatto dello prove ed ho fatto del mio meglio per scrivere informazioni veritiere e verificate, ma declino ogni responsabilità nel caso di perdita dei dati.

Inoltre, ricordarsi di fare la sincronizzazione iniziale tra le due (o tre) directory quando sono uguali.

coll. permanente

ha risposto 25 Sep '14, 00:43

enzotib's gravatar image

enzotib ♦♦
14.1k113187

modificato 25 Sep '14, 00:50

Ciao @Enzotib grazie davvero, specie per aver dedicato del tempo anche alla creazione dello script.

(25 Sep '14, 14:48) gisnio-sell gisnio-sell's gravatar image

@gisnio-sell: prima di accettare la risposta sarebbe opportuno che tu provassi che effettivamente questa soluzione fa al caso tuo.

(25 Sep '14, 14:56) enzotib ♦♦ enzotib's gravatar image
1

Giusto.

Ho fatto un pò diversamente per usare le interfaccie grafiche per comodità... sto usando unison-gtk e per cronetab, gnome-schedule. La sincronizzazione è ottima, sto facendo delle prove sull' automatizzazione.. Per la gestione del conflitto, guardo appena metto in ordine il resto

(25 Sep '14, 22:06) gisnio-sell gisnio-sell's gravatar image

Alla fine ho optato per creare uno script che contiene tutte le singole istruzioni per la sincronizzazione di determinate cartelle, ma con rsync che conosco un po meglio. Di Unison mi sfugge ancora qualcosa ...

Grazie mille comunque, specie perchè il fatto di conoscere crontab mi ha aperto un mondo di possibilità. Anche se non è la soluzione che ho seguito,la risposta mi ha dato indicazioni importanti... posso fleggarla :) ?

(28 Sep '14, 10:42) gisnio-sell gisnio-sell's gravatar image
1

@gisnio-sell: è una tua decisione, se ritieni che sia stata utile puoi accettarla.
Aggiungo solo che rsync sincronizza in una direzione, mentre unison in entrambe le direzioni. Se ti sfugge qualcosa e vuoi chiedere, posso cercare di rispondere.

(28 Sep '14, 11:08) enzotib ♦♦ enzotib's gravatar image

Credo sia molto utile per chi cerca info per lavorare con Unison. Nello script che ho creato per usare rsync ho messo entrambe le direzioni, da pathA verso pathB e poi viceversa... in realtà poi ho anche creato una terza direzione in un'altra cartella, quindi necessito comunque della soluzione con elenco di comandi.

Di Unison non comprendo perchè dia errore se vengono modificati i file in entrambe le cartelle per esempio. Non c'è comunque sempre una path sorgente e una destinataria che poi vengono automaticamente invertite per rendere il processo bidirezionale?

(28 Sep '14, 22:52) gisnio-sell gisnio-sell's gravatar image

@gisnio-sell, no, la logica è: quando faccio una sincronizzazione mi ricordo la stato di ogni file (da qualche parte nella cartella nascosta ~/.unison). Quando rifaccio la sincronizzazione, considero nuovo quello che è stato modificato rispetto a quello che ricordo, se sono stati modificati entrambi non so che fare: era anche spiegato nei quattro punti della mia risposta, dopo la frase "In che modo?".

(29 Sep '14, 08:28) enzotib ♦♦ enzotib's gravatar image

grazie enzotib, è che pur avendo letto quanto hai scritto non capivo in che modo funzionasse la sincronizzazione non sapendo che l'ultima "sincronia" venisse anch'essa salvata nella cartella .unison come i log.

Sapendo questo ora ho le idee più chiare su come funziona e capisco maggiormente il motivo del conflitto.

(29 Sep '14, 10:07) gisnio-sell gisnio-sell's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×27
×7
×5

domanda posta: 23 Sep '14, 23:36

domanda visualizzata: 32,622 volte

ultimo aggiornamento: 29 Sep '14, 10:07

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.