Rsync per un backup incrementale

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

3 thoughts on “Rsync per un backup incrementale”

Leave a Reply

Your email address will not be published. Required fields are marked *