Outils pour utilisateurs

Outils du site


Panneau latéral

linux:rsnapshot (lu 2143 fois)

Ceci est une ancienne révision du document !


Rsnapshot

Description

rsnapshot est un outil de sauvegarde basé sur rsync. Grâce à rsnapshot, il est possible de prendre des instantanés de vos systèmes de fichiers à différents instants. Utilisant les liens durs, rsnapshot créé l’illusion de l’existance de multiples sauvegardes complétes, tout en n’occupant que la place d’une seule plus les différences. Couplé avec ssh, il est également possible de prendre des instantanés de systèmes de fichiers distants. Ce document est un tutoriel d’installation et de configuration de rsnapshot.

rsnaphost est écrit en Perl et dépends de rsync. OpenSSH, GNU cp et le programme BSD logger sont également recommandés mais pas necessaires. Tous ceux-ci devraient être présents sur la plupart des systèmes Linux. rsnapshot est écrit avec le plus petit dénomitateur commun en tête. Au minimum il ne requiert que Perl 5.0004 et rsync. Ceci fait qu’il fonctionne sur quasiment n’importe quel système UNIX vous voudrez l’installer. Il a été testé avec succès avec Perl 5.0004 à 5.8.2, sur Debian, Redhat, Fedora, Solaris, Mac OS X, FreeBSD, OpenBSD, et IRIX.

source: http://www.rsnapshot.org/howto/1.1/rsnapshot-HOWTO.fr.html

Installation

aptitude install rsnapshot

vi /etc/rsnapshot.conf

Configurer votre répertoire de stockage, pour ma part, un disque dur externe

snapshot_root    /media/backup/

Décommenter les lignes

cmd_cp          /bin/cp
cmd_ssh         /usr/bin/ssh

L’option suivante est intéressante, elle permet d’utiliser rsync pour la création de lien dur, plutôt que la commande cp -al

link_dest      1

Modifier l’intervalle de sauvegarde

#########################################
#           BACKUP INTERVALS            #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc.      #
#########################################
retain          hourly  6
retain          daily   7
retain          weekly  4
#retain monthly 3

hourly ne veut pas dire toutes les heures mais toutes les 4 heures par défaut, donc le 6 permet d’avoir des sauvegardes sur 24h (6*4). Cela étant dit, il est possible de définir hourly s’exécutant toutes les heures.
daily s’exécute tous les jours et garde un historique sur 7 jours.
weekly s’exécute toutes les semaines et garde un historique sur 4 semaines.

Dans mon cas, je voudrais garder les 30 derniers jours et pourquoi pas garder les 12 derniers mois.

retain          daily  30
retain          monthly 12

Modifier ensuite à la fin du fichier la section

###############################
### BACKUP POINTS / SCRIPTS ###
###############################

Comme bon vous semble. Pour mon cas, je veux sauvegarder tout le répertoire /var/www de mon serveur web distant vers mon serveur de backup ou rsnapshot est installé et ce de façon journalière. Je vais donc mettre

backup  root@edmc73.com:/var/www/  edmc73.com/

La sauvegarde du répertoire /var/www de mon serveur web se fera sur mon serveur de backup dans /media/backup/edmc73.com/var/www

Si votre serveur web à un port ssh différent, vous pouvez le spécifier de cette façon.

backup  root@edmc73.com:/var/www/  edmc73.com/ ssh_args=-p1234
Séparez bien vos colonnes par une tabulation et non par un espace !!! Mettez toujours un / après un nom de répertoire !!

Test

Pour tester si notre config fonctionne, utilisez la commande

rsnapshot configtest

qui devrait retourner

Syntax OK

Ensuite la simulation d’un backup journalier

:~# rsnapshot -t daily
echo 11500 > /var/run/rsnapshot.pid
mkdir -m 0755 -p /media/backup/daily.0/edmc73.com/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
  --rsh=/usr/bin/ssh root@edmc73.com:/var/www \
  /media/backup/daily.0/edmc73.com/
touch /media/backup/daily.0/

