Backup2l

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

backup2l è uno programma (script bash) che, secondo le parole dell'autore, è destinato al "low-maintenance backup/restore tool for mountable media", cioè uno strumento "leggero" da utilizzare dalla riga di comando per la generazione, la manutenzione e il ripristino dei backup; gli archivi creati a tal fine sono registrati in una parte del file system a ciò dedicata dall'utente (ad esempio, la partizione di un disco rigido appositamente collegato al file system o qualunque altra sua parte).

La progettazione del programma è stata finalizzata a:

  • minimizzare la manutenzione da parte dell'amministratore: una volta installato e configurato, non richiede altri particolari interventi in quanto è avviato giornalmente in automatico dallo scheduler di sistema (cron);
  • ottenere trasparenza nelle procedure di archiviazione: richiama programmi ben conosciuti e consolidati (come tar, afio e bzip2) per la generazione e compressione degli archivi prodotti;
  • robustezza nei risultati: implementazione di un algoritmo per backup gerarchici differenziali con un numero di livelli e sottolivelli personalizzabili che prevede la rotazione degli archivi creati in modo da impiegare in modo efficiente lo spazio disponibile sulle periferiche utilizzate (per maggiori dettagli sullo schema di rotazione, consultare la pagina di manuale con il comando "man backup2l").

Per decidere se un file deve essere incluso nel backup (è nuovo o modificato), il programma, dopo aver verificato i criteri di inclusione configurati dall'utente, ne controlla il nome, la data di modifica, le dimensioni, le proprietà e le autorizzazioni: ciò è eseguito con alcune cautele in modo da mantenere la compatibilità con file system di altri sistemi operativi. Tutti i file di controllo sono memorizzati congiuntamente al file dell'archivio dati nella directory di backup e il loro contenuto è per lo più autoesplicativo: in caso di emergenza, l'utente non solo può fare affidamento sulle funzionalità di ripristino del programma, ma può - se necessario - accedere anche direttamente agli archivi dati per estrarne manualmente il contenuto. Qualora si preveda che il volume dei dati destinati al backup ecceda le dimensioni della periferica rimovibile eventualmente destinata ad archiviarli, è possibile utilizzare una funzione di split-and-collect per fare in modo che gli archivi abbiano una dimensione che li renda ripartibili su più supporti.

Infine, le funzionalità di ripristino, da attivare manualmente, consentono di ricreare facilmente i file o le directory a partire dagli archivi di backup (comprensivi degli attributi originali).

Installazione

Il programma è disponibile nei repository on-line di Debian GNU/Linux e, quindi, può agevolmente essere installato con i consueti gestori di pacchetti, ad esempio, impartendo con privilegi di amministrazione il seguente comando da terminale:

# apt-get install backup2l

Per maggiori informazioni su backup2l usate il comando : man backup2l

Pacchetti raccomandati: bzip2

Pacchetti consigliati: xz-utils

Questo è tutto quello che serve per l'installazione.

Configurazione

La configurazione è piuttosto semplice e consiste nella impostazione di alcuni parametri del file /etc/backup2l.conf che, di fatto, è uno script bash e, quindi, le righe precedute dal carattere '#' rappresentano commenti, mentre tutti i rimanenti contenuti rappresentano istruzioni per il programma. Di seguito saranno riportati solo i parametri di cui è indispensabile conoscere l'esistenza per utilizzare da subito backup2l.

Volume identification

il parametro VOLNAME specifica il prefisso utilizzato dal programma per attribuire la prima parte del nome del file destinato ad archiviare i dati secondo lo schema di backup differenziale; ad esempio:

# Volume identification

# This is the prefix for all output files;
# multiple volumes can be handled by using different configuration files
VOLNAME="all"

qualora sia mantenuto il parametro di default "all", gli archivi di backup saranno sistematicamente generati, ad esempio, con i seguenti nomi:

all.1 
all.11
all.111
etc........

dove i numeri posposti al prefisso "all" rappresentano i livelli e sottolivelli di ciascun backup differenziale che si è succeduto nel tempo.

Source files

Il parametro SRCLIST indica al programma l'elenco delle directory del proprio file system da includere nel backup; per ciascuna di esse' è specificato il percorso completo (path) a partire da directory radice ('/') ed uno "spazio" di separazione dalla successiva voce nell'elenco; ad esempio, il valore di default del parametro prevede di includere le directory /etc, /root, /home, /var/mail, /usr/local:

# Source files
 
 # List of directories to make backups of.
 # All paths MUST be absolute and start with a '/'!
 SRCLIST=(/etc /root /home /var/mail /usr/local)

naturalmente, il valore di questo parametro potrà e dovrà essere modificato in ragione delle esigenze dell'utente e della collocazione nel file system dei dati di suo interesse.

Skip condition

Il parametro SKIPCOND permette di specificare, se necessario, eventuali criteri di esclusione dal backup per file che soddisfano i requisiti del parametro SRCLIST. Ad esempio, volendo includere nel backup la directory del progetto di un programma scritto in linguaggio C, si potrebbe volerne includere tutto il contenuto tranne gli object file (quelli che terminano con l'estensione .o) prodotti dal compilatore e propedeutici alla generazione dell'eseguibile, ma ritenuti superflui ai fini del backup.

Ciò può essere ottenuto specificando il pattern del nome dei file che si intendono escludere secondo la sintassi del comando find (consultare il manuale del comando per maggiori dettagli).

Ad esempio, il valore di default previsto per tale parametro esclude tutti i file il cui nome contiene la sequenza di caratteri .nobackup oppure (clausola -o che rappresenta un or logico) che terminano con .o:

# The following expression specifies the files not to be archived.
# See the find(1) man page for further info. It is discouraged to
# use anything different from conditions (e. g. actions) as it may have
# unforeseeable side effects.
 
# This example skips all files and directories with a path name containing
# '.nobackup' and all .o files:
SKIPCOND=(-path "*.nobackup*" -o -name "*.o")

Qualora, ad esempio, volessimo escludere anche tutti i file che terminano con l'estensione .tmp il parametro potrebbe essere così modificato:

SKIPCOND=(-path "*.nobackup*" -o -name "*.o" -o -name "*.tmp")

Questo parametro è estremamente utile soprattutto in sistemi contenenti grandi volumi di dati in quanto, come è esperienza comune, all'interno di essi sono presenti un gran numero di file che è possibile escludere con sicurezza dal backup ottimizzando lo spazio occupato sul dispositivo a ciò destinato.

In ogni caso, qualora non si abbia bisogno di escludere alcun file, il parametro può essere semplicemente annullato commentandolo nel file di configurazione, cioè anteponendo ad esso il carattere '#'; ad esempio:

# SKIPCOND=(-path "*.nobackup*" -o -name "*.o")

e togliendo il commento in:

# If you do not have anything to skip, use:
SKIPCOND=(-false)     # "SKIPCOND=()" does not work

Backup directory (destination)

Il parametro BACKUP_DIR specifica il percorso completo (path) a partire da directory radice (/) all'interno del quale il programma genererà gli archivi di backup ed i file di controllo.

Nello stesso percorso esso cercherà gli archivi di backup in caso di ripristino; ad esempio, il valore di default del parametro è /disk2/backup:

# Destination

# Mount point of backup device (optional)
#BACKUP_DEV="/disk2"

# Destination directory for backups;
# it must exist and must not be the top-level of BACKUP_DEV
BACKUP_DIR="/disk2/backup"

Naturalmente, esso deve essere cambiato indicando la collocazione prescelta sul proprio sistema altrimenti il programma non funzionerà.

Backup parameters

I parametri di seguito indicati controllano l'algoritmo di backup gerarchico differenziale utilizzato dal programma:

  • MAX_LEVEL specifica il numero dei livelli (da 1 a 9): si ricorda che i backup completi corrispondono al livello zero, gli altri livelli corrispondono a backup differenziali;
  • MAX_PER_LEVEL specifica il numero di backup differenziali da eseguire per ogni livello (da 1 a 9);
  • MAX_FULL specifica il numero dei backup completi da mantenere (da 1 a 8);
  • GENERATIONS specifica il numero di generazioni da conservare per ogni backup , solitamente è accettabile il valore di default 1;
  • CREATE_CHECK_FILE controlla la generazione del file di check.

I valori di default previsti dal programma sono adeguati alla maggior parte dei casi d'uso e sono di seguito riportati:

# Backup parameters

# Number of levels of differential backups (1..9)
MAX_LEVEL=3

# Maximum number of differential backups per level (1..9)
MAX_PER_LEVEL=8

# Maximum number of full backups (1..8)
MAX_FULL=2

# For differential backups: number of generations to keep per level;
# old backups are removed such that at least GENERATIONS * MAX_PER_LEVEL
# recent versions are still available for the respective level
GENERATIONS=1

# If the following variable is 1, a check file is automatically generated
CREATE_CHECK_FILE=1

Attivazione backup2l

Per poter abilitare il funzionamento dello script, occorre commentare una riga nella parte finale

# Remove this line after the setup is finished.
#UNCONFIGURED=1

Fatto questo lo script potrà essere eseguito.

Verifica della configurazione dello scheduler

Terminata la configurazione di backup2l non resta che verificarne la predisposizione all'esecuzione tramite lo scheduler di sistema.

Come impostazione di default, l'installazione di backup2l prevede la creazione di uno script nella cartella /etc/cron.daily con il nome zz-backup2l il cui contenuto è il seguente:

#!/bin/bash

# The following command invokes 'backup2l' with the default configuration
# file (/etc/backup2l.conf).
#
# (Re)move it or this entire script if you do not want automatic backups.
#
# Redirect its output if you do not want automatic e-mails after each backup.

! which backup2l > /dev/null || nice -n 19 backup2l -b 

Come si può vedere, lo script:

  • effettua un controllo sull'esistenza del programma backup2l (! which backup2l > /dev/null)
  • in caso affermativo (operatore || che esegue il comando alla sua destra se quello alla sua sinistra ha restituito il valore 1) esegue il programma backup2l -b (notare il comando -b che indica di avviare il backup)
  • con una priorità di processo (programma nice) tale da interferire il meno possibile con il normale funzionamento del sistema (nice -n 19 backup2l -b).

Durante l'esecuzione del backup, il programma genera un output che lo scheduler, di norma, allega ad un'email inviata all'amministratore di sistema con la registrazione delle attività svolte.

Attention.png Avvertimento
per poter ricevere le email così generate è indispensabile aver configurato un MTA (mail transfer agent) sul proprio sistema (come, ad esempio, exim).

Il backup è, quindi, eseguito almeno una volta al giorno, all'orario specificato nel file di configurazione /etc/crontab; resta inteso che il backup non sarà eseguito qualora all'orario previsto il sistema fosse spento oppure lo scheduler non fosse in attivo.

Esempio

A partire da una configurazione che prevede i seguenti parametri:

MAX_LEVEL=2
MAX_PER_LEVEL=9
MAX_FULL=2

backup2l genera un resoconto completo che è inviato per email, come nell'esempio sotto riportato:

/etc/cron.daily/zz-backup2l:
backup2l v1.4 by Gundolf Kiefer

Sun Aug 30 06:35:36 CEST 2009

Running pre-backup procedure...
pre-backup: nothing to do

Removing old backups...
removing <all.11>
removing <all.12>
removing <all.13>
removing <all.14>
removing <all.15>
removing <all.16>
removing <all.17>
removing <all.18>
removing <all.19>
removing <all.1>
moving <all.21> to <all.11>
moving <all.22> to <all.12>
moving <all.23> to <all.13>
moving <all.24> to <all.14>
moving <all.25> to <all.15>
moving <all.26> to <all.16>
moving <all.27> to <all.17>
moving <all.281> to <all.181>
moving <all.282> to <all.182>
moving <all.283> to <all.183>
moving <all.284> to <all.184>
moving <all.285> to <all.185>
moving <all.286> to <all.186>
moving <all.287> to <all.187>
moving <all.288> to <all.188>
moving <all.289> to <all.189>
moving <all.28> to <all.18>
moving <all.291> to <all.191>
moving <all.292> to <all.192>
moving <all.293> to <all.193>
moving <all.294> to <all.194>
moving <all.295> to <all.195>
moving <all.296> to <all.196>
moving <all.297> to <all.197>
moving <all.298> to <all.198>
moving <all.299> to <all.199>
moving <all.29> to <all.19>
moving <all.2> to <all.1>
removing <all.181>
removing <all.182>
removing <all.183>
removing <all.184>
removing <all.185>
removing <all.186>
removing <all.187>
removing <all.188>
removing <all.189>

Preparing full backup <all.2>...
57239 / 57239 file(s), 10984 / 10984 dir(s), 5.1GB / 5.1GB (uncompressed)
skipping: 0 file(s), 0 dir(s), 0 B (uncompressed)

Creating archive using 'DRIVER_TAR_GZ'...
Checking TOC of archive file (< real file, > archive entry)...
9210c9210
< /home/mmbarabba/data/karamba/jads/monitor-em-a??ao.png
---
> /home/mmbarabba/data/karamba/jads/monitor-em-a\303\247ao.png
Creating check file for <all.2>...

Running post-backup procedure...
post-backup: nothing to do

Sun Aug 30 06:50:58 CEST 2009


Summary
=======

Backup Date Time | Size | Skipped Files+D | New Obs. | Err.
------------------------------------------------------------------------------
all.1 2009-05-22 06:33 |4747413K | 0 63157 |63157 0 | 1
all.11 2009-06-01 06:33 | 25601K | 0 63779 | 1021 399 | 0
all.12 2009-06-11 06:33 | 11918K | 0 63781 | 179 177 | 0
all.13 2009-06-21 06:33 | 18581K | 0 64058 | 471 194 | 0
all.14 2009-07-01 06:33 | 39216K | 0 67235 | 5663 2486 | 0
all.15 2009-07-11 06:38 | 46210K | 0 67812 | 1477 900 | 0
all.16 2009-07-21 06:34 | 21308K | 0 67809 | 722 725 | 0
all.17 2009-07-31 06:34 | 22159K | 0 67944 | 875 740 | 0
all.18 2009-08-10 06:39 | 12044K | 0 68065 | 336 215 | 0
all.19 2009-08-20 06:40 | 43597K | 0 68194 | 1507 1378 | 0
all.191 2009-08-21 06:32 | 14503K | 0 68200 | 158 152 | 0
all.192 2009-08-22 06:33 | 11011K | 0 68205 | 80 75 | 0
all.193 2009-08-23 06:33 | 10960K | 0 68217 | 44 32 | 0
all.194 2009-08-24 06:33 | 10961K | 0 68228 | 43 32 | 0
all.195 2009-08-25 06:33 | 11141K | 0 68202 | 79 105 | 0
all.196 2009-08-26 06:35 | 11023K | 0 68213 | 43 32 | 0
all.197 2009-08-27 06:35 | 21848K | 0 68205 | 759 767 | 0
all.198 2009-08-28 06:44 | 11104K | 0 68198 | 209 216 | 0
all.199 2009-08-29 06:43 | 10979K | 0 68213 | 47 32 | 0
all.2 2009-08-30 06:35 |4842014K | 0 68223 |68223 0 | 1

Filesystem Size Used Avail Use% Mounted on
/dev/hdb1 38G 9.7G 27G 28% /mnt/backup

Come potete vedere, il resoconto è ben dettagliato e qualora vi fossero errori, sono segnalati con il riferimento al path completo del file interessato per consentire un intervento mirato.
Il report è ben dettagliato e in questo caso si svolge alla fine del ciclo programmato, per poi ricominciare.

Sintassi

Si riporta di seguito la sintassi del programma tratta dalla pagina di manuale con i riferimenti ritenuti più interessanti:

backup2l [ -c conffile ] [ -t backup-ID ] command

Opzioni

  • -c, --conf conffile: se presente, permette di specificare il file di configurazione qualora fosse diverso da quello di default (/etc/backup2l.conf).
  • -t, --time BID: se presente, questa opzione seleziona uno specifico backup utilizzando come riferimento il BID (backup ID o identificativo di backup), cioè un identificativo univoco che il programma attribuisce a ciascun archivio di backup in funzione del livello e sottolivello a cui si riferisce (consultare il manuale del programma per maggiori dettagli); su tale archivio così selezionato saranno applicati i successivi comandi --locate e --restore.

Comandi

  • -h, --help: visualizza alcune istruzioni sintetiche sull'uso del programma;
  • -e, --estimate [ level ]: visualizza il numero di file, il volume di dati ed altre informazioni relative al backup che sarebbe generato secondo la configurazione corrente qualora fosse avviato; non sono creati, né rimossi, archivi; se specificato, il valore del parametro level può essere utilizzato in sostituzione di quello previsto per il parametro MAX_LEVEL nella configurazione;
  • -b, --backup [ level ]: esegue un nuovo backup rimuovendo gli archivi più vecchi secondo quanto previsto dai parametri della configurazione; se specificato, il valore del parametro level può essere utilizzato in sostituzione di quello del parametro MAX_LEVEL nella configurazione;
  • -s, --get-summary: visualizza una tabella riassuntiva relativa ai backup eseguiti;
  • -a, --get-available [ pattern list ]: visualizza l'elenco dei file che sono rimossi o aggiunti nei backup ('+' indica un file nuovo che è stato aggiunto, '-' indica un file che è stato rimosso o sostituito); se è fornito il parametro pattern list l'elenco può essere filtrato secondo la espressione regolare fornita; inoltre, tutti i messaggi di stato sono destinati allo standard error, in modo che possano essere facilmente reindirizzati;
Bulb.png Suggerimento
il pattern di ricerca è applicato non solo ai nomi dei file, ma anche a tutte le voci presenti nell'output generato a partire dal contenuto dell'archivio di backup: è, quindi, possibile eseguire ricerche anche su altre proprietà dei file come, ad esempio, il creatore o la data di modifica. Qualora di desiderasse limitare la ricerca solo nome del file, è possibile far precedere il pattern di ricerca da "<space>/.*".


  • -l, --locate [ pattern list ]: visualizza la path in cui saranno ripristinati i file dell'ultimo backup o di quello specificato con l'opzione --time ; se fornito, il parametro pattern list è utilizzato in analogia a quanto già indicato per il comando --get-available. Sono interessati i file attivi cioè quelli presenti nel sistema al momento del backup. In sintesi, quindi, questo comando indica quali file saranno estratti, da quale archivio per ripristinare lo stato del sistema al momento dello specifico backup selezionato;
  • -r, --restore [ pattern list ]: esegue le stesse azioni del comando --locate, ma in più esegue fisicamente il ripristino del backup; è bene precisare che i file sono ripristinati nella directory corrente, cioè quella da cui è eseguito il comando backup2l -r e visualizzabile con il comando "pwd";
Attention.png Avvertimento
è possibile, ma è sconsigliato, ripristinare i file del backup nelle loro path originali eseguendo il comando cd / prima del comando backup2l -r
  • -p, --purge BID list: rimuove l'archivio (o gli archivi) specificato/i, e tutti gli altri archivi di backup (ricordiamo che è utilizzata la tecnica di backup differenziale);
  • -m, --make-check [ BID list ]: crea un 'file di controllo' usando il programma md5sum; se nessun BID (backup ID) è specificato, il file è creato per tutti gli archivi che ne sono sprovvisti;
  • -v, --verify [ BID list ]: verifica l'integrità degli archivi di backup usando il file di controllo precedentemente generato; se nessun BID (backup ID) è specificato, tutti gli archivi esistenti sono controllati; se il file di controllo non è stato generato, è verificata solo l'esistenza del file e l'integrità del file secondo quanto previsto dal programma di archiviazione utilizzato;
  • -x, --extract capacity max-free BID-list: organizza gli archivi dei backup specificati in modo da poter essere a loro volta archiviati su supporti rimovibili, come i CD-ROM, di limitata capacità (pari a capacity MByte), lasciando su ciascuno di essi al massimo max-free MByte liberi; il parametro BID-list può anche essere specificato attraverso wildcards come, ad esempio, 1 '2*'; il comando genera un elenco di directory numerate ciascuna delle quali rappresenta il supporto su cui dovrà essere trasferito; la procedura preserva l'ordine degli archivi di backup e gli archivi le cui dimensioni eccedono quella del supporto sono suddivisi in più file con un numero seriale aggiunto al nome di ciascuno di essi. Le operazioni sono interattive: basta eseguire il comando per capire le attività eseguite ed è possibile interromperlo qualora esse fossero difformi da quanto desiderato.

Utilizzo

Backup manuale

L'uso di backup2l è piuttosto semplice. Come precedentemente accennato, una volta correttamente completata la configurazione, il backup è eseguito automaticamente su base giornaliera qualora il sistema e il suo scheduler siano operativi all'orario previsto. Ciò non di meno, è possibile avviare backup2l manualmente, ad esempio nel caso in cui sia avvenuta, nel corso della stessa giornata, un'importante variazione ai dati successivamente all'attivazione automatica della procedura; in tal caso, il comando da impartire è:

backup2l -b 

È bene ricordare che tale comando di norma è utilizzato con l'utenza di root (ad esempio, quando è avviato dal scheduler di sistema).

Ripristino

Il comando di ripristino deve essere necessariamente impartito manualmente generalmente con utenza di 'root': fortunatamente, è un'operazione molto semplice sebbene vada eseguita con alcune cautele. In particolare, come già richiamato nella spiegazione del comando -restore, è bene precisare che backup2l per default ripristina i file provenienti dagli archivi nella directory corrente, cioè quella da cui è eseguito e visualizzabile con il comando pwd; come abbiamo prima citato, è possibile, ma è sconsigliato, ripristinare i file del backup nelle loro path originali eseguendo il comando "cd /" prima del comando backup2l -r. Lo stesso autore del programma, Gundolf Kiefer, da me contattato in merito a tale argomento, ha così risposto:

«You can invoke backup2l -r ... from / to get the files where they were, but that is not recommended as you may accidently overwrite important files by older versions. It is wiser to restore into a temporary directory first and then move the files wherever you want»

«È possibile richiamare backup2l-r ... da / [directory radice, ndr] per riportare i file dove erano, ma non è raccomandato in quanto potrebbe accidentalmente sovrascrivere file importanti con versioni più vecchie. È più saggio eseguire il ripristino prima in una directory temporanea e poi spostare i file dove desiderato»

Volendo, quindi, seguire le cautele sopra indicate, prima di eseguire un ripristino, è preferibile:

  1. creare una directory temporanea per l'estrazione del backup
  2. portarsi al suo interno
  3. eseguire il comando di ripristino

Nell'esempio sotto indicato, a partire dal backup con BID (backup ID) pari a all.153, è ripristinato solo il file /home/html/user/prova.txt perché espressamente specificato:

# mkdir /home/user/backupx
# cd /home/user/backupx
# backup2l -t all.153 -r /home/html/user/prova.txt

Alcune osservazioni:

  • qualora non fosse stato specificato uno specifico backup attraverso l'opzione -t BID, sarebbe stato estratto il contenuto dell'ultimo ad essere stato eseguito;
  • qualora non fosse stato specificato il nome di uno specifico file, sarebbe stato estratto l'intero contenuto del backup

Una volta completato il ripristino del 'file' specificato, esso comparirà nella cartella temporanea:

/home/user/backupx/home/html/user/prova.txt

dove /home/user/backupx è il path della directory temporanea.

Conclusioni

backup2l è un ottimo strumento, al contempo semplice e potente.

È particolarmente indicato per il backup dei dati di un'installazione di tipo server, ma è comunque possibile utilizzarlo con soddisfazione anche in un'installazione di tipo domestica.

È bene ricordare, comunque, che il programma esegue dei backup differenziali gerarchici e, quindi, che il ripristino, generalmente, coinvolge non uno, ma più archivi, cioè è necessario risalire nella gerarchia dei backup differenziali qualora il file ricercato non abbia subito recenti modifiche: pertanto, per il buon esito del ripristino, è indispensabile non modificare manualmente gli archivi generati dal programma per non interferire con l'algoritmo di rotazione previsto dallo stesso.

Riferimenti




Guida scritta da: Mm-barabba Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:

Spoon 00:05, 23 giu 2017 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized