lunedì 31 dicembre 2007

rdiff-backup per i backups incrementali di Linux in remoto.

Maria Susana Diaz | 08:33 |
Il backup è l'operazione di salvataggio dati da un supporto di memorizzazione di massa ad un altro. Quando, in seguito ad errori umani o guasti hardware, i dati presenti sul primo supporto non sono accessibili, il recupero ( restore ) dei dati salvati ( backup ) permette di ricostruire la situazione iniziale

Il backup è quello che tutti promettono di fare, ma per il quale non riescono mai a trovare il tempo. Per questo sono in cosi pochi a conoscere cosa vuol dire restore.  

Tabella comparativa.

dump rsync tob rdiff-backup
Versioni vecchie di un file No
Accesso diretto al backup No Sì (full), No (inc)
Differenziale/incrementale
No
Economia di banda No
Spazio necessario n*F 1*F
1*F + n*I.gz
Nello spazio necessario si indica con F la dimensione dell'archivio full, con I la dimensione dell'incrementale, con .gz il tipo di compressione e con n il numero di copie che si decide di tenere. 



rdiff-backup
Si installa il pacchetto Debian rdiff-backup. Un primo script di backup di una directory verso un host remoto potrebbe essere questo: 


rdiff-backup --force \
--preserve-numerical-ids \
--exclude /home/crypt \
/home \
epidauro.rigacci.net::/media/hdc1/backup/paros

Nella directory destinazione viene creata una gerarchia di directory uguale alla sorgente, con tutti i file nella loro ultima versione. Per escludere qualcosa dalla directory sorgente vedere anche l'opzione –exclude-filelist

Se rdiff-backup viene eseguito nuovamente si ottiene un backup incrementale. Le vecchie copie dei file modificati vengono salvati nella directory rdiff-backup-data (come file diff oppure snapshot, se sono cambiati di poco o molto). Altri dati vengono salvati per sapere quali file o directory sono stati creati o cancellati. 

Per vedere quali backup incrementali sono stati effettuati: 


rdiff-backup -l epidauro.rigacci.net::/media/hdc1/backup/paros
Found 3 increments:
increments.2006-08-25T18:55:44+02:00.dir   Fri Aug 25 18:55:44 2006
increments.2006-08-26T12:51:09+02:00.dir   Sat Aug 26 12:51:09 2006
increments.2006-09-20T19:54:15+02:00.dir   Wed Sep 20 19:54:15 2006
Current mirror: Fri Oct 20 15:16:26 2006

Per vedere quali vecchie versioni di un file esistono (attenzione: il timestamp mostrato è il momento in cui è stato fatto il backup, non il timestamp del file salvato): 


rdiff-backup -l epidauro.rigacci.net::/media/hdc1/backup/paros/dokuwiki/data/pages/start.txt
Found 2 increments:
start.txt.2006-08-26T12:51:09+02:00.diff.
 
Nello spazio necessario si indica con F la dimensione dell'archivio full, con I la dimensione dell'incrementale, con .gz il tipo di compressione e con n il numero di copie che si decide di tenere.

rdiff-backup

Si installa il pacchetto Debian rdiff-backup. Un primo script di backup di una directory verso un host remoto potrebbe essere questo: 


rdiff-backup --force \
--preserve-numerical-ids \
--exclude /home/crypt \
/home \
epidauro.rigacci.net::/media/hdc1/backup/paros
Nella directory destinazione viene creata una gerarchia di directory uguale alla sorgente, con tutti i file nella loro ultima versione. Per escludere qualcosa dalla directory sorgente vedere anche l'opzione –exclude-filelist

Se rdiff-backup viene eseguito nuovamente si ottiene un backup incrementale. Le vecchie copie dei file modificati vengono salvati nella directory rdiff-backup-data (come file diff oppure snapshot, se sono cambiati di poco o molto). Altri dati vengono salvati per sapere quali file o directory sono stati creati o cancellati. 


gz   Sat Aug 26 12:51:09 2006
start.txt.2006-09-20T19:54:15+02:00.diff.gz   Wed Sep 20 19:54:15 2006
Current mirror: Fri Oct 20 15:16:26 2006

Per recuperare una vecchia copia di un file e salvarla in una directory a scelta (si specifica il timestamp di un backup incrementale): 


rdiff-backup --restore-as-of 2006-09-20T19:54:15+02:00 \
epidauro.rigacci.net::/media/hdc1/backup/paros/dokuwiki/data/pages/start.txt \
./tmp/start.txt

Per eliminare le vecchie copie incrementali (es. oltre i 20 giorni):
rdiff-backup --remove-older-than 20D epidauro.rigacci.net::/media/hdc1/backup/paros

dump/restore

Come fare il restore interattivo e selettivo di una directory (pippodir) dentro un dump: 


restore -i -f /backup/argo/2007-01-26_md3.dump
restore > cd directory
restore > ls
restore > add pippodir
restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] y
restore > quit

Baubackup

The program is writter in Perl and you can download it here: baubackup.tar.gz

Based on the same principle of FauBackup: make asnapshot backup to a filesystem, then make incremental snapshots where unchanged files are only hard-linked with the existing version of the file. 

This program will address the major problem of FauBackup: speed. Faubackup first of all make a full copy of every file, then it removes unchanged ones making hard links. This is undesiderable for remote backups. 

Here we use cp -a to make a new snapshot based on the last one, then we use the rsyncesystem. program to syncronize the snapshot with the actual fil

Usage

Usage: baubackup machine:/remote/dir
baubackup --clean

The machine can be the name of a remote machine or localhost, for backing-up a locally mounted filesystem. The target directory is specified into the configuration file.
With the --clean option, all the obsolete backups will be removed from the target directory.

Configuration

Configuration file is saved into /etc/baubackup:
# Configuration for baubackup
package BAUBACKUP;

# default directory for backups
# MACHINE is replaced by the machines hostname
# DIR is replaced by the source directory, with '/' made '-'
#$backup        = "/backup/MACHINE/DIR"; # <-- data-blogger-escaped-directory="" data-blogger-escaped-host="" data-blogger-escaped-one="" data-blogger-escaped-per="" data-blogger-escaped-span="" data-blogger-escaped-to="" data-blogger-escaped-use="">
$backup         = "/backup/MACHINE:DIR";

# keep old backups for that long:
# (0 means: only keep a backup for current year/month/etc.,
# -1 means: don't store backups for that year/month/etc.)
$keepyears      = 2;
$keepmonths     = 2;
$keepweeks      = 2;
$keepdays       = 5;

# make perl happy
1;
The destination directory prefix is declared with the variable $backup into the configuration file. The subdirectory name is composed also by the name of the host and the source directory. Slashes in the directory are replaced with dashes, so - in the above example - a backup of somehost:/home/niccolo will be stored into a local directory named /backup/somehost:home-niccolo/. Each snapshot will be stored into a different subdirectory named something like 2007-05-24@10:15:39.
If the hostname is different from localhost, an ssh connection is attempted. Prepare the required rsa keys infrastructure if you want automated backup without password requests.

Exclude files.

If you want some files to be excluded from the backup, create a file called exclude and save it into the $backup directory. For the syntax of this file see the --exclude-from option into the rsync(1) man page.

Se ti è piaciuto l'articolo, iscriviti al feed per tenerti sempre aggiornato sui nuovi contenuti del blog:

Trovato questo articolo interessante? Condividilo sulla tua rete di contatti in Twitter, sulla tua bacheca su Facebook, in Linkedin, Instagram o Pinterest. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!

LINKEDIN