Backup con rsync su un disco esterno USB

Da Linux User Group Scandiano.

Questo script, se opportunamente adattato al proprio ambiente di lavoro, può essere utile per effettuare il backup su un disco esterno USB (o su un altro dispositivo). Lo script oltre ad effettuare il backup incrementale con rsync verifica che il disco USB sia montato e scrive un file di log con le attività effettuate.

#!/bin/bash

SORGENTE="/home/max"	# Cosa copiare
TARGET="/media/backup"		# Dove copiare
EXCLUDE="/home/max/.rsync/exclude"	# Lista file da escludere
TAG="backup" # tag dei log scritti in /var/log/messages

# VERIFICA CHE IL DISCO E' MONTATO
MOUNTED=$(df | grep $TARGET |awk '{print $6}')

if [ "$MOUNTED" == "$TARGET" ]
then
	echo "Il disco è montato: eseguo il backup"
	logger Inizio backup di $SORGENTE per `hostname` -t $TAG
	rsync -av --exclude-from=$EXCLUDE $SORGENTE $TARGET/
	RSYNCERR=$?
	logger Fine backup per `hostname` rsync ha restituito $RSYNCERR -t $TAG
	exit 0
else
	echo "Il disco non è montato"
	logger Impossibile eseguire il backup di `hostname` disco non montato -t $TAG
	exit 1
fi

Spiegazione dello script

  • La riga #!/bin/bash indica che lo script è in bash e invoca l'interprete.
  • Le 4 righe successive sono le variabili dello script definite (vedi commento a fianco di ciascuna riga).
  • La verifica che il disco di backup è effettivamente montato in $TARGET viene fatto con df, grep filtra la riga che ci interessa e awk filtra la colonna estraendo la directory nella quale è montato il disco. awk può essere superfluo poiché se il disco non è montato grep restituirà zero righe.
  • Se il disco è montato effettua il backup se no esce con errore 1
  • Il backup è effettuato con rsync. Le righe che precedono e seguono sono la scrittura del file di log sotto /var/log/messages usando il tag "backup" per facilitare la lettura.