Ieri un mio amico mi ha chiesto come poter effetture dei backup incrementali del suo NAS su un altro sistema.
Esistono diversi metodi, per esempio creare dei tar incrementali e poi trasferirli, oppure usare direttamente rsync.
La mia soluzione è stata quella di utilizzare rsync con un piccolo script ed ecco fatto il backup incrementale.
Saro breve, eccovi lo script che gli ho passato
#!/bin/bash #La directory dove mettere i file DIR_BACKUP_INC="/usb/backup/incgiornaliero" #Directory Originale DIR_ORIG="/lamiadir" # La data per un backup orario aggiungete %H data=`date "+%Y-%m-%d"` # Syncronizza tenendo in considerazione quello che e, stato gia copiato rsync -aP --link-dest="../precedente" \ --exclude-from=$_DIR_BACKUP_INC/da_escludere.lst \ "$DIR_ORIG" "$DIR_BACKUP_INC/back-$data" rm -f "$DIR_BACKUP_INC/precedente" ln -s "$DIR_BACKUP_INC/back-$data" "$DIR_BACKUP_INC/precedente"
Come vedete è uno script molto conciso
Una breve spiegazione delle opzioni rsync
-a significa che deve includere il GID, UID, mantenere la data, copia I link simbolici
-P visualizza l’avnzamento
–link-dest controlla una directory per copiare solo I file modificati
Ora ci sono dei parametri che potrebbero tornare utili come
–delete per eliminare I file cancellati nella direttori di destinazione che sono stati cancellati nella directory d’origine
–exclude-from per escludere delle directory dalla sincronizzazione, il parametro che gli passate è un file dove ha una riga per ogni esclusione
-z per la compressione durante il trasferimento
-e ssh per permettere un backup remote es.
USER@NOMESERVER:/DIRREMOTA
Eccovi lo script per un backup remoto
#!/bin/bash #La directory dove mettere I file DIR_BACKUP_INC="/usb/backup/incgiornaliero" #Directory Originale DIR_ORIG="/lamiadir" # Utente USERREMOTO=pippo # Host HOSTREMOTO=192.192.192.192 # La data per un backup orario aggiungete %H data=`date "+%Y-%m-%d"` # Syncronizza tenendo in considerazione quello che è stato gia copiato rsync -aP --link-dest="../precedente" \ --exclude-from=$_DIR_BACKUP_INC/da_escludere.lst --delete \ "$DIR_ORIG" "-e ssh" $USERREMOTO@$HOSTREMOTO:"$DIR_BACKUP_INC/back-$data" # Qui dovete passare dei comandi in SSH ssh $USERREMOTO@$HOSTREMOTO \ "rm -f $DIR_BACKUP_INC/precedente" && \ "ln -s $DIR_BACKUP_INC/back-$data $DIR_BACKUP_INC/precedente"
Infine non dimenticatevi questo articolo per usare rsync per connessione remota senza bisogno di digitare la password, ecco il link
Ricordatevi di fare un test con una directory di prova per capire e testare lo script, e anche di usare un disco formattato in ext3 o ext4 per usare gli hard link.
Un hard link consumerà un pò di spazio, ma normalmente molto meno del file originale. Se non volete questo overhead, potete sempre usare la funzione –compare-dest invece di –link-dest, che funziona bene anche con sistemi formattati in NTFS e FAT, ma in questo modo se cancellerete una directory di backup incrementale e un file si trova nella directory, perderete quel file. Ma questo si puo ovviare con dei snapshot completi, per esempio.
NON MI ASSUMO NESSUNA RESPONSABILITÀ SUL CORRETTO FUNZIONAMENTO E SULLA VALIDITÀ DELLE INFORMAZIONI FORNITE, L’ARTICOLO È UN PROMEMORIA PER ME
L’amico ringrazia per l’ottimo supporto dato.
CIAO
Rsync è grandioso, veloce, sicuro (grazie ad SSH) e poi funziona anche su windows e mac!
Grazie molto per il tuo script.
Al tuo amico avresti potuto proporre anche l’utilizzo di cron :-).
Ciao!