Autore Topic: Backup sincronizzato con Rsync  (Letto 11762 volte)

Offline blupenguin

  • *
  • Post: 366
  • Reputazione: 23
    • Mostra profilo
Backup sincronizzato con Rsync
« il: 26 Novembre 2011 ore 13:10 »
Scopo: Creare uno script per la gestione del backup dei propri dati
Come: Usando il pacchetto "Rsync"
Prerequisiti: Pacchetto "Rsync", shell Bash
Vantaggi: Backup eseguito in modo automatico e sicuro
Svantaggi:
Tempo necessario: 20-25 minuti



Esiste la possibilità di realizzare un comodo script per la gestione del backup dei propri dati.
Il programma a cui appoggiamo in questa mini guida per realizzarlo è rsync.
Rsync, secondo me, è molto comodo da usare e ha la caratteristica di sincronizzare nel suo salvataggio solo i files modificati, creati o cancellati dal salvataggio precedente senza copiare ogni volta tutto quanto.

Come prima cosa installiamo quindi il pacchetto rsync con il comando

Codice: [Seleziona]
sudo pacman -S rsync
Fatto ciò, possiamo creare nella nostra /home il file, che chiamiamo salvataggio.sh, che gestirà il backup.
Io, per comodità, lo tengo all'interno della cartella Script.

Il primo parametro che possiamo passare al nostro script è quello di verificare che il disco esterno su cui fare il salvataggio sia montato. Se lo script troverà il disco procederà con le fasi successive, altrimenti si interromperà automaticamente.

Inseriamo quindi questa prima sezione nello script:

Codice: [Seleziona]
#---------------------------------------------------+
# Funzione verifica presenza disco ed       |
# esistenza della cartella di destinazione     |
#---------------------------------------------------+
#echo
echo "******* INIZIO VERIFICA DISCO *******"
if ! mount | grep /run/media/NOMEUTENTE/NOMEDISCO
then
echo "------- IL DISCO NOMEDISCO NON E' MONTATO, -------"
echo "------- COLLEGARE IL DISCO QUINDI RIPROVARE -------"
exit 1
elif [ ! -d /run/media/NOMEUTENTE/NOMEDISCO/mio_bkp ]
then
echo "------- LA CARTELLA mio_bkp NON ESISTE -------"
echo -n "# Creo la cartella mio_bkp? (s/n) "
read sure
if [[ $sure = "s" ]]
then
mkdir /run/media/NOMEUTENTE/NOMEDISCO/mio_bkp
echo "------- HO CREATO LA CARTELLA mio_bkp -------"
echo "******* VERIFICA COMPLETATA *******"
else
echo "------- NON CREO LA CARTELLA, -------"
echo "------- VERIFICARE IL DISCO QUINDI RIPROVARE -------"
exit 1
fi
else [ -d /run/media/NOMEUTENTE/NOMEDISCO/mio_bkp ]
echo "------- IL DISCO E' PRONTO AL TRASFERIMENTO DEI DATI -------"
echo "******* VERIFICA COMPLETATA *******"
fi
sleep 3


ovviamente, sostituiamo in questa parte dello script le voci NOMEUTENTE con il nome del vostro utente e NOMEDISCO con il nome del disco esterno che
il vostro computer riconosce e diamo alla cartella mio_bkp il nome che preferite. La cartella in questione
sarà quella che poi conterrà tutto il vostro salvataggio.

A questo punto possiamo inserire nel nostro script una seconda funzione che crei un file in cui registrerà
ad ogni backup la data in cui viene eseguito, questo secondo me è molto comodo per avere uno storico dei salvataggi e in particolar modo la data dell'ultimo.

La seconda sezione da inserire nello script sarà quindi:

Codice: [Seleziona]
#----------------------------------------------------+
# funzione verifica  dell' esistenza del file     |
# di promemoria dei salvataggi eseguiti     |
#----------------------------------------------------+
echo
echo "******* VERIFICO ESISTENZA FILE PROMEMORIA DEI SALVATAGGI  *******"
  if [ -f ~/Documenti/salvataggio_miei_dati ]
  then
  echo "******* FILE salvataggio miei dati TROVATO *******"
  else [ ! -f ~/Documenti/salvataggio_miei_dati ]
  echo " ------- IL FILE salvataggio miei dati NON ESISTE -------"
  echo "------- CREO IL FILE IN ~/Documenti -------"
  sleep 2
  touch ~/Documenti/salvataggio_miei_dati
  sleep 2
  echo "******* FILE salvataggio miei dati CREATO *******"
  fi
sleep 2

Anche qui possiamo sostituire il nome del file salvataggio _miei_dati con quello che preferiamo

Ora possiamo creare la terza sezione dello script, quella più importante, a cui affideremo il compito di
eseguire il salvataggio delle cartelle di cui vogliamo fare il backup.
Come anticipato all'inizio utilizziamo rsync come programma, al quale assoceremo le variabili:

a > archivia

v > verbose

r > ricorsivo

delete > cancella i file non più presenti nella sorgente

force > forza cancellazione di dir anche se non vuote

La singola stringa sarà una cosa del tipo:

rsync -avrz --delete --force ~/origine /percorso/di/destinazione

La terza sezione da inserire nello script sarà quindi una cosa del tipo

Codice: [Seleziona]
#-----------------------------------------------+
# funzione di aggiornamento dati |
# viene eseguito il backup sincronizzando la |
# cartella di destinazione con quella d'origine |
#-----------------------------------------------+
echo
echo "******* INIZIO FASE AGGIORNAMENTO *******"
echo -n "# Inizio il trasferimento dati? (s/n)"
read sure
if [[ $sure = "s" ]]
then
echo "------- INIZIO TRASFERIMENTO FILES -------"
rsync -avr --delete --force ~/Documenti /run/media/NOMEUTENTE/NOMEDISCO/mio_bkp/Documenti_bkp
sleep 2s
rsync -avr --delete --force ~/Immagini run/media/NOMEUTENTE/NOMEDISCO/mio_bkp/Immagini_bkp
sleep 2s
rsync -avr --delete --force ~/Musica /run/media/NOMEUTENTE//NOMEDISCO/mio_bkp/Musica_bkp
sleep 2s
rsync -avr --delete --force ~/Script /run/media/NOMEUTENTE/NOMEDISCO/mio_bkp/Script_bkp
sleep 2s
rsync -avr --delete --force ~/Video /run/media/NOMEUTENTE//NOMEDISCO/mio_bkp/Video_bkp
sleep 2s
echo "------- FINE TRASFERIMENTO FILES -------"
echo "------- AGGIORNO IL FILE salvataggio miei dati -------"
echo "ultimo salvataggio dati su NOMEDISCO: $(date)" >> ~/Documenti/salvataggio_miei_dati
echo "******* SALVATAGGIO COMPLETATO *******"
exit 0
else
echo "------- NON FACCIO IL TRASFERIMENTO DATI -------"
echo "******* ABBANDONO LA PROCEDURA *******"
exit 1
fi

Modifichiamo ora la terza parte dello script, adattandola alle nostre esigenze. In questo esempio
ho indicato allo script di eseguire il salvataggio delle cartelle Documenti, Immagini, Musica, Script e Video.

Ricordiamoci anche di sostituire le voci NOMEUTENTE, NOMEDISCO, mio_bkp , salvataggio_miei_dati con le voci che avete inserito
precedentemente nelle prime due sezioni.

A questo punto il nostro script è bello e finito possiamo salvarlo.
Da terminale diamogli i permessi di esecuzione con il comando

chmod +x salvataggio.sh

e infine lo possiamo lanciare quando vogliamo con il comando

./salvataggio.sh

La prima volta ci impiegherà un pò di tempo, le volte successive sarà molto più veloce.

Guida aggiornata a Ottobre 2013
« Ultima modifica: 28 Ottobre 2013 ore 14:30 da blupenguin »

Offline fedefox

  • *
  • Post: 1453
  • Reputazione: 34
    • Mostra profilo
    • Allevamento Della Repubblica Pisana
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #1 il: 27 Novembre 2011 ore 13:56 »
complimenti per la guida, ho seguito le tue istruzioni e ho fatto partire la sincronizzazione! ottimo! :) quindi adesso tutte le volte che voglio farla partire basta che lancio lo script che ho creato giusto? basta cliccarci visto che lo abbiamo reso eseguibile giusto?

Offline blupenguin

  • *
  • Post: 366
  • Reputazione: 23
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #2 il: 27 Novembre 2011 ore 14:35 »
Grazie  ;) Si ora basta che lanci lo script ogni volta che vuoi aggiornare il tuo salvataggio. Io solitamente il comando lo lancio direttamente da terminale, non ho mai provato a lanciarlo semplicemente cliccandoci sopra. Ad ogni modo se cliccandoci ti apre comunque una finestra di terminale va bene.

Offline DareDevil

  • *
  • Post: 339
  • Reputazione: 3
    • Mostra profilo
    • Il mio blog
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #3 il: 28 Novembre 2011 ore 00:48 »
ehm.... io non riesco a farlo funzionare.... sono troppo nibbo!

ho messo il file nella cartella script, ma nè se ci clicco sopra, nè se lo avvio da terminale parte.... eppure ho fatto tutto (quelllo che credevo) giusto  :-[

le cartelle da backuppare le ho in una partizione archivio che non è home......
- DareK -

Offline fedefox

  • *
  • Post: 1453
  • Reputazione: 34
    • Mostra profilo
    • Allevamento Della Repubblica Pisana
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #4 il: 28 Novembre 2011 ore 00:50 »
ehm.... io non riesco a farlo funzionare.... sono troppo nibbo!

ho messo il file nella cartella script, ma nè se ci clicco sopra, nè se lo avvio da terminale parte.... eppure ho fatto tutto (quelllo che credevo) giusto  :-[

le cartelle da backuppare le ho in una partizione archivio che non è home......
credo sia meglio tu copi qui il contenuto dello script per capire l'errore :)

Offline SoulEdge

  • *
  • Post: 279
  • Reputazione: -1
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #5 il: 28 Novembre 2011 ore 01:07 »
Ho provato a lungo a farmi andare a genio Rsync, senza riuscirci.
Dovendo sincronizzare velocemente un HD esterno con le ultime modifiche/cancellazioni/aggiunte di file, ho trovato in FreeFileSync  un programma grafico, comodo e con le funzioni che ricercavo...
Mi pare di ricordare infatti che Rsync sia a senso unico e non double way, ma non vorrei che nel frattempo qualcosa sia cambiato... :-[
Se hai trovato risposta alla tua domanda clicca su "Topic Risolto" in fondo alla pagina!

Offline blupenguin

  • *
  • Post: 366
  • Reputazione: 23
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #6 il: 28 Novembre 2011 ore 13:43 »
@daredevil

come ti ha già detto fedefox posta il tuo file e vediamo cosa non funziona

@souledge

rsync può venir utilizzato anche double way, solitamente in caso di ripristino. Basta creare un secondo script nel quale le origini e destinazioni sono invertite.

Offline SoulEdge

  • *
  • Post: 279
  • Reputazione: -1
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #7 il: 28 Novembre 2011 ore 17:20 »
@souledge

rsync può venir utilizzato anche double way, solitamente in caso di ripristino. Basta creare un secondo script nel quale le origini e destinazioni sono invertite.
Forse sto per dire un'idiozia (vado a naso, perche' un tempo le ho provate quasi tutte per avere sincronizzati i miei 2 supporti), ma se sto lavorando con due supporti con dati diversi, A e B.
A -> B (1) (passo il contenuto di A in B, ovvero aggiornamenti di file e file nuovi), il tutto diventa A = A (2).
Se poi faccio come dici tu, ovvero variando origine/destinazione otterrei comunque, una volta eseguito (1) e quindi avendo ottenuto (2): A -> A.
Se hai trovato risposta alla tua domanda clicca su "Topic Risolto" in fondo alla pagina!

Offline blupenguin

  • *
  • Post: 366
  • Reputazione: 23
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #8 il: 28 Novembre 2011 ore 18:37 »
Forse non ho capito bene la tua richiesta, o meglio forse ho frainteso cosa tu intenda per double way.
Una volta fatto il salvataggio B diventa uguale ad A. Stiamo parlando di A dati che usi  e B dati di backup. Se hai necessità di dover fare un restore da B ad A basta fare come ho detto prima.



Offline DareDevil

  • *
  • Post: 339
  • Reputazione: 3
    • Mostra profilo
    • Il mio blog
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #9 il: 28 Novembre 2011 ore 23:10 »
Codice: [Seleziona]

#---------------------------------------------------+
# Funzione verifica presenza disco ed       |
# esistenza della cartella di destinazione     |
#---------------------------------------------------+
#echo
echo "******* INIZIO VERIFICA DISCO *******"
if ! mount | grep /media/Lacie
then
echo "------- IL DISCO LACIE NON E' MONTATO, -------"
echo "------- COLLEGARE IL DISCO QUINDI RIPROVARE -------"
exit 1
elif [ ! -d /media/Lacie/Backup ]
then
echo "------- LA CARTELLA Backup NON ESISTE -------"
echo -n "# Creo la cartella Backup? (s/n) "
read sure
if [[ $sure = "s" ]]
then
mkdir /media/Lacie/Backup
echo "------- HO CREATO LA CARTELLA Backup -------"
echo "******* VERIFICA COMPLETATA *******"
else
echo "------- NON CREO LA CARTELLA, -------"
echo "------- VERIFICARE IL DISCO QUINDI RIPROVARE -------"
exit 1
fi
else [ -d /media/Lacie/Backup ]
echo "------- IL DISCO E' PRONTO AL TRASFERIMENTO DEI DATI -------"
echo "******* VERIFICA COMPLETATA *******"
fi
sleep 3

#----------------------------------------------------+
# funzione verifica  dell' esistenza del file     |
# di promemoria dei salvataggi eseguiti     |
#----------------------------------------------------+
echo
echo "******* VERIFICO ESISTENZA FILE PROMEMORIA DEI SALVATAGGI  *******"
  if [ -f ~/Documenti/salvataggio_miei_dati ]
  then
  echo "******* FILE salvataggio miei dati TROVATO *******"
  else [ ! -f ~/Documenti/salvataggio_miei_dati ]
  echo " ------- IL FILE salvataggio miei dati NON ESISTE -------"
  echo "------- CREO IL FILE IN ~/Documenti -------"
  sleep 2
  touch ~/Documenti/salvataggio_miei_dati
  sleep 2
  echo "******* FILE salvataggio miei dati CREATO *******"
  fi
sleep 2


#-----------------------------------------------+
# funzione di aggiornamento dati |
# viene eseguito il backup sincronizzando la |
# cartella di destinazione con quella d'origine |
#-----------------------------------------------+
echo
echo "******* INIZIO FASE AGGIORNAMENTO *******"
echo -n "# Inizio il trasferimento dati? (s/n)"
read sure
if [[ $sure = "s" ]]
then
echo "------- INIZIO TRASFERIMENTO FILES -------"
rsync -avrz --delete --force ~/Documenti /media/Lacie/Backup/Documenti_bkp
sleep 2s
rsync -avrz --delete --force ~/Immagini /media/Lacie/Backup/Immagini_bkp
sleep 2s
rsync -avrz --delete --force ~/Musica /media/Lacie/Backup/Musica_bkp
sleep 2s
rsync -avrz --delete --force ~/Script /media/Lacie/Backup/Script_bkp
sleep 2s
rsync -avrz --delete --force ~/Video /media/Lacie/Backup/Video_bkp
sleep 2s
echo "------- FINE TRASFERIMENTO FILES -------"
echo "------- AGGIORNO IL FILE salvataggio miei dati -------"
echo "ultimo salvataggio dati su NOMEDISCO: $(date)" >> ~/Documenti/salvataggio_miei_dati
echo "******* SALVATAGGIO COMPLETATO *******"
exit 0
else
echo "------- NON FACCIO IL TRASFERIMENTO DATI -------"
echo "******* ABBANDONO LA PROCEDURA *******"
exit 1
fi


tenete conto che le cartelle da backuppare sono sulla partizione archivio e non in home

il file è eseguibile, ma se lo clikko non parte....
- DareK -

Offline enzolatina

  • *
  • Post: 609
  • Reputazione: 18
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #10 il: 28 Novembre 2011 ore 23:16 »
invece che cliccare prova a portarti nella directory dove sta lo script e prova a dirgli ./nome_dello_script da console....
noi siamo ****linux, ogni resistenza è inutile, sarete assimilati
linuxuser:408768 http://linuxcounter.net

Offline SoulEdge

  • *
  • Post: 279
  • Reputazione: -1
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #11 il: 29 Novembre 2011 ore 00:04 »
Forse non ho capito bene la tua richiesta, o meglio forse ho frainteso cosa tu intenda per double way.
Una volta fatto il salvataggio B diventa uguale ad A. Stiamo parlando di A dati che usi  e B dati di backup. Se hai necessità di dover fare un restore da B ad A basta fare come ho detto prima.
Ho sbagliato a non precisare per cosa mi serviva.
Al tempo infatti avevo la necessita' di disporre degli stessi identici dati sia in un HD esterno sia nel portatile.
Percio' a fine giornata eseguivo una sincronizzazione double way, ovvero: i dati aggiunti/modificati/cancellati da una parte venivano a loro volta aggiunti/modificati/cancellati nel dispositivo opposto, e viceversa.
Se hai trovato risposta alla tua domanda clicca su "Topic Risolto" in fondo alla pagina!

Offline blupenguin

  • *
  • Post: 366
  • Reputazione: 23
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #12 il: 29 Novembre 2011 ore 13:57 »
Codice: [Seleziona]

#---------------------------------------------------+
# Funzione verifica presenza disco ed       |
# esistenza della cartella di destinazione     |
#---------------------------------------------------+
#echo
echo "******* INIZIO VERIFICA DISCO *******"
if ! mount | grep /media/Lacie
then
echo "------- IL DISCO LACIE NON E' MONTATO, -------"
echo "------- COLLEGARE IL DISCO QUINDI RIPROVARE -------"
exit 1
elif [ ! -d /media/Lacie/Backup ]
then
echo "------- LA CARTELLA Backup NON ESISTE -------"
echo -n "# Creo la cartella Backup? (s/n) "
read sure
if [[ $sure = "s" ]]
then
mkdir /media/Lacie/Backup
echo "------- HO CREATO LA CARTELLA Backup -------"
echo "******* VERIFICA COMPLETATA *******"
else
echo "------- NON CREO LA CARTELLA, -------"
echo "------- VERIFICARE IL DISCO QUINDI RIPROVARE -------"
exit 1
fi
else [ -d /media/Lacie/Backup ]
echo "------- IL DISCO E' PRONTO AL TRASFERIMENTO DEI DATI -------"
echo "******* VERIFICA COMPLETATA *******"
fi
sleep 3

#----------------------------------------------------+
# funzione verifica  dell' esistenza del file     |
# di promemoria dei salvataggi eseguiti     |
#----------------------------------------------------+
echo
echo "******* VERIFICO ESISTENZA FILE PROMEMORIA DEI SALVATAGGI  *******"
  if [ -f ~/Documenti/salvataggio_miei_dati ]
  then
  echo "******* FILE salvataggio miei dati TROVATO *******"
  else [ ! -f ~/Documenti/salvataggio_miei_dati ]
  echo " ------- IL FILE salvataggio miei dati NON ESISTE -------"
  echo "------- CREO IL FILE IN ~/Documenti -------"
  sleep 2
  touch ~/Documenti/salvataggio_miei_dati
  sleep 2
  echo "******* FILE salvataggio miei dati CREATO *******"
  fi
sleep 2


#-----------------------------------------------+
# funzione di aggiornamento dati |
# viene eseguito il backup sincronizzando la |
# cartella di destinazione con quella d'origine |
#-----------------------------------------------+
echo
echo "******* INIZIO FASE AGGIORNAMENTO *******"
echo -n "# Inizio il trasferimento dati? (s/n)"
read sure
if [[ $sure = "s" ]]
then
echo "------- INIZIO TRASFERIMENTO FILES -------"
rsync -avrz --delete --force ~/Documenti /media/Lacie/Backup/Documenti_bkp
sleep 2s
rsync -avrz --delete --force ~/Immagini /media/Lacie/Backup/Immagini_bkp
sleep 2s
rsync -avrz --delete --force ~/Musica /media/Lacie/Backup/Musica_bkp
sleep 2s
rsync -avrz --delete --force ~/Script /media/Lacie/Backup/Script_bkp
sleep 2s
rsync -avrz --delete --force ~/Video /media/Lacie/Backup/Video_bkp
sleep 2s
echo "------- FINE TRASFERIMENTO FILES -------"
echo "------- AGGIORNO IL FILE salvataggio miei dati -------"
echo "ultimo salvataggio dati su NOMEDISCO: $(date)" >> ~/Documenti/salvataggio_miei_dati
echo "******* SALVATAGGIO COMPLETATO *******"
exit 0
else
echo "------- NON FACCIO IL TRASFERIMENTO DATI -------"
echo "******* ABBANDONO LA PROCEDURA *******"
exit 1
fi


tenete conto che le cartelle da backuppare sono sulla partizione archivio e non in home

il file è eseguibile, ma se lo clikko non parte....

Se le cartelle da backuppare sono in un'altra posizione devi modificare tutte le righe dello script come

      
Codice: [Seleziona]
rsync -avrz --delete --force ~/Documenti /media/Lacie/Backup/Documenti_bkp
mettendo al posto di

Codice: [Seleziona]
~/Documenti
la cartella che intendi salvare, cioè se i tuoi ducumenti si trovassero ad esempio in /media/Partizione/Documenti , allora la stringa diventerebbe

   
Codice: [Seleziona]
rsync -avrz --delete --force /media/Partizione/Documenti /media/Lacie/Backup/Documenti_bkp
la modifica va estesa a tutta la sezione ovviamente. Quello che ho messo io era un esempio standard delle principali cartelle della Home

Come avevo detto precedentemente il file va lanciato da terminale. Ti devi spostare quindi da terminale nella posizione in cui lo hai messo (ad esempio se fosse in Script con il comando

Codice: [Seleziona]
cd Script
e da lì lo lanci con

Codice: [Seleziona]
./nome che gli hai dato
Lo script va eseguito sempre da terminale in quanto al suo interno sono previste delle domande in base alle quali la tua risposta influenza il suo comportamento
« Ultima modifica: 29 Novembre 2011 ore 14:00 da blupenguin »

Offline DareDevil

  • *
  • Post: 339
  • Reputazione: 3
    • Mostra profilo
    • Il mio blog
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #13 il: 29 Novembre 2011 ore 14:03 »
grazie della risposta, stasera provo....  ;)
- DareK -

Offline blupenguin

  • *
  • Post: 366
  • Reputazione: 23
    • Mostra profilo
Re:[Guida] Backup sincronizzato con Rsync
« Risposta #14 il: 29 Novembre 2011 ore 14:04 »
Ho sbagliato a non precisare per cosa mi serviva.
Al tempo infatti avevo la necessita' di disporre degli stessi identici dati sia in un HD esterno sia nel portatile.
Percio' a fine giornata eseguivo una sincronizzazione double way, ovvero: i dati aggiunti/modificati/cancellati da una parte venivano a loro volta aggiunti/modificati/cancellati nel dispositivo opposto, e viceversa.

Mi sa allora che per questo tipo di esigenza che hai rsync può non essere il programma più adatto. Ho capito cosa vuoi fare, effettivamente in questo caso, benchè si possa lanciarlo in entrambe le direzioni rischieresti  una perdita di dati. Non è in grado di verificare se i dati presenti nella destinazione siano più recenti in quelli presenti nell'origine.
Rsync alla fine va bene per eseguire un backup veloce inteso nel senso classico ed eventualmente il suo ripristino.

 

Template by Homey | Sito ufficiale | Disclaimer