Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/06/2009, à 15:51

Laserpithium

Voici un script pour sauvegardes automatiques

Aaaaah, les sauvegardes !!!

Tout le monde est d'accord pour dire que faire des sauvegardes est nécessaire, personne ne les fait et au final tout le monde s'en mord les doigts le jour ou par malheur, le disque dur crâme. Moi le premier.

Amis Linuxiens, agissons ! Tous ensemble, disons non aux pertes de données pour cause de flemme de sauvegarder !

Voici donc ma contribution à la résolution de ce problème: un script permettant de faire des sauvegardes. Le problème majeur restant l'interface chaise/clavier, ce script permet de faire des sauvegardes automatiquement (il suffit de le mettre dans la crontab).
Ce script fonctionne de 2 manières différentes:

1) En mode manuel. On le lance sans argument ("sauvegardeSysteme.sh"), il sauvegarde votre home sur un disque dur externe. Si le disque n'est pas branché, il vous jette. Un fichier de log est mis à jour.

2) En mode automatique, typiquement appelé depuis la crontab, avec le paramètre "auto" ("sauvegardeSysteme.sh auto").
Dans ce mode, le script effectue 2 types de sauvegardes:
- Une sauvegarde journalière (il synchronise le home si la dernière synchro date de plus de 24h).
- Une sauvegarde mensuelle (il synchronise le home dans un second dossier tout les mois). Le but de la sauvegarde mensuelle est d'éviter de perdre un fichier que l'on a effacé par erreur. C'est un bonus.
Dans tous les cas, un fichier de log est mis à jour.

Voici le script en question:

 #!/bin/bash
REPERTOIRE_SOURCE="/home/"
REPERTOIRE_DESTINATION="/media/sauvegarde/home/"
REPERTOIRE_DESTINATION_LONG="/media/sauvegarde/homeLongTerme/"
LOG="/media/sauvegarde/home/sauvegarde.log"
LOGLONG="/media/sauvegarde/homeLongTerme/sauvegarde.log"
ERREUR="/media/sauvegarde/home/error.log"
ERREURLONG="/media/sauvegarde/homeLongTerme/error.log"


# Détecter la présence du volume de destination et interrompre l'opération si nécessaire, avec message d'erreur en cas de lancement manuel
if [ ! -e "$REPERTOIRE_DESTINATION" ]
then
	if [ -z $1 ]; then echo "Attention, le disque de sauvegarde n'est pas présent"
	fi
exit 0
fi

if [ -z $1 ]
#Si mode manuel, on regarde le temps depuis la dernière sauvegarde et on propose une sauvegarde
then
	#Recupération de la date de la dernière sauvegarde, en secondes Unix
	let "lastSauvegarde = `tail -n 1 $LOG`"
	let "delai = `date +%s` - lastSauvegarde"
	let "delaiJour = delai/86400"
	let "delaiHeure = (delai - delaiJour*86400)/3600"
	echo "La dernière sauvegarde a été effectuée il y a $delaiJour jours $delaiHeure heures"
	read -p 'Effectuer une nouvelle sauvegarde o/n ? : ' answer
	if [ $answer = "o" ] || [ $answer = "O" ]
	then
		echo "Sauvegarde en cours..."
		#Sauvegarde
		rsync -a --copy-links --stats --progress --delete --filter "- .thumbnails/" --filter "- .Trash/" --filter "- *.tmp" --filter "- *.iso" --filter "- lost+found/" --filter "- .cache/" --filter "- .CACHE" --filter "- Cache/" --filter "- *.log" "$REPERTOIRE_SOURCE" "$REPERTOIRE_DESTINATION"	
		#Mise à jour du fichier de log court terme
		echo "" >> $LOG
		echo "Dernière sauvegarde effectuée manuellement le:" >> $LOG
		date >> $LOG
		date +%s >> $LOG
	else
		echo "Sortie sans sauvegarder"
	fi
	echo "Fin de la commande de sauvegarde. Sortie du programme"
	exit 0

elif [ $1=="auto" ]
then
	#Si lancement auto, on regarde si il s'est écoulé un temps suffisant depuis la dernière sauvegarde
	#Recupération de la date de la dernière sauvegarde, en secondes Unix
	let "lastSauvegarde = `tail -n 1 $LOG`"
	let "delai = `date +%s` - lastSauvegarde"
	if [ $delai -gt 86400 ]
	then
		#Sauvegarde si le délai est de plus de 24h
		rsync -aq --copy-links --progress --delete --filter "- .thumbnails/" --filter "- .Trash/" --filter "- *.tmp" --filter "- *.iso" --filter "- lost+found/" --filter "- .cache/" --filter "- .CACHE" --filter "- Cache/" --filter "- *.log" "$REPERTOIRE_SOURCE" "$REPERTOIRE_DESTINATION" >> /dev/null 2> $ERREUR
		#Mise à jour du fichier de log court terme
		echo "" >> $LOG
		echo "Dernière sauvegarde effectuée automatiquement le:" >> $LOG
		date >> $LOG
		date +%s >> $LOG
		#Et gestion des erreurs:
		if [ -s $ERREUR ]; then echo "Il y a eu des erreurs !" >> $LOG
		fi
	fi
	#On vérifie si on écrase les données long termes, mode auto uniquement
	#Recupération de la date de la dernière sauvegarde, en secondes Unix
	let "lastSauvegarde = `tail -n 1 $LOGLONG`"
	let "delai = `date +%s` - lastSauvegarde"
	if [ $delai -gt 2592000 ]
	then
		#On sauvegarde si le délai est de plus de 1 mois
		rsync -aq --copy-links --progress --delete --filter "- .thumbnails/" --filter "- .Trash/" --filter "- *.tmp" --filter "- *.iso" --filter "- lost+found/" --filter "- .cache/" --filter "- .CACHE" --filter "- Cache/" --filter "- *.log" "$REPERTOIRE_SOURCE" "$REPERTOIRE_DESTINATION_LONG" >> /dev/null 2> $ERREURLONG
		#Et mise à jour du fichier de log
		echo "" >> $LOGLONG
		echo "Dernière sauvegarde complète effectuée le:" >> $LOGLONG
		date >> $LOGLONG
		date +%s >> $LOGLONG
		#Et gestion des erreurs
		if [ -s $ERREURLONG ]; then echo "Il y a eu des erreurs !" >> $LOGLONG
		fi
	fi

else
	exit 0
fi

#Fin du programme
exit 0

Voilà, n'hésitez pas à commenter ce code, il est très certainement améliorable (c'est en effet mon premier script bash !)

Dernière modification par Laserpithium (Le 28/06/2009, à 15:14)


Portable Toshiba P300-220, proc P8300 Core2Duo 4Go RAM CG ATI HD4650 Mobility
Archlinux 64bits
GE>$ d s++:-- a- C++ L+++ P W++(+++) w--@ PE+ Y+ !R tv-() b+++ e+++ r-->r y>y+

Hors ligne

#2 Le 28/06/2009, à 13:23

manuker

Re : Voici un script pour sauvegardes automatiques

Merci!

J'en utilise un similaire dans le principe mais beaucoup plus basique, je vais donc certaienement m'inspirer du tien.
Il correspond bien aux besoins de base d'une sauvegarde avec les gardes fous nécessaires, merci encore.
smile


Ubuntu Precise v12.04.2 - 64bits (depuis 2013)

Hors ligne

#3 Le 28/06/2009, à 22:40

Brunod

Re : Voici un script pour sauvegardes automatiques

Salut !
Bravo et merci pour le partage mais j'en profite pour demander un supplément (Il est tard et je n'ai pas encore épluché le script) :
- sauvegarde vers un répertoire distant : autre pc /nas
- sauvegarde avec rotation : 5 versions en rotation (sauve sur 1, 2... 5 puis écrase et remplace 1, 2 etc. avec trace de la date de la dernière mise à jour dans chacun de ces 5 répertoires)
Je dois mettre un système de ce type en place depuis un certains temps, mais je n'ai pas encore eu le temps de me pencher dessus et je rame surtout beaucoup encore avec rsync...
Aussi si ça pouvait t'inspirer, ça m'aiderait beaucoup smile
Sinon de toute manière, je m'inspirerai très fort de ton script !
Merci wink


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#4 Le 19/04/2012, à 19:26

heronheronpetitpatapon

Re : Voici un script pour sauvegardes automatiques

Super je vais le mettre sur ma machine!


...Ubuntu Rocks....

Hors ligne

#5 Le 18/04/2013, à 21:49

folkarys71

Re : Voici un script pour sauvegardes automatiques

Merci pour ce script, j'ai cependant une petite question. Mes fichiers perso son sur une autre partition séparée du fichier système et donc pas appelé "home".

Comment puis je modifié le script afin d’effectuer une sauvegarde de ses fichiers.

Merci d'avance wink

Hors ligne

#6 Le 18/04/2013, à 21:58

Josepe36

Re : Voici un script pour sauvegardes automatiques

Bonsoir
Merci pour ce script, si je peux me permettre une suggestion, il serait prudent je pense de rajouter une routine de contrôl sur la taille de la destination.

En tout cas trés bien écris.


Développeur distribution Hybryde
www.hybryde.org

Hors ligne