Le Blog Maniatux

Bienvenue sur internet

Sauvegarde rsync avec roulement de 3 jours

Rédigé par Xavier - - 6 commentaires

Pour sauvegarder mon serveur, j'ai choisi d'utiliser simplement rsync avec une tâche cron. En effet mon infra n'est pas assez grosse pour justifier la présence d'une machine de guerre telle que Bacula. Rsync va permettre, avec un peu d'astuce, une sauvegarde incrémentielle avec roulement sur 3 jours. Cela veut dire que je peux restaurer des choses en puisant au choix dans les sauvegardes des 3 derniers jours.

Note importante

Je ne suis pas l'auteur du script, il est assez répandu sur le web, je ne sais pas qui l'a fait le premier. Mais il est très pratique !

Notez aussi que dans le script, la sauvegarde se fait en local sur le disque dur, ce qui n'est pas très prudent. Il est préférable de le faire sur un serveur distant, ou sur un support USB. En effet en cas de perte du disque dur vous serez bien contents d'avoir vos données sous le coude :)

Le script

#!/bin/sh
TARGET=/usr/backup
SOURCE=/usr/jails
/bin/rm -Rf $TARGET/backup.2
/bin/mv $TARGET/backup.1 $TARGET/backup.2
/bin/mv $TARGET/backup.0 $TARGET/backup.1
/usr/local/bin/rsync -a --no-o --delete --safe-links --link-dest=$TARGET/backup.
1 $SOURCE $TARGET/backup.0/

Note : il est obligatoire d'utiliser le chemin complet pour rsync (/usr/local/bin/rsync) sinon le script ne fonctionnera pas lorsqu'il sera invoqué en cron. Pensez à créer le TARGET avec mkdir.

Ajout au cron

Avant tout n'oubliez pas de rendre le script exécutable :

# chmod +x backup.sh

Ensuite éditez vos tâches :

# crontab -e

Puis ajoutez la ligne suivante :

@daily /root/backup.sh

Comment restaurer

Pour restaurer il faut utiliser la commande cp tout simplement. Quelques exemples :

# POUR UN FICHIER DE LA VEILLE
# cp /usr/backup/xmpp/var/log/messages /usr/jails/xmpp/var/log/

# POUR RESTAURER UN DOSSIER D'IL Y A DEUX JOURS
# cp -R /usr/backup/xmpp/home/sqlite /usr/jails/xmpp/home

6 commentaires

#1 Tetsumaki a dit :

Je préfère utiliser rdiff-backup, c'est plus propre, enfin pour mon cas.

J'utilise moi aussi une tâche cron qui invoque mon script.

Le script va sauvegarder ce que je veux puis ensuite supprimer les sauvegardes vieilles de plus d'une semaine (1W), je l'ai simplifié :

rdiff-backup -v5 \
--include /etc/nginx \
--include /etc/opendkim \
--include /etc/php \
--include /home \
--exclude /root/.bash_history \
--include /root \
--include /srv \
--exclude '**' / serveurssh::/mnt/raid/backup/tetsumaki.net
rdiff-backup --remove-older-than 1W --force serveurssh::/mnt/raid/backup/tetsumaki.net

Xavier, peux tu supprimer mon message au dessus de celui-ci ?

#2 Xavier a dit :

@Tetsumaki :
Merci pour l'information.
rdiff-backup peut fonctionner en local ?
Je n'ai pas de serveur distant pour stocker mes sauvegardes.

#3 Bougie a dit :

Bonjour

Sinon, il y a duplicity aussi. Beaucoup plus souple et "puissant" qu'un simple rsync.
Mais tout aussi simple d'utilisation !

Ça gère tout seul la rotation des backup (incremental / full). Ça envoi sur un serveur distant (multi protocole : sftp, ftp, rsync et j'en passe) et en plus de tout ça, ça chiffre avec GPG.

#4 Simon a dit :

Pour faire du backup incrémental avec du versionning, j'utilise rsnapshot qui repose sur rsync. Il fait grosso-modo ce que tu proposes mais il permet de gérer des périodes de sauvegrades plus fines (hourly, daily, weekly, monthly).

Ce que je n'aime pas dans rdiff-backup, c'est qu'une personne connaît pas l'outil ne pourra pas récupérer de fichier (et je ne sais pas si en plein stress de panne, même si on connait, ça sera mieux).

#5 Tetsumaki a dit :

Oui, ça fonctionne aussi très bien en local.

#6 sytoka a dit :

Mais rdiff-backup va beaucoup plus vite et fonctionne avec des partitions de 20To ayant des millions de fichiers... rsnapshop est (était) vite à la peine.

Écrire un commentaire

Quelle est la troisième lettre du mot ygnzl ? :