On voit ici ce que va faire rsnapshot. Créer un fichier de lock, créer le répertoire cache, faire un rsync via ssh dans les répertoires qui vont bien.

Dernière vérification

Assurez vous que votre serveur de backup est bien accès au serveur à sauvegarder via ssh avec une clé public (voir SSH)

Et assurez-vous d’avoir installez rsync sur la machine à sauvegarder

aptitude install rsync

Activation

Pour programmer l’exécution, nous allons configurer le cron de rsnapshot

vi /etc/cron.d/rsnapshot

Toujours dans mon cas, décommentez la ligne daily et monthly.

Vous pouvez lancer la commande suivante à la main

rsnapshot -v daily

Mais sachez qu’à chaque fois que vous la lancerez, vous décalerez votre sauvegarde. daily.0 deviendra daily.1 et la nouvelle sauvegarde sera daily.0 De ce fait, l’écart entre les 2 daily ne sera pas d’une journée. Donc à éviter !

Sauvegarder un pc sous windows

Installer le service rsync

Sous windows, un service rsync existe, il s’appelle cwRsync Server et est disponible normalement ici ⇒ https://www.itefix.no/i2/cwrsync mais à l’heure ou j’écris ces lignes, le site ne répond pas et j’ai trouvé un site non officiel proposant le téléchargement ici ⇒ http://www.backupassist.com/rsync/

Exécutez cwRsyncServer_4.1.0_Installer.exe et suivez les instructions, n’installez pas SSH (nous sommes dans mon cas dans un réseau local, pas la peine de crypter nos données).
Un mot de passe est proposé pour faire tourner le service, laissez ceci par défaut, nous n’en avons pas besoin.

Configuration du server

Modifiez le fichier C:\Program Files\cwRsyncServer\rsyncd.conf ou C:\Program Files\ICW\rsyncd.conf

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
 
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[test]
path = /cygdrive/c/Documents and Settings/Moi
read only = false
transfer logging = no
UID = 0
GID = 0
exclude from =/cygdrive/C/Program Files/ICW/exclude.txt
  • Les 4 premières lignes se sont écrites automatiquement et je pense que vous pouvez spécifier le hosts allow pour mettre l’adresse ip du server rsnapshot pour les plus parano d’entre nous.
  • test est le nom du module qui sera appelé par notre rsnapshot
  • path comme le dit le commentaire par défaut, le chemin d’accès à sauvegarder doit s’écrire en commençant par /cygdrive/la lettre du lecteur/le répertoire ….
  • read only peut importe, rsnapshot ne fait que lire, mais pour les plus parano…
  • transfert logging si vous voulez logguer chaque fichier transférer. Bien pour le débug, sinon à part remplir inutilement l’espace disque, je vois pas.
  • uid=0 et gid=0 j’ai rajouté ces 2 lignes car j’avais l’erreur Invalid uid nobody
  • exclude from Fichier contenant la liste des dossiers/fichiers à exclure

Exemple :

- /Recent/
- /Local Settings/Temp/
- /Local Settings/Historique/
- /Local Settings/Temporary Internet Files/
- /Cookies/
- /Favoris/
- /IECompatCache/
- /IETldCache/
- /PrivacIE/
- /SendTo/
- /UserData/
- /Voisinage*/
- Thumbs.db
- desktop.ini
- NTUSER.DAT
- ntuser.dat.LOG

En savoir plus sur les exclusions ⇒ https://www.itefix.no/i2/content/excluding-directories-cwrsync

Démarrer le service

Allez dans votre gestionnaire de service ou pour aller plus vite [Touche Windows]+r tapez services.msc puis Entrée

Recherchez RsyncServer. Par défaut il est en Manuel, double-cliquez dessus, mettez le type de démarrage en automatique pour qu’il se lance à l’ouverture de Windows puis cliquez sur Démarrer pour lancer le service.

Pensez à ouvrir le port 873 de votre firewall

Pour vérifier votre config, allez sur votre serveur de backup et listez les fichiers qui seront synchronisés avec la commande

