Table des matières

rsync

Introduction

/mnt/sauvegarde/
├── machine1
│   ├── increment
│   │   ├── 130612
│   │   ├── 130613
│   │   ├── 130614
│   │   ├── 130615
│   │   └── 130616
│   └── up-to-date
│       ├── etc
│       ├── home
│       ├── root
│       └── var
├── machine2
│   ├── increment
│   │   ├── 130613
│   │   ├── 130614
│   │   ├── 130615
│   │   ├── 130616
│   │   └── 130617
│   └── up-to-date
│       ├── etc
│       ├── home
│       ├── root
│       └── var

L'architecture du dossier de sauvegarde est décrite ci-dessus.

Les dossiers up-to-date contiennent la dernière sauvegarde.

Les dossiers increment contiennent eux les fichiers et dossiers qui ont été supprimés, déplacés ou modifiés. À savoir que lors d'un déplacement le dossier sera copié deux fois. Une fois dans le dossier increment et sera retranféré dans le dossier up-to-date; donc, attention à l'espace disque.

Installation

Vérifier l'état du paquet rsync

Pour que la sauvegarde fonctionne, il faut que le paquet rsync soit installé dans le système. Pour le vérifier, exécuter la commande suivante.

( dpkg --list 'rsync' 2>&1 > /dev/null ) && echo "rsync est installé" || echo "rsync n'est pas installé"

Installer le paquet rsync

Si le paquet rsync n'est pas installé, exécuter la commande suivante en tant que root.

apt-get install rsync -y

Créer le script de sauvegarde

Créer le fichier rsync-backup dans le dossier /etc/init.d

Dans une console en root, exécuter la commande suivante.

touch /etc/init.d/rsync-backup

Modifier les droits du fichier rsync-backup pour qu'il devienne exécutable

Dans une console root, exécuter la commande suivante.

chmod 755 /etc/init.d/rsync-backup

Copier le contenu du fichier rsync-backup

Pour éditer le fichier, dans une console en root, exécuter la commande suivante.

nano /etc/init.d/rsync-backup

Copier le contenu suivant.

/etc/init.d/rsync-backup
#! /bin/sh
### BEGIN INIT INFO
# Provides:          rsync-backup
# Required-Start:
# Required-Stop:     $local_fs $network $named $remote_fs $syslog $time
# Should-Stop:
# Default-Start:
# Default-Stop:      0
# Short-Description: Sauvegarde du système.
### END INIT INFO
 
envoyer_mail () {
 
	echo "$1" | mail -s "[error] [`hostname`] [$NAME]" $USER
 
	return 0
}
 
do_stop () {
 
	# initialiser les variables
	local nom_hote=`hostname`
 
	# vérifier que le point de montage est monté
	# si le point de montage est un dossier et qu'il est monté alors continuer sinon retourner 1
	[ -d $point_montage ] && ( /bin/mountpoint -q $point_montage || return 1 )
 
	# tester si l'on peut écrire dans le dossier du point de montage
	# retourner 2 en cas d'échec
	[ ! -w $point_montage ] && return 2;
 
	# si le dossier up-to-date n'existe pas alors créer le dossier up-to-date
	[ ! -d $point_montage/$nom_hote/up-to-date ] && mkdir -p $point_montage/$nom_hote/up-to-date
 
	# si le dossier increment n'existe pas alors créer le dossier increment
	[ ! -d $point_montage/$nom_hote/increment ] && mkdir -p $point_montage/$nom_hote/increment
 
	# exécuter la commande rsync de sauvegarde
	/usr/bin/rsync --human-readable \
		--recursive --links --perms --times --delete-after \
		--log-file=/var/log/rsync-backup.log \
		--backup --backup-dir=$point_montage/$nom_hote/increment/`date +%y%m%d`/ \
		--exclude-from=$rsync_backup_include --exclude='**' \
		/ $point_montage/$nom_hote/up-to-date/ || return 3
 
	# supprimer les anciennes sauvegarde
	find $point_montage/$nom_hote/increment/ -mindepth 1 -maxdepth 1 -type d -ctime +$nb_jours -exec rm -rf {} \;
 
	return 0
}
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=rsync-backup
SCRIPTNAME=/etc/init.d/$NAME
rsync_backup_conf='/etc/rsync-backup.conf'
rsync_backup_include='/etc/rsync-backup-include'
point_montage=''
nb_jours=30
 
# lire la librairie init-functions
. /lib/lsb/init-functions
 
# lire le fichier rsync-backup.conf s'il est lisible
# exit 1 en cas d'échec
if [ -r $rsync_backup_conf ] ; then
 
	. $rsync_backup_conf
else
 
	log_failure_msg $NAME": " "le fichier $rsync_backup_conf n'est pas lisible"
 
	envoyer_mail "le fichier $rsync_backup_conf n'est pas lisible"
 
	exit 1
fi
 
# tester si le fichier rsync-backup-include est lisible
# exit 1 en cas d'échec
if [ ! -r $rsync_backup_include ] ; then
 
	log_failure_msg $NAME": " "le fichier $rsync_backup_include n'est pas lisible"
 
	envoyer_mail "le fichier $rsync_backup_include n'est pas lisible"
 
	exit 1
fi
 
case "$1" in
 
 	stop)
	  	log_daemon_msg $NAME "sauvegarde de la machine..."
 
		# exécuter la méthode do_stop
		do_stop
 
		# en fonction du résultat afficher le message de fin
		case "$?" in
			0)	log_end_msg 0
				exit 0
				;;
 
			1)	log_end_msg 1
				envoyer_mail "impossible de monter le point de montage $point_montage"
				exit 1
				;;
 
			2)	log_end_msg 1
				envoyer_mail "ne peut pas écrire dans dossier du point de montage $point_montage"
				exit 1
				;;
 
			3)	log_end_msg 1
				envoyer_mail "échec de la commande rsync"
				exit 1
				;;
		esac
		;;
 
	*)
		echo "Usage: $0 stop" >&2
		exit 3
		;;
esac

Sauvegarder le fichier et quitter l'éditeur de texte

Ctrl+O suivi de Ctrl+X

Créer le script de configuration

Créer le fichier rsync-backup.conf dans le dossier /etc/

Dans une console en root, exécuter la commande suivante.

touch /etc/rsync-backup.conf

Modifier les droits du fichier rsync-backup.conf pour qu'il devienne exécutable

Dans une console root, exécuter la commande suivante.

chmod 644 /etc/rsync-backup.conf

Copier le contenu du fichier rsync-backup.conf

Pour éditer le fichier, dans une console en root, exécuter la commande suivante.

nano /etc/rsync-backup.conf

Copier le contenu suivant.

/etc/rsync-backup.conf
# le point de montage doit être monté
point_montage='/mnt/sauvegarde'
nb_jours=10

Sauvegarder le fichier et quitter l'éditeur de texte

Ctrl+O suivi de Ctrl+X

Créer le fichier de sélection des dossiers et fichiers à sauvegarder

Ce fichier permet de sélectionner ce que l'on veut sauvegarder ou ne pas sauvegarder.

Créer le fichier rsync-backup-include dans le dossier /etc/

Dans une console en root, exécuter la commande suivante.

touch /etc/rsync-backup-include

Modifier les droits du fichier rsync-backup-include

Dans une console root, exécuter la commande suivante.

chmod 644 /etc/rsync-backup-include

Copier le contenu du fichier rsync-backup-include

Pour éditer le fichier, dans une console en root, exécuter la commande suivante.

nano /etc/rsync-backup-include

Copier le contenu suivant.

/etc/rsync-backup-include
# La commande rsync utitilisée inclue / (root) et exclue tout. Cela ne sauvegarde rien. Le fichier rsync-backup-include permet d'inclure ce que l'on veut sauvegarder.
# (note : pour plus d'information voir la page de manuel de rync dans les sections : FILTER RULES, INCLUDE/EXCLUDE PATTERN RULES, MERGE-FILE FILTER RULES)
# à la visite d'un dossier, penser à exclure ce que l'on ne veut pas sauvegarder avant de mettre la règle contenant les *
# + [pattern] inclu un motif
# - [pattern] exclu un motif
# '*' remplace tout et s'arrête au premier slash.
# '**' remplace tout, incluant les slashs.
# + /dossier/ visite un dossier mais ne sauvegarde rien
# + /dossier/* sauvegarde tous les fichiers et dossiers mais de manière non récursive (les dossiers seront vides)
# + /dossier/** sauvegarde tous le contenu du dossier récursivement
 
# exclure les fichiers
- /initrd.img
- /vmlinuz
#- .git/
#- .cvs/
 
# sauvegarder le contenue du dossier /etc
+ /etc/
+ /etc/**
 
# sauvegarde tous les dossiers utilisateurs
+ /home/
+ /home/*/
# exclure les dossiers et fichiers que l'on ne veut pas sauvegarder dans les dossiers utilisateurs
- /home/*/Musique/
- /home/*/Public/
- /home/*/Téléchargements/
- /home/*/Vidéos/
- /home/*/.adobe/
- /home/*/.aptitude
- /home/*/.bash_history
- /home/*/.cache/
- /home/*/.cvs/
- /home/*/.dbus/
- /home/*/.fontconfig/
- /home/*/.gnome2_private/
- /home/*/.gnome2/
- /home/*/.gstreamer-0.10/
- /home/*/.gvfs/
- /home/*/.ICEauthority
- /home/*/.java/
- /home/*/.lesshst
- /home/*/.local/
- /home/*/.macromedia/
- /home/*/.mozilla/
- /home/*/.pulse/
- /home/*/.pulse-cookie
- /home/*/.recently-used
- /home/*/.swt/
- /home/*/.thumbnails/
- /home/*/.Xauthority
- /home/*/.xsession-errors
- /home/*/.xsession-errors.old
# sauvegarder tout ce qui n'a pas était exclue dans les dossiers utilisateurs
+ /home/*/**
 
# sauvegarder le dossier de l'utilisateur root
+ /root/
+ /root/**
 
# sauvegarder le dossier cron
+ /var/
+ /var/spool/
+ /var/spool/cron/
+ /var/spool/cron/**
 
# sauvegarder le dossier mail
#+ /var/
#+ /var/spool/
+ /var/spool/mail/
+ /var/spool/mail/**
 
# exclure tout (comme ça on est sûr)
- **

pour plus d'informations sur cette partie, dans une console, exécuter la commande suivante.

man rsync

sections : FILTER RULES et INCLUDE/EXCLUDE PATTERN RULES

Sauvegarder le fichier et quitter l'éditeur de texte

Ctrl+O suivi de Ctrl+X

Ajouter rotation du fichier de log

Créer le fichier rsync-backup dans le dossier /etc/logrotate.d

Dans une console en root, exécuter la commande suivante.

touch /etc/logrotate.d/rsync-backup

Modifier les droits du fichier rsync-backup

Dans une console root, exécuter la commande suivante.

chmod 644 /etc/logrotate.d/rsync-backup

Copier le contenu du fichier rsync-backup

Pour éditer le fichier, dans une console en root, exécuter la commande suivante.

nano /etc/logrotate.d/rsync-backup

Copier le contenu suivant.

/etc/logrotate.d/rsync-backup
/var/log/rsync-backup.log {
 
	compress
	copytruncate
	delaycompress
	missingok
	notifempty
	weekly
}

Sauvegarder le fichier et quitter l'éditeur de texte

Ctrl+O suivi de Ctrl+X

Ajouter le lancement automatique de la sauvegarde (cron)

Éditer le fichier contenant les cron

Pour éditer le fichier, dans une console en root, exécuter la commande suivante.

crontab -e

Ajouter la tâche à exécuter

La ligne suivante et à copier puis à coller dans l'éditeur de de crons.

note : la sauvegarde sera lancé à 4H00 du matin. (on est rarement derrière son pc à 4H00 et cela évite les problèmes de changements d'heures)

0 4 * * * /usr/sbin/invoke-rc.d rsync-backup stop

Sauvegarder le fichier et quitter l'éditeur de cron

Ctrl+O suivi de Ctrl+X

Installer le lien vers le script d'initialisation de type Système V

Dans une console root, exécuter la commande suivante.

note : ne pas s'inquiéter du message : update-rc.d: warning: stop runlevel arguments (none) do not match rsync-backup Default-Stop values (0)

update-rc.d rsync-backup stop 0

Utilisation

Aux prochains arrêts ou si la machine n'est pas arrêtée, tous les jours à 4H00 du matin, la machine sera sauvegardée.

Exécuter une sauvegarde manuellement

Dans une console root, exécuter la commande suivante.

invoke-rc.d rsync-backup stop

Vérifier que la sauvegarde fonctionne

Dans une console root, exécuter la commande suivante.

grep 'rsync-backup:' /var/log/syslog

Afficher ce qui est sauvegardé

Dans une console, exécuter la commande suivante.

cat /var/log/rsync-backup.log

Désinstallation

Dans une console root, exécuter les commandes suivantes.

update-rc.d rsync-backup remove

(supprimer la tâche dans crontab)

crontab -e
rm /etc/init.d/rsync-backup
rm /etc/rsync-backup-include
rm /etc/rsync-backup.conf
rm /etc/logrotate.d/rsync-backup
rm /var/log/rsync-backup.log
apt-get purge rsync -y
1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !