Backup automatico nei sistemi Gnu/Linux

Difficoltà: minima
Conoscenze richieste: utilizzo di un sistema operativo Gnu/Linux
Questa mini-guida vuole essere di aiuto a quanti, per mancanza di tempo o voglia, non riescono a gestire regolarmente i propri backup nei pc o nei server. Tralasciando le ovvie considerazioni sull’utilità di un backup aggiornato, andremo quindi a distinguerne di due tipi: quello incrementale e quello non incrementale.

Il backup incrementale
Questo tipo di salvataggio di dati consente all’utente di avere una directory sincronizzata ad intervalli predefiniti con la directory da salvare. Ad ogni intervallo, che vedremo poi come definire,il sistema copierà il contenuto della directory in un altra precedentemente creata, magari su una partizione di backup apposita o su un disco esterno. Il comando per effettuare questo processo è il seguente:

rsync -a -v –delete /home /backup/giornaliero

come avrete già capito e un banale comando unix e, come in tutto l’articolo, utilizziamo unicamente bash scripting per i nostri backup. Questo comando non fa altro che sicronizzare il contenuto della directory /home con il contenuto della directory /backup/giornaliero. Analizzandolo nel dettaglio troviamo all’inizio il cmando rsync, che si occupa della sinconizzazione, con le opzioni di ricorsività (-a), quelle di verbosità (-v, stampa a schermo ciò che accade) e l’eliminazione dei contenuti non più presenti nella directory home anche nella stessa (–delete). Va notato che l’opzione per stampare a schermo può essere omessa, questo piccolo comando sarà impostato per essere eseguito in background a cadenze regolari.

Il backup non incrementale
I problemi sorgono quando dobbiamo avere un backup giornaliero datato e non modificabile, magari compresso per occupare poco spazio. In questo caso dobbiamo creare uno script leggermente più complesso, nel quale definire alcuni parametri. Vediamo come:

apriamo il nostro editor di testo preferito e iniziamo a definire che stiamo scrivendo uno script per la shell:

#!/bin/bash

settiamo poi le directory da salvare, il formato della data desiderato (un man date vi può essere d’aiuto) e la directory di destinazione, nel nostro caso quella di backup. Si noti bene che nel settare le directory da salvare ho scritto più path, la directory home, quella /var e quella di configurazione del sistema, /etc.

BACKUP_DIRS=“/home /etc /var“
BACKUP_FILENAME=`date +%A-%d-%B-%Y`
BACKUP_DEST_DIR=”/backup”

a questo punto definiamo in che modo vogliamo comprimere la nostra directory salvata (anche in questo caso un man tar vi può far cambiare idea sul formato di compressione):

tar cvzf $BACKUP_DEST_DIR/$BACKUP_FILENAME.tgz $BACKUP_DIRS

salviamo infine il nostro file col nome che vogliamo e salviamolo nella directory /bin, in quanto presupponiamo che questo salvataggio vada eseguito da superutente. Diamogli anche i permessi di eseguibilità con

chmod +x /bin/nome_dello_script

non resta che provarlo per testarne il funzionamento e vedere il risultato.

Automatizzare i processi
Non mi dilungherò a spiegare cosa sono i crontab e la loro configurazione, basti sapere che per automatizzare l’esecuzione di uno dei due metodi di backup sopradescritti è necessario, previo login come utente root, editare il file /etc/crontab ed aggiungere quanto segue:

# 0 23 * * * root rsync -a –delete /home /backup/giornaliero

per il primo tipo di backup, oppure

# 0 23 * * * root /bin/nome_dello_script

per il secondo tipo.

Riavviamo il programma Cron, il metodo varia a seconda della distribuzione, e ogni sera alle 23 il sistema metterà in salvo i nostri documenti più cari, senza nessuno sforzo.