Je cherche à faire un script de sauvegarde qui gère l'incrémentiel. Mon script est pratiquement fait, me reste plus qu'un petit soucis, j'aimerrai pouvoir sauvegarder dans les incrémentielles seulement les fichiers qui ont changés depuis la dernière sauvegarde totale.
J'ai une fonctione qui détermine le dernier jour ouvré (qui fonctionne très bien). Et suivant ce jour ouvré, on détermine si il y a eu une sauvegarde, si il y en as pas, la sauvegarde du jour actuel sera totale, si il y en as une, la sauvegarde sera incrémentielle.
Pour celà, j'utilise la commande tar ainsi que quelques manipulation de dates.
Ce que je nomme synchro, c'est la réplication à l'identique des données d'une autre machine sur le réseau. Je fais cette synchro via rsync (avec tunneling smb par point de montage ... mais c'est un tout autre script qui fonctionne parfaitement). Dans le dossier des synchro, j'ai des sous dossiers correspondant aux machines, et dans ces sous dossiers, j'ai de nouveau des dossiers correspondants aux partages smb.
Voici mon code :
#!/bin/sh
date_current=`date "+%Y_%m_%d"`
dir_synchro='/home/synchro'
dir_backup='/home/backup'
iteration=1
while [ `date --date "$iteration days ago" "+%w"` -eq 0 ] || [ `date --date "$iteration days ago" "+%w"` -eq 6 ]
do
iteration=$[$iteration+1]
done
date_last_humanoid=`date --date "$iteration days ago" "+%Y/%m/%d"`
date_last=`date --date "$iteration days ago" "+%Y_%m_%d"`
for cat in `ls $dir_synchro | tr -s ' ' '!'`
do
cat=`echo $cat | tr -s '!' ' '`
for scat in `ls $dir_synchro/$cat | tr -s ' ' '!'`
do
scat=`echo $scat | tr -s '!' ' '`
mkdir $dir_backup/$cat/$scat -p
if [ ! -e $dir_backup/$cat/$scat/$date_last.tar.gz ]
then
echo "La sauvegarde précédente au $date_last n'existe pas ! La sauvegarde sera complète ..."
tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current.tar.gz" --gzip "$dir_synchro/$cat/$scat"
else
echo "La sauvegarde précédente au $date_last existe déjà ! La sauvegarde sera incrémentielle ..."
tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current.tar.gz" --gzip "$dir_synchro/$cat/$scat" --after-date $date_last_humanoid
fi
done
done
Ce qui ne fonctionne pas, c'est le " --after-date " car il se base sur la date de création du fichier et non pas de sa dernière sauvegarde ... j'ai la possibilité de modifier la date du fichier lors de la sauvegarde totale pour permettre la détection incrémentielles futurs ... mais ce n'est pas du tout jolis avec les synchro car la date est importante (surtout pour réduire la charge réseau).
Comment pourrai je faire pour tenir compte des modifications de fichiers depuis la dernière sauvegarde ?
Merci d'avance.
# tar -g
Posté par Xavier . Évalué à 2.
tar -g permet de faire cela.
Il faut faire un full avec tar -g fichier_index et ensuite, a chaque fois que tu fais ton tar -g fichier_index il te fera un fichier avec seulement le diff depuis le full.
Quand tu veux refaire un full, tu écrases le fichier index.
Voici un peit script de backup, il n'est pas parfait mais marche bien.
#!/bin/bash
host=ip_srv_backup
user=user_remote
bckrepo=/root/backup
volumes=$bckrepo/volumes
destdir=backup
bckdate=$(date +%Y%m%d)
repincr=$(date +%w_%a)
bckday=0
for b in `cat $volumes`
do
filename=${b##*/}
if [ $bckday -ne "0" ]; then
dirbackup=$destdir/$repincr
tar zlc $b -g $bckrepo/bckidx-$filename | ssh $user@$host "cat > $dirbackup/$filename.tgz"
else
rm $bckrepo/bckidx-$filename
dirbackup=$destdir/full
tar zlc $b -g $bckrepo/bckidx-$filename | ssh $user@$host "cat > $dirbackup/$bckdate-$filename.tgz"
fi
done
[^] # Re: tar -g
Posté par un compte supprimé . Évalué à 1.
Je pense comprendre, je vais adapter mon script via l'utilisation d'un fichier index.
Merci pour tout, je test ça de suite.
# Backup-manager
Posté par godzom . Évalué à 3.
http://www.backup-manager.org/documentation/user-guide-stabl(...)
[^] # Re: Backup-manager
Posté par un compte supprimé . Évalué à 2.
#!/bin/sh
date_current=`date "+%Y_%m_%d"`
dir_synchro='/home/synchro'
dir_backup='/home/backup'
function _full(){
tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current-full.tar.gz" --gzip "$dir_synchro/$cat/$scat" -g "$dir_backup/$cat/$scat/index"
}
function _incremental(){
tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current-incremental.tar.gz" --gzip "$dir_synchro/$cat/$scat" -g "$dir_backup/$cat/$scat/index"
}
function _added(){
tar -c --atime-preserve -f "$dir_backup/$cat/$scat/$date_current-full-added.tar.gz" --gzip "$dir_synchro/$cat/$scat"
}
for cat in `ls "$dir_synchro" | tr -s ' ' '!'`
do
cat=`echo "$cat" | tr -s '!' ' '`
for scat in `ls "$dir_synchro/$cat" | tr -s ' ' '!'`
do
scat=`echo "$scat" | tr -s '!' ' '`
mkdir "$dir_backup/$cat/$scat" -p
if [ `ls "$dir_backup/$cat/$scat/" | grep '.tar.gz' | grep -v 'added' | grep "full\|incremental" | wc -l` -eq 0 ]
then
_full
else
if [ ! -e "$dir_backup/$cat/$scat/$date_current-full.tar.gz" ] && [ ! -e "$dir_backup/$cat/$scat/$date_current-incremental.tar.gz" ]
then
if [ `date "+%w"` -eq 1 ]
then
_full
else
_incremental
fi
else
if [ -e "$dir_backup/$cat/$scat/$date_current-full.tar.gz" ] && [ ! -e "$dir_backup/$cat/$scat/$date_current-incremental.tar.gz" ]
then
_incremental
else
_added
fi
fi
fi
done
done
[^] # Re: Backup-manager
Posté par un compte supprimé . Évalué à 2.
function _purge(){
for date_archive in `ls "$dir_backup/$cat/$scat/" | grep "full\|incremental" | grep '.tar.gz' | cut -d'-' -f1`
do
date_archive_humanoid=$date_archive
date_archive=`echo $date_archive | tr -d '_'`
if [ $date_archive -lt `date --date "$day_retention days ago" "+%Y%m%d"` ]
then
echo "Suppression des anciennes archives du $date_archive_humanoid ..."
rm "$dir_backup/$cat/$scat/$date_archive_humanoid-"*
fi
done
}
# utiliser --newer-mtime
Posté par Olivier Jeannet . Évalué à 2.
Je ne sais plus comment j'ai trouvé (mon man ne le mentionne pas), il faut utiliser l'option --newer-mtime.
Je fais comme ça pour gérér des sauvegardes différentielles (tu parles d'incrémentales mais tu te trompes je pense, en tous cas si on en croit Wikipedia http://fr.wikipedia.org/wiki/Sauvegarde#Sauvegarde_diff.C3.A(...) ) :
La sauvegarde totale :
LC_ALL=C date -R >perso/.lastbackup.date
tar cfj $MYBACKUP perso
La sauvegarde différentielle :
LC_ALL=C tar --newer-mtime "`cat perso/.lastbackup.date`" -cjf $MYBACKUP perso
Noter l'utilisation de LC_ALL=C pour gérer les dates sans ambiguïté (on peut aussi choisir de mettre la date au format ISO, je pense, à la place).
[^] # Re: utiliser --newer-mtime
Posté par un compte supprimé . Évalué à 1.
Le man de la commande tar parle de "-G, --incremental " et l'explication de Wikipedia explique bien la méthode utilisée par l'index de tar comme étant une sauvegarde incrémentielle.
Ta méthode n'utilise pas de fichier index, je pense alors que ta méthode peut être différentielle.
# dar
Posté par mathieu mathieu (site web personnel) . Évalué à 1.
http://dar.linux.free.fr/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.