====== rsync ======
* Objet : rsync, la sauvegarde incrémentielle.
* Niveau requis : {{tag>débutant avisé}}
* Commentaires : //sauvegarder les dossiers et fichiers à l'arrêt d'une machine; envoiyer des mails locaux en cas d'erreur.//
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-)
* Suivi :{{tag>à-tester}}
* Création par [[user>gksam]] le 22/06/2013
* Testé par ... le ...
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=7061 | c'est ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
===== 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 [[http://packages.debian.org/stable/rsync|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.
#! /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 ====
C-o suivi de C-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.
# le point de montage doit être monté
point_montage='/mnt/sauvegarde'
nb_jours=10
==== Sauvegarder le fichier et quitter l'éditeur de texte ====
C-o suivi de C-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.
# 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 ====
C-o suivi de C-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.
/var/log/rsync-backup.log {
compress
copytruncate
delaycompress
missingok
notifempty
weekly
}
==== Sauvegarder le fichier et quitter l'éditeur de texte ====
C-o suivi de C-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 ====
C-o suivi de C-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