Backup Incrementale Intelligente su base Linux

Backup!! Quante volte ne abbiamo avuto bisogno, per recuperare dati e magari anche file di sviluppo di applicazioni, database e quant’altro. Un questo piccolo prontuario vi illustrerò come ottenere un backup di files e directory, in modo intelligente, con l’ausilio del semplice comando Tar, in Linux.

Senza dover ricorrere all’aiuto di costosi e complessi sistemi di backup (cito Bacula) Linux, con qualsiasi distro, ci viene in contro nella sua semplicità e organizzazione dinamica dei files.

Ecco che cosa occorre per seguire questa guida:

L’uso dei comandi Linux: Tar e shell di Linux.
L’editing di testo: per la creazione dei file Bash shell Linux.
Un programma client SSH: io consiglio WinSCP, che contiene all’interno già un buon editor. Poi se preferite operare da Windows io lo integro con Notepad++ o da Mac con Editra.
Una versione aggiornata di: Webmin.
Un server Linux: io prediligo Ubuntu Server, ma qualunque distro è consona.
Una o più directory da backupare.

Quanti di noi Web-Dev o Webmaster, hanno avuto la necessità di eseguire il backup dei siti web, ed anche dei dati contenuti nei Database. Con questa guida potrete farlo.

1. Fase. Crare un file bash da eseguire dal nostro server.

Quindi andiamo nella nostra partizione di root del nostro server utilizzando WinSCP. Creiamo una directory chiamata “backup”con WinSCP è facile, basta usare il tasto destro del mouse per crearla. Creiamo quindi un nuovo file che chiameremo “bk_web.sh”, e WinSCP ci aprirà subito il nostro editor di testo. Ora proseguiamo con la scrittura del file.

Importante è scrivere in prima riga questo comando, che permetta al sistema di riconoscere l’estensione del file batch:

#!/bin/sh

Ora trascriviamo le variabili utili che ci interessano nello script.
Variabile dell’email a cui spedire il risultato del backup:

MIAMAIL='miaemail@miodominio.it'

Variabili d’ambiente, per definirne le sorgenti e destinazioni.
Directory di origine del presente file:

DIRSNAR='/root/backup'

Sorgente della directory da includere nel Backup:

SORGENTI='/var/www/'

Si è scelto di eseguire il backup dei siti internet, quindi
“/var/www/”
è la directory interessata.
La destinazione sarà il
Server NAS
montato sulla partizione locale del server web.

DESTINAZIONE='/mnt/nas/bkweb'

Formattazione delle date:

DATE_MAIL=$(date +"%d-%m-%Y")
TIME_MAIL=$(date +"%T")
DATE_FILE=$(date +"%d-%m-%Y-%H-%M-%S")

Il backup preferenziale da eseguire è un backup incrementale, cioè che esegue il backup solo dei file incrementali nel tempo, nella directory interessata. Questo sistema lo reputo poco utile se poi si deve gestire una mole di siti molto alta, che occuperebbero comunque molto spazio, rendendo macchinoso il ripristino. Quindi preferisco prima creare un backup completo datato dei files tar, ed infine cancellare periodicamente i files di backup ormai obsoleti. Il comando sarà successivamente schedulato per ogni avvio giornaliero, più avanti vedremo come.

Quindi questo sarà il comando per cancellare i files di backup tar, obsoleti di 6 giorni:

# Cancella i vecchi archivi presenti
find $DESTINAZIONE -type f -mtime +6 -name "bk-*.tgz" -exec rm -f {} \;

Ora posso procedere al comando di compressione Tar nativo di Linux per eseguire il backup:

# prepara il nuovo archivio, non esiste, incrementale
tar zcpvf $DESTINAZIONE/bk-$DATE_FILE.tgz $SORGENTI

Rimuovo il file di log se presente. La serie di questi comandi sono utili per avere un log del Backup da inviare all’emai definita precedentemente nelle variabili.

rm $DIRSNAR/avviso.log

Scrivo il log del Backup:

RIGA1="***************************\n"
RIGA2="*** NOTIFICA DI BACKUP  ***\n"
RIGA3="***************************\n"
RIGA4="\n"
RIGA5="Backup eseguito correttamente - $DATE_MAIL ore $TIME_MAIL\n"
RIGA6="\n"
RIGA7="Questo Backup ha creato un file incrementale nel server NAS.\n"
RIGA8="File creato: bk-$DATE_FILE.tgz\n"
RIGA9="Server di destinazione: $DESTINAZIONE/\n"
RIGA10="\n"
RIGA11="-------------------------------------------\n"
RIGA12="Powerwd by Andrea Patron - Email: andrea.patron@digitaldesign.it\n"
RIGA13="\n\n"

MAIL_BODY="$RIGA1$RIGA2$RIGA3$RIGA4$RIGA5$RIGA6$RIGA7$RIGA8$RIGA9$RIGA10$RIGA11$RIGA12$RIGA13"

echo $MAIL_BODY >> $DIRSNAR/avviso.log
# Invio email di segnalazione
mail -s "Notifica backup" $MIAMAIL < $DIRSNAR/avviso.log

Una volta terminata la scrittura del file, lo salviamo nella stessa posizione della directory di origine DIRSNAR.

2. Fase. Schedulare l’avvio del comando

Con questo sistema permettiamo di avviare il comando di Backup automatico, deciso da noi. Io ho optato per un avvio giornaliero. Per fare ciò esiste il Linux, e tutte le distro lo mantengono, si usa il demone Cron, che scrive effettivamente su una tabella di scheduling. Noi lo potremmo anche settare a mano da shell Linux, ma per convenienza opereremo con Webmin, il programma di gestione del server.

Quindi apriamo Webmin dal nostro Browser, dal menù accediamo alla sezione

Sistema > Pianificazione Cron Job

Nel campo Comando inseriamo la dicitura: “/root/backup/bk_web.sh ”
E configuriamo lo scheduler come noi vogliamo. Io l’ho impostato quotidianamente alle 2:00:00 di notte.

Potete salvare o volendo, eseguire subito il comando.
In questo modo otterrete un sistema automatizzato del Backup Intelligente.

Potete scaricare lo script Bash completo, direttamente da qui: File della guida bk-web.zip