Azioni

Differenze tra le versioni di "Backup incrementale completo su NAS con Rsync"

Da MontelLUG WIKI.

m (→‎Script per un backup incrementale con Rsync: aggiornata solo la formattazione)
m (pagina categorizzata)
 
Riga 177: Riga 177:
 
exit
 
exit
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
[[Category:Backup]]

Versione attuale delle 15:12, 27 ott 2021

Script per un backup incrementale con Rsync

Necessitavo di impostare un sistema di backup del mio portatile con un piccolo server di casa. Ho trovato il seguente semplice script che segue, che pubblico a favore di chi ne avesse bisogno e ... a mia futura memoria. Lo script, che ho adattato alle mie esigenze, utilizza fondamentalmente le caratteristiche di rsync, consente di fare backup completi di centinaia di Giga senza eccessivo uso della rete (una wifi casalinga nel mio caso) grazie all'uso degli hard link (a patto che sul server il filesystem sia ext3/ext4). E' facile da usare come script da avviare manualmente quando si può, oppure può esser dato in pasto al sistema cron per automatizzare i backup. Grazie a Syslac e Tony per l'assistenza che mi hanno dato per sistemare apici, virgolette e doppie virgolette. Benvenuto chiunque voglia migliorarlo.

 1#!/bin/bash
 2#
 3# A backup script based on Rsync that pushes backups onto a NAS
 4#
 5# Directories are rotated n times and rsync is called to
 6# place a new backup in 0.backups_ago/
 7#
 8# Fonte http://netcodger.wordpress.com 4/17/2012
 9# Personalizzazioni mie
10# 
11# Edit these variables to suit your environment
12n=X					#;Number of backups to retain
13NAS=192.168.1.XXXX			#;IP address or resolvable hostname of NAS
14SrcDir=/home/ciccio			#;Directory to be backed up
15DestDir=/shares/ciccio			#;Backup destination on NAS
16# End of edits
17
18clear
19echo
20echo =========================================================================
21echo Avvio del programma di backup;
22date;
23echo
24
25# Delete the n’th backup.
26echo
27echo =========================================================================
28echo Rimozione del più vecchio backup e rinomina di tutti i successivi;
29date;
30echo
31ssh nome@$NAS "[ -d $DestDir/$n.backups_ago ] && rm -rf $DestDir/$n.backups_ago "
32
33# Rename backup directories to free up the 0.backups_ago directory
34ssh nome@$NAS "for i in {$n..1}; \
35do [[ -d $DestDir/"'$(($i-1))'".backups_ago ]] && \
36/bin/mv $DestDir/"'$(($i-1))'".backups_ago $DestDir/"'${i}'".backups_ago; done"
37
38# Run the Rsync command. Nice is used to prevent Rysnc from hogging the CPU.
39# –link-dest creates hard links so that each backup run appears as a full
40# backup even though they only copy changed blocks since 1.backups_ago
41echo
42echo =========================================================================
43echo Avvio del backup;
44date;
45echo
46nice rsync -av --stats --progress \
47--partial --partial-dir=$DestDir/.rsync-partial \
48--link-dest=$DestDir/1.backups_ago \
49--delete-after --delete-excluded \
50--exclude=Trash* \
51--log-file=$SrcDir/backup.log \
52$SrcDir nome@$NAS:$DestDir/0.backups_ago/
53# altre opzioni utili --compress (equivalente -z) --list-only
54
55echo
56echo =========================================================================
57echo Completed running backup.sh;
58date;
59echo
60echo
61exit

Per evitare l'inserimento della password utente ad chiamata del programma è consigliabile generare una chiave privata ed effettuare lo scambio.

1# ssh-keygen -t rsa  (non inserire password) 
2# ssh utente@NAS mkdir -p .ssh
3# cat .ssh/id_rsa.pub | ssh utente@NAS "cat >> .ssh/authorized_keys"
4# ssh utente@NAS
5# nas:~# chmod -R go-rwx .ssh
6# nas:~# exit#


Dopo aver messo in opera lo script mi sono accorto che in certe occasioni avevo bisogno di interrompere il backup prima del termine, per poi riprenderlo in seguito. Ho aggiunto allora una domanda che mi chiede se voglio riprendere/rifare il backup o farne uno nuovo.

 1#!/bin/bash
 2# Edit these variables to suit your environment
 3n=X					#;Number of backups to retain
 4NAS=192.168.1.XXXX			#;IP address or resolvable hostname of NAS
 5SrcDir=/home/ciccio			#;Directory to be backed up
 6DestDir=/shares/ciccio			#;Backup destination on NAS
 7# End of edits
 8
 9function domanda {
10clear
11echo
12echo =========================================================================
13echo "Intendi completare backup interrotto in precedenza?";
14echo "Scrivi:";
15echo "- si per completare o rifare l'ultimo backup"
16echo "- no per eseguire un backup normale"
17echo "- qualsiasi altra cosa per uscire senza fare nulla"
18echo
19read Choice # -t 20
20date;
21echo
22if [ $Choice = si ] ; then
23  echo
24  echo =========================================================================
25  echo "Hai scelto di rifare/completare l'ultimo backup";
26  echo
27  date;
28  echo 
29  backup
30else
31  if [ $Choice = no ] ; then
32    rotate_dir
33    backup
34  else
35    echo
36    echo =========================================================================
37    echo "Scelta errata: lo script termina ora.";
38    echo
39    date;
40    echo
41  fi
42fi
43}
44
45function rotate_dir {
46clear
47echo
48echo =========================================================================
49echo "Avvio del programma di backup";
50date;
51echo
52# Delete the n’th backup.
53echo
54echo =========================================================================
55echo "Rimozione del più vecchio backup e rinomina di tutti i successivi";
56date;
57echo
58ssh utente@$NAS "[ -d $DestDir/$n.backups_ago ] && rm -rf $DestDir/$n.backups_ago "
59# Rename backup directories to free up the 0.backups_ago directory
60ssh utente@$NAS "for i in {$n..1}; \
61do [[ -d $DestDir/"'$(($i-1))'".backups_ago ]] && \
62/bin/mv $DestDir/"'$(($i-1))'".backups_ago $DestDir/"'${i}'".backups_ago; done"
63}
64
65function backup {
66# Run the Rsync command. Nice is used to prevent Rysnc from hogging the CPU.
67# –link-dest creates hard links so that each backup run appears as a full
68# backup even though they only copy changed blocks since 1.backups_ago
69echo
70echo =========================================================================
71echo "Avvio del backup";
72date;
73echo
74nice rsync -av --stats --progress \
75--partial --partial-dir=$DestDir/.rsync-partial \
76--link-dest=$DestDir/1.backups_ago \
77--delete-after --delete-excluded \
78--exclude=Trash* \
79--log-file=backup.log \
80$SrcDir utente@$NAS:$DestDir/0.backups_ago/
81echo
82echo =========================================================================
83echo "Completed running backup.sh";
84date;
85echo
86echo
87}
88
89# Main program
90domanda
91exit