Il piano di backup è parte integrante del processo di implementazione e configurazione di una macchina server (sia essa fisica o virtuale). Non si può prescindere infatti dal porre la massima attenzione al backup del sistema sin dalle prime fasi.
Amministrare un sistema in produzione senza un adeguato piano di backup può avere conseguenze nefaste, dalla "semplice" interruzione di servizio fino alla perdita irrecuperabile di dati sensibili. Si immagini ad esempio alla perdita di file di configurazione dei servizi installati sulla macchina, con conseguente interruzione di servizio.
Ovviamente non è possibile prevedere se e quando una perdita di dati si verificherà, sia essa accidentale (ad esempio, dovuta alla rottura di un supporto di memorizzazione, o ad una sovrascrittura non intenzionale) o dolosa (ad esempio dovuta ad un attacco informatico). Tuttavia è possibile prevedere le implicazioni ed i costi che una tale perdita potrebbe comportare. Tale stima è alla base delle valutazioni necessarie per stabilire una buona strategia di backup.
Backup di file
In generale, il modo più semplice per effettuare delle copie di backup consiste nel copiare i file corrispondenti, siano essi, configurazioni, dati degli utenti, immagini delle macchine virtuali, etc.
tar
In ambiente Unix/Linux esistono diverse utility che possono servire allo scopo. Ad esempio, è possibile utilizare il comando tar
(Tape ARchive, dato che originariamente il programma venne sviluppato per scrivere dei backup su nastro). Tar permette di creare un archivio (detto tarball), eventualmente compresso, conservando la struttura del filesystem (directory e subdirectory) ed i metadati associati ai vari nodi (utenti, permessi, date, etc).
Ad esempio, il comando:
$ tar zcf /mnt/backup/home-backup-`date '+%d-%B-%Y'`.tar.gz /home/
creerà un archivio compresso con gzip della directory /home e lo salverà nella directory /mnt/backups.
Da notare l'uso dell'apice inverso (o backtick) per inserire la data corrente, così come restituita dal comando date
nel nome dell'archivio. Per maggiori dettagli, consultare la guida sullo shell scripting di HTML.it.
rsync
Un'altra utility utile allo scopo di effettuare il backup di file è rsync. Rsync consente di creare una copia sincronizzata della directory data in input. Il processo di creazione delle copie con rsync è in genere più rapido rispetto a tar dato che rsync può creare copie incrementali. Ciò significa che le operazioni di copia successive alla prima riguarderanno solo i file modificati, evitando di copiare i file identici già presenti in entrambe le directory.
Ad esempio, con il comando:
$ rsync -a --delete /home/ /mnt/backup/home
creerà una copia di backup della directory /home, avendo cura di cancellare dalla directory di destinazione i file non più presenti in quella sorgente (opzione --delete
).
Backup di MySQL
Sebbene sia possibile effettuare il backup dei database MySQL semplicemente copiando le directory corrispondenti (ad esempio /var/lib/mysql), questo metodo è sconsigliato per diverse ragioni. In primo luogo, i backup così creati potrebbero essere affetti da problemi di incompatibilità tra versioni diverse di MySQL. Inoltre, così facendo verranno copiati anche i file creati durante la normale esecuzione del servizio (ad esempio i lock) che potrebbero essere del tutto incoerenti con lo stato del servizio in sede di ripristino.
Un'alternativa alla copia diretta è offerta dall'utility mysqldump presente tra i binary di MySQL. L'utility consente di esportare uno o più database su file di testo, in linguaggio SQL. Le varie opzioni dell'utility consentono di specificare quali database e quali tabelle esportare e se inserire nell'output gli statement per la creazione dello schema o solo quelli per inserire i dati.
Ad esempio:
$ mysqldump --user=admin_backup --password --lock-tables --databases miodatabase > /mnt/backup/miodatabase.sql
Come si evince dall'esempio, il comando mysqldump restituisce l'output sul proprio stdout. Quindi, per memorizzare l'output su file è necessario usare la redirezione dell'output con >
. Questa caratteristica rende l'uso di mysqldump
ancora più flessibile, perché permette di usarlo insieme ad altri comandi.
Ad esempio, con il comando:
$ mysqldump --user=admin_backup --password --lock-tables --databases miodatabase | gzip > /mnt/backup/miodatabase.sql.gz
l'output di mysqldump
verrà inviato a gzip per essere compresso, prima di essere memorizzato su disco.
Per ripristinare i dati sarà sufficiente eseguire lo script SQL generato da mysqldump collegandosi al server. Ad esempio:
$ mysql -p < miobackup.sql
Backup di container
Per effettuare il backup di container LXC è possibile procedere copiando il contenuto della directory contenente il filesystem del container stesso (ad esempio /var/lib/lxc/miocontainer), utilizzando i comandi descritti sopra. Nel caso in cui si utilizzi tar, è necessario specificare l'opzione --numeric-owner
nella riga di comando affinché i metadati siano correttamente riportati. In particolare, con questa opzione ci si assicura che user ID (uid) e group ID (gid) dei file contenuti nell'archivio siano quelli effettivamente usati dall'hypervisor di LXC.
Su sistemi in cui è presente LXD, è possibile ricorrere al comando lxc copy che crea una copia identica del container specificato. Ad esempio, digitando:
$ lxc copy mioserver:container1 containerbackup
verrà creato un container di nome containerbackup, copia identica del container di nome container1 presente sull'host mioserver. Ciò consente anche di migrare i container tra i vari host LXD o di conservare le copie di backup in un host diverso, pronte per essere attivate se l'host principale dovvesse essere disattivato.
Automazione
I comandi sopra descritti possono essere invocati periodicamente (ad esempio per creare backup con cadenza regolare) utilizzando uno strumento di automazione come cron. Si rimanda alla relativa lezione per ulteriori informazioni a riguardo.