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.

Questo ebook è il primo pubblicato da Informatica Friuli dedicato alla personalizzazione di certi aspetti dei template per WordPress.
Questo ebook non deve dare grosse aspettative ...
Non c'è hosting, spazio web dove hai caricato i file del tuo sito, che ti da la garanzia al 100% di posizionarti nella serp di Google al primo posto.
[caption id="" ...
Prendo spunto da quanto si può leggere su MasterNewMedia per quanto riguarda il Newsmaster come la figura che filtra e fornisce ...

Bello!
Soprattutto l’rsync.
E’ possibile implementare un rsync continuo in tempo reale?
E se si, funziona in modo sincrono o asincrono?
Mi spiego, supponiamo che il device sorgente sia qualcosa che è perennemente sotto stress a livello di filesystem per cui sarebbe bello avere sempre una sua immagine continuamente sincronizzata con un ritardo di qualche minuto… è possibile farlo con rsync?
Se così fosse, rync lavora in modo sincrono o asincrono? Ovvero ad ogni modifica sulla sorgente fa immediatamente fare una modifica nella destinazione e, magari, ne verifica il successo oppure in maniera asincrona nel senso che “replica appena può”.
Nel primo caso sarebbe interessante capire quanto questo influisce sulle performance della sorgente poichè in molti casi questa non può permettersi di aspettare che si concludano altri processi che trasferiscono informazioni via rete….
Grazie
Ivan
Rsync in questo caso viene avviato come comando, a cadenze regolari.
Questi intervalli possono essere modificati a piacere (man date).
Rsync scrive unicamente i dati modificati nel path di destinazione, non tutti i dati nuovamente, per cui il carico di lavoro è minimo (se non ti chiami Google). In questo senso rsync lavora in modo asincrono.
Se desideriamo modifiche sincrone la soluzione migliore è un sistema RAID.
In ogni caso c’è la possibilità di avviare rsync come server su una macchina separata _che trasferiscono informazioni via rete_, come giustamente facevi notare, con l’opzione –daemon ma è sempre il client che, ad intervalli prestabiliti, scrive sul server.
Prossimamente scriverò una piccola guida su come costruire un server di backup e configurare correttamente i client, *nix o Windows che siano.
Saluti,
Riccardo Grosso
Uno splendido articolo, molto utile e chiaro… Ti ringrazio!!!
Ho un problema con questa stringa:
BACKUP_FILENAME=`date +%A-%d-%B-%Y`
sembra che non converta le variabili ma mantenga la versione letterale nel nome del tgz. Puoi indicarmi la stringa corretta?
grazie
Risolto, credo che il problema fosse che andava specificato il percorso di date con
`/bin/date +%A-%d-%B-%Y`
PS: sto utilizzando Ubuntu Gutsy
Esattamente, hai risolto bene. Bastava in ogni caso anche “date”.
Ciao e grazie
grazie, molto utile la guida!!
io volevo sapere se è possibile creare uno script di backup incrementale tramite r-sync ad ogni plug di un specifico hd….mi spiego, vorrei arrivare ad avere un hd usb, dove copia la mia home ogni volta che lo collego al computer, sai se è possibile?
Ciao. A dire il vero la guida sopra riportata, oltre che ad utilizzare il linguaggio di scripting della shell bash, presente di default sulla stragrande maggioranza delle distribuzioni Gnu/Linux e dei sistemi *NIX like, poggia pesantemente sulla funzionalità di scheduling dei programmi e dei comandi, implementata dal demone crond.
Detti programmi, o script, o comandi appunto, vengono mandati in esecuzione PERIODICAMENTE, e non in coincidenza al verificarsi di un evento.
Precisato ciò, una volta preparato lo script di backup ( ma visto che mi sembra tu sia su un sistema desktop, perchè non utilizzare Grsync, la comoda interfaccia grafica di Rsync? ), dovremmo creare un piccolo programma che interagisca con i volumi e il loro mount ( ma non sono formato a sufficenza su questo argomento ) e trovare il modo di caricare uno script ad un determinato evento.
Altre soluzioni potrebbero essere quella di mettere il nostro script in crontab e avviarlo una volta al minuto, ma non è consona e non sò che tipo di problemi possa comportare a livello di carico. Oppure potremmo metterlo tra gli script di chiusura o di apertura del sistema o dell'interfaccia grafica. Ma si suppone sempre che il disco sia collegato, altrimenti nulla.
Se hai dubbi posta pure
ciao e grazie,
Riccardo Grosso