“dar” permet d'effectuer des backups “full” et “différentiel/incremental” (avec catalogue, etc…). Un peu a la façon de “tar”, mais en beaucoup plus évolué.
~~READMORE~~
Debian Squeeze:
# aptitude update # aptitude install dar
Voila.
On va d'abord étudier des commandes “simples”, afin de ce faire la main…
Soit un répertoire download
dans ma home /home/thierry
.
Backup (full) de ce répertoire:
dar -c full1 -R download/
-c “full1” | nom du backup (mais pas le nom final!) |
-R “download/” | “Root” du backup |
On ne backup qu'a partir d'un et un seul (!) “Root”.
Si vous voulez quelque chose de plus selectif, revenez vers “tar”.
Donc, revenons a la commande:
$ dar -c full1 -R download/ -------------------------------------------- 119 inode(s) saved with 0 hard link(s) recorded 0 inode(s) changed at the moment of the backup 0 inode(s) not saved (no inode/file change) 0 inode(s) failed to save (filesystem error) 0 inode(s) ignored (excluded by filters) 0 inode(s) recorded as deleted from reference backup -------------------------------------------- Total number of inodes considered: 119 -------------------------------------------- EA saved for 0 inode(s) --------------------------------------------
Ce qui créé un fichier: full1.1.dar
C'est ainsi que Dar
créé les fichiers a partir du nom fournit:
<nom>.<incremental_number>.dar
Le fichier fait 22M alors que le contenu du répertoire aussi:
$ du -sxh download/ 23M download/ $ ls full1.1.dar -lh -rw-r--r-- 1 thierry thierry 22M 2 mars 22:11 full1.1.dar
On va recommencer en compressant avec “zip”.
$ dar -w -c full1 -R download/ -z
Resultat:
$ ls full1.1.dar -lh -rw-r--r-- 1 thierry thierry 17M 2 mars 22:25 full1.1.dar
-w | Ecraser sans avertissement (un peu soualant) |
-z | Compresser en “zip” (bzip and lzo are also available) |
Mais en fait, on ne souhaite pas compresser certains fichiers qui sont déjà compressé !
$ dar -w -c full1 -R download/ -z -Z "*.zip" -Z "*.gz"
-Z “*.zip” | Exclure le fichier terminer par “.zip” |
Lister le contenu de l'archive.
$ dar -l full1
Tester l'archive.
$ dar -t full1
Comparer l'archive avec les fichiers en présence.
$ dar -d full1 -R download/
Bases:
-c <name> | nom de base pour former le (ou les) fichier |
-R <Root> | Point de départ (unique) du backup, ainsi nommé: Root |
Compressions :
-z | Compression en zip |
-y | Compression en bzip |
Filtres :
-Z <file_pattern> | Exclure fichiers de la compression |
-X <file_pattern> | Exclure fichiers |
-P <dir_pattern> | Exclure les répertoires |
-D | Pour le répertoire exclu, conserver les attributs du répertoire (sans contenu donc) |
Bavards ou pas :
-w | Traitement sans “warning” (et sans interraction avec l'utilisateur) |
-v | mode bavard |
-O | ignorer qu'on n'est pas “root” |
On peut découper les backups en plusieurs fichiers.
-S <taille> | Decoupera en fichier de max <taille> |
Toujours avec notre (unique) fichier full1.1.dar
.
On va dans un répertoire pour nos tests, par exemple:
$ mkdir -p tmp/undar $ cd tmp/undar
Bon, on decompresse (dans le répertoire courant!) :
$ dar -O -x ~/full1
-O | parce que dar est trop bavard |
-x <name> | nom de base de l'ensemble de fichier a décompresser |
$ dar -w -O -x ~/full1 -g "day_ten.pdf" -g "day_eleven.pdf"
Pour voir ce qui est fait, on serait aviser de rajouter: -v
.
-g <fichier> | nom (chemin relatif complet) du fichier a restorer |
On peut ajouter -r
, qui ne restore que si le fichier est plus recent.
-r | seulement si plus récent |
ou Incremental ?
Bref, voila:
$ dar -v -c diff1 -A full1 -R download/ -z Extracting contents of the archive... Adding file to archive: /home/thierry/download/old.tar.gz Adding file to archive: /home/thierry/download/new.tar.gz Adding reference to files that have been destroyed since reference backup... Writing archive contents...
En fait, old.tar.gz
a juste changé de date (avec touch
).
new.tar.gz
est un nouveau fichier.
-A <name> | Fichier de référence |
S'il n'y a pas de référence
, il n'y a pas de Differentiel.
Et voila:
$ ls -lh diff1* -rw-r--r-- 1 thierry thierry 1,7M 2 mars 23:46 diff1.1.dar
$ cd tmp/undar <effacer le contenu pour nos test avec un:>$ rm -Rf *
Et enfin:
$ dar -v -w -O -x ~/diff1 Extracting contents of the archive... Restoring file: /home/thierry/tmp/undar/old.tar.gz Restoring file: /home/thierry/tmp/undar/new.tar.gz
le differentiel ne contient que les derniers fichiers !!!! |
Pour restore l'ensemble, il faut restorer d'abord le FULL
puis les DIFF
dans l'ordre chronologique !
Dans notre cas:
$ dar -r -v -w -O -x ~/full1
Et voila pour commencer.
Les backups differentiels se perpetue comme cela:
dar -v -c <current_diff> -A <previous_diff> -R download/
Exemple:
$ dar -v -c diff2 -A diff1 -R download/ -z $ dar -v -c diff3 -A diff2 -R download/ -z $ dar -v -c diff4 -A diff3 -R download/ -z etc...
dar
conserve l'effacement/modification des fichiers…
Mais pour cela, il convient d'effectuer les restorations de la façon suivante:
A la fin: on retrouve un etat exact du dernier backup.
On va sauvegarder tout un systeme Debian… rien de trés compliqué.
# dar --noconf \ -Q \ -w \ -R "/" \ -z6 \ -Z "*.zip" \ -Z "*.gz" \ -D \ -P proc \ -P dev \ -P sys \ -P mnt \ -P tmp \ -K "bf:clef_secrete" \ -c /mnt/nfs_share/myfirst-full-backup
Où:
En tout cas: il faut exclure le fichier final du backup …
A la fin, on se retrouve, par exemple, avec un fichier comme ça:
# ls /mnt/nfs_share/ -lh total 584M -rw-r--r-- 1 root root 583M 13 juillet 11:25 myfirst-full-backup.1.dar
(facultatif)
# dar -t /mnt/nfs_share/myfirst-full-backup -K "bf:clef_secrete" Warning, the archive myfirst-full-backup has been encrypted. A wrong key is not possible to detect, it would cause DAR to report the archive as corrupted ... 0 inode(s) with error ...
Ne pas oublier la “clef” si on en a utilisé une.
Quelques temps (heures ou jours?) plus tard, on fait un nouveau backup, mais differentiel.
On reprend les même options, sauf les dernieres qu'on adapte…
# dar --noconf \ -Q \ -w \ -R "/" \ ... snip ... -c /mnt/nfs_share/myfirst-diff-backup-1 \ -J "bf:clef_secrete" \ -A /mnt/nfs_share/myfirst-full-backup
On ajoute “-J” (pour la clef) et “-A” pour spécifier le fichier de reference pour le differentiel.
A la fin:
# ls /mnt/nfs_share/ -lrth total 584M -rw-r--r-- 1 root root 583M 13 juillet 11:25 myfirst-full-backup.1.dar -rw-r--r-- 1 root root 347K 13 juillet 11:33 myfirst-diff-backup-1.1.dar
Encore un autre differentiel, et encore et encore…
... -c /mnt/nfs_share/myfirst-diff-backup-2 ...
Encore…
... -c /mnt/nfs_share/myfirst-diff-backup-3 ...
Etc…
# ls /mnt/nfs_share/ -lrth total 585M -rw-r--r-- 1 root root 583M 13 juillet 11:25 myfirst-full-backup.1.dar -rw-r--r-- 1 root root 347K 13 juillet 11:33 myfirst-diff-backup-1.1.dar -rw-r--r-- 1 root root 345K 13 juillet 11:39 myfirst-diff-backup-2.1.dar -rw-r--r-- 1 root root 340K 13 juillet 11:39 myfirst-diff-backup-3.1.dar -rw-r--r-- 1 root root 346K 13 juillet 11:39 myfirst-diff-backup-4.1.dar
Quelques warnings peuvent apparaitre si des fichiers (log ou base de données) changent pendant les traitements !
Ce n'est pas dramatique, sauf peut être pour les bases de données, qu'il faudrait “dumper” avant backup.
On utilise les mêmes fichiers, mais pour la restoration sur un autre serveur.
Les fichiers a restorer sont dans /mnt/share4backup/my-server
, mais peu importe.
Comme je n'ai pas envie de tout casser, je vais faire la restoration dans un répertoire quelconque… comme:
# cd /tmp # mkdir restore # cd restore
Et la dedans, je restore d'abord le full
:
# dar -v \ -w \ -K "bf:clef_secrete" \ -x /mnt/share4backup/my-server/myfirst-full-backup
En dehors de “-x …” , le reste est facultatif ou depend des circonstances.
On va ensuite restorer a partir des differentiels, si existe, ce qui notre cas:
... -wa \ -x /mnt/share4backup/my-server/myfirst-diff-backup-1
... -wa \ -x /mnt/share4backup/my-server/myfirst-diff-backup-2 ... -wa \ -x /mnt/share4backup/my-server/myfirst-diff-backup-3
... -wa \ -x /mnt/share4backup/my-server/myfirst-diff-backup-4
-wa | pour ne pas avoir de confirmation lors de la suppression d'un fichier disparu … |
Et voila.
Notre répertoire courant contient un etat “exact” du dernier backup effectué.
Si on ne veut extraire qu'une partie de l'arborescence, il suffit d'ajouter par exemple:
... -g "etc" -g "var/log"
Ce qui ne restorera que les contenus des répertoires “etc” et “var/log” . (avec respect de l'arborescence, of course)
On va utiliser un fichier CATALOG externe, pour simplifier les backups.
A chaque etape, on créera le fichier CATALOG: Pour les backups differentiels, on aura besoin de ne faire référence qu'a ce catalogue.
Exemple:
$ dar -c full1 -R download/ -z $ dar -C CATALOG -A full1
Et pour les incrémentales:
$ dar -c diff1 -A CATALOG -R download/ -z $ dar -C CATALOG -A diff1
Et ainsi de suite:
$ dar -c diff2 -A CATALOG -R download/ -z $ dar -C CATALOG -A diff2
Nul besoin de connaitre le nom du fichier précedent: il suffit d'avoir le “catalog” a jour.
Mise en place avec 3 fichiers, dont 2 fichiers de conf.
Les 2 fichiers de conf:
Contenu de dar_backup.conf
( a adapter ) :
BACKUP_DIR="/mnt/backups" CATALOG_DIR=/var/backups STATUS_DIR=${CATALOG_DIR} NAME="mail-local-eez" DAR_OPTIONS="-B dar_backup_options.conf" #DISABLE_NICE=1 # ---------- Root Readable Only ------------- #SECRET_KEY="bf:xxxxxxxxx" # -------------------------------------------
Qui dit en gros:
BACKUP_DIR
CATALOG_DIR
STATUS_DIR
NAME
dar
sont dans DAR_OPTIONS
Contenu de dar_backup_options.conf
( a adapter ) :
-w --slice 2G -R "/" -z6 -Z "*.zip" -Z "*.gz" -D -P proc -P dev -P sys -P mnt -P tmp
Qui dit en trés gros:
Le script:
Pour mon usage, les 2 fichiers de conf vont dans:
/usr/local/etc
Et le script dans:
/usr/local/bin
Pour l'executer :
# cd /usr/local/etc
Et taper:
# /usr/local/bin/dar_backup.sh
Que ce passe-t'il ?
Un “full” backup est executé la 1er fois, ou chaque dimanche.
Les backups sont stockés sur un partage, et ils n'ont plus besoin d'être accessible.
L'essentiel (pour enchainer les backups), le catalogue et le status de la conf, est maintenu en local dans /var/backups
.
J'active l'execution quotidienne dans le cron :
# crontal -l 20 4 * * * cd /usr/local/etc; /usr/local/bin/dar_backup.sh >/dev/null
Pour être complet: un autre scripte , sur une autre machine, va récuperer les backups, les chiffrer avec “gpg” , puis les archiver sur… dl.free.fr avec dlfix
D'où la limite de 2G