====== 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