rsync -n 192.168.0.1::test

Aucune modification ne sera faite.

Configurer rsnapshot

Coté rsnapshot, j’ai créé un répertoire différent pour ma machine windows, je vais l’appeler /media/backup/windows

Je crée un nouveau fichier de config en copiant celui existant

cp /etc/rsnapshot.conf /etc/rsnapshot_windows.conf

Je m’assure de modifier le répertoire de sauvegarde

snapshot_root /media/backup/windows

De commenter l’option de rsync à traver ssh

# Uncomment this to enable remote ssh backups over rsync.
#
#cmd_ssh        /usr/bin/ssh

Adaptez vos intervalles de backup dans la section qui va bien

#########################################
#           BACKUP INTERVALS            #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc.      #
#########################################

Modifiez le lockfile si votre sauvegarde est indépendante des autres sauvegardes déjà présentent sur votre serveur.

lockfile        /var/run/rsnapshot_windows.pid

Je conseillerai de décommenter l’option suivante et la mettre à 1. Cela permet que si votre PC est éteint, rsnapshot ne fera pas tourner son cycle de sauvegarde, ce qui évite de perdre de vieilles sauvegarde et de faire une copie pour rien.

sync_first   1
L’option sync first doit être à 0 la 1ère fois que vous lancerez rsnapshot, sinon rien ne se passe.

Si cette option sync_first pose problème, j’ai trouvé une alternative qui est peut être mieux.
Il suffit de tester si le PC est dispo avant de lancer la copie et cela grâce à la pre-commande dispo dans le fichier de config.

cmd_preexec     /etc/rsnapshot_pre

Mettez le script suivant dans /etc/rsnapshot_pre

/usr/bin/rsync 192.168.0.1::Test # ou votre nom de partage
if [ $? -ne 0 ] # on test si le code de retour de la commande rsync est différente de zéro
then
  echo "rsyncd indisponible. PC éteint?"
  exit 1
fi

Et le point de backup

backup  192.168.0.1::test               PC-MOI/

On retrouve l’adresse ip du PC windows à sauvegarder, le double “::“ qui permet de spécifier le module sur lequel on se connecte. On retrouve notre test et le nom du répertoire à destination de la sauvegarde.

Il ne reste plus qu’a configurer notre cron.d

vi /etc/cron.d/rsnapshot

Ajoutez les lignes suivantes suivant vos intervalles

0 20    * * *           root    /usr/bin/rsnapshot -c /etc/rsnapshot_windows.conf daily
30 19   1 * *           root    /usr/bin/rsnapshot -c /etc/rsnapshot_windows.conf monthly

Ici j’ai décidé de lancer le backup à 20h, l’option -c de rsnaphot permet de définir un fichier de config spécifique.

Et voila, il ne vous reste plus qu’à installer un petit server samba afin d’accéder facilement à vos backup depuis windows et vous voila tranquille ;)

Logguer les étapes rsync

Créer un script intermédiaire qui sera appelé par rsnapshot en tant que programme rsync (voir fichier de conf)

rsyncLog
# Votre traitement pour logguer ce que vous voulez
 
/usr/bin/rsync $@
 
if [ $? -ne 0 ]
then
  # traitement si la commande rsync échoue
else
  # traitement si la commande rsync à fonctionné
fi

Etude d'un cas : la gestion des "trou"

Condition: sauvegarde sur une partition btrfs avec un rsnapshot configuré avec link_dest qui permet de dire à rsync de créer lui meme les liens dur. La sauvegarde s’effectue tous les soir sur un poste de travail. Quand ce poste de travail est éteint, je me retrouve avec un répertoire de backup vide. Normalement, le lendemain, toutes les données devrait se retélécharger.

Et ben non, dans la dernière version de rsnapshot, celui-ci vérifie si le répertoire donné dans link_dest est vide, si c’est le cas, il va chercher plus loin

linux/rsnapshot.1403974792.txt.gz · Dernière modification: 28-06-2014 18:59 de edmc73