Août 12 2010

Sauvegarder un répertoire si modifié

Publié par à 10:33 sous Linux,Sauvegarde

J’utilise ce script afin de garder une copie locale de mon répertoire tftp sur Linux. Il conserve l’archive seulement si des modifications ont été apportées. Il me permet de restaurer plus rapidement qu’un logiciel de sauvegarde traditionnel, qui peut être utilisé en complément pour sécuriser les sauvegardes ailleurs.
Le script peut être employé sur tout autre répertoire évidemment. Voici un exemple de fichiers générés sur un serveur TFTP:
 

[root@serveur_tftp backup]$ ls -l
-rw-r----- 1 tftp tftp   124200 May  1 04:04 tftp-20100501.tgz
-rw-r----- 1 tftp tftp  2108159 May 13 04:04 tftp-20100513.tgz
-rw-r----- 1 tftp tftp  2108165 May 18 04:04 tftp-20100518.tgz
-rw-r----- 1 tftp tftp  2108442 May 20 04:04 tftp-20100520.tgz
-rw-r----- 1 tftp tftp  2108545 Jun  1 04:04 tftp-20100601.tgz
-rw-r----- 1 tftp tftp   126382 Jun  3 04:04 tftp-20100603.tgz
-rw-r----- 1 tftp tftp   126426 Aug  5 04:04 tftp-20100805.tgz
-rw-r----- 1 tftp tftp   126485 Aug  7 04:04 tftp-20100807.tgz
-rw-r----- 1 tftp tftp   126486 Aug 11 04:04 tftp-20100811.tgz

 
Créez une tâche sous cron pour l’automatiser complètement chaque jour

#!/bin/bash

# Changer ces paramètres selon ses besoins
dir_to_backup=/tftpboot
# Noms du fichier et chemin du répertoire de sauvegarde
backup_dir=/tmp/backup
backup_file=tftp
# Nom du fichier d'archive zippé en sortie
of=$backup_dir/$backup_file-$(date +%Y%m%d).tgz
# propriétaire et groupe du fichier de sauvegarde
owner=tftp
gowner=tftp
tmpfile=/tmp/$backup_file.tar
# Nombre de versions de sauvegarde à conserver
backup_number=24

# Sauvegarde
cd $dir_to_backup
# Les commandes tar et zip ont été séparées
# pour créer des fichiers au checksum identique
# au cas où auncun changement n'a eu lieu
tar cf $tmpfile .
# L'archive est supprimée si le checksum est identique à celui du dernier fichier
# On ne sauvegarde pas le timestamp pour garder un checksum consistant sur des jours différents
gzip -cn $tmpfile > $of
rm -f $tmpfile
chmod 640 $of
chown $owner:$gowner $of

# La nouvelle archive est effacée si le checksum de la dernière sauvegarde est identique
[ `ls -1t $backup_dir/$backup_file-*.tgz \
  | head -2 \
  | xargs md5sum \
  | awk '{print $1}' \
  | uniq \
  | wc -l` -eq 1 ] \
&& rm -f $of

# Supprime les anciennes versions
# Conserve les 30 dernières sauvegardes
ls -1rt $backup_dir/$backup_file-*.tgz \
  | head -n -$backup_number \
  | xargs rm -f


Une solution alternative consisterait à récupérer la date de la dernière sauvegarde, chercher dans le répertoire s’il existe des fichiers modifiés depuis, et ne créer le zip que dans ce cas précis.

Le script nécessite des ajustements mineurs pour s’exécuter sur MacOS sur lequel la commande checksum md5sum est remplacée par md5. md5 de MacOS retourne un output différent.


No responses yet

Comments RSS

Leave a Reply