21 déc. 2017

rsnpashot, le robot de sauvegarde

Lire la suite...

Suite au commentaire de Xate dans un récent billet, aujourd'hui un billet sur rsnapshot, un logiciel de sauvegarde incrémentale basé sur rsync. Si j'en fais un billet, c'est tout simplement car c'est ce que j'ai mis en place pour sauvegarder mon infrastructure.

J'avoue ne pas trop savoir quoi raconter sur ce logiciel, car de nombreuses documentations existent déjà, quasiment pour chaque distribution :

Je vais donc parler de quelques points de ma configuration en particulier. La première particularité de celle-ci est que j'ai choisi d'installer rsnapshot sur une machine (en fait une jail FreeBSD sur mon NAS FreeNAS) et de l'utiliser en mode "robot de sauvegarde", c'est-à-dire qu'il va se connecter sur toutes les machines à sauvegarder via SSH pour effectuer les sauvegardes. J'y vois l'avantage que je n'ai qu'une seule configuration à modifier, et un utilisateur à configurer sur mes serveurs (accompagné, bien entendu, de sa configuration sudo et de la clé SSH).

Par exemple, pour la sauvegarde du Raspberry Pi qui fait des bulk builds :

backup rsnapshot@netpi2:/etc/                                          netpi2/         +rsync_long_args=--rsync-path='/usr/pkg/bin/sudo /usr/pkg/bin/rsync'
backup rsnapshot@netpi2:/usr/pkg/etc/                                  netpi2/         +rsync_long_args=--rsync-path='/usr/pkg/bin/sudo /usr/pkg/bin/rsync'
backup rsnapshot@netpi2:/var/log/                                      netpi2/         +rsync_long_args=--rsync-path='/usr/pkg/bin/sudo /usr/pkg/bin/rsync'
backup rsnapshot@netpi2:/srv/sandbox/pkgsrc-current/usr/pbulk/etc/     netpi2/         +rsync_long_args=--rsync-path='/usr/pkg/bin/sudo /usr/pkg/bin/rsync'

On peut aussi noter que j'ai choisi d'ajouter des options à rsync selon mes machines, car celles-ci peuvent être de différents OS, ce qui fait que rsync et sudo ne se trouvent pas toujours au même endroit.

Du côté de la rétention et des intervalles de sauvegarde, j'ai fait très simple :

  • une sauvegarde par jour (daily);
  • 370 jours de rétention.

370 jours peut sembler un peu abusé, mais la force de rsnapshot est dans son utilisation des liens (hardlinks) combinée à celle de rsync, qui rend les sauvegardes rapides, mais aussi moins consommatrices en espace disque car dédupliquées. Par exemple pour le serveur web de ce blog :

# du -csh daily.0/vhost2/ daily.1/vhost2/                                                                                                                                                                       
 17G    daily.0/vhost2/
2.3G    daily.1/vhost2/
 19G    total

La restauration se fait très simplement aussi, puisqu'il s'agit de fichiers tout ce qu'il y a de plus classiques, ou de liens.

Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !

Crédit photo : Ritva Pirinen - Spare Parts.

23 mar. 2008

Créer un miroir CentOS pour les updates

Et tu sync, et tu sync, et tu wget

Lire la suite...

Hier, j'ai commencé à me dire que ça serait sympa de rendre encore plus rapide mes installations de machines virtuelles CentOS 5. Donc, avant d'attaquer le trifouillage de mes kickstarts afin d'appliquer mes configurations de manière automatique, j'en suis venu à la conclusion qu'avoir le dépôt des mises à jour en local serait plus rapide que de devoir tout récupérer sur Internet.

Donc, il me faut me synchroniser avec un miroir. Comme je suis chez Free, j'ai voulu utiliser leur miroir. Oui mais, ce n'est qu'un miroir FTP. Et la plupart des scripts de synchronisation de miroir utilisent rsync. Je me suis donc rabattu sur le miroir de l'IPSL Jussieu qui possède un mirroir http, ftp et rsync. Génial ! Quelques instants plus tard, j'adapte ce script qui donne ceci :

#!/bin/bash

#################################################################################
#                                                                               #
# CentOS mirror syncer                                                          #
# Comes from :                                                                  #
#                                                                               #
# http://lists.centos.org/pipermail/centos-mirror/2005-April/000936.html        #
# http://wiki.monserveurperso.com/wakka.php?wiki=MirroringFTP                   #
# man wget                                                                      #
#                                                                               #
#################################################################################

RSYNC=`which rsync`
RSYNC_OPTS="-aHv --delete --bwlimit=512 "
CHOWN=`which chown`
CHMOD=`which chmod`
MIRROR="rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/centos/5/updates/i386/"
LOCAL="/home/ftp/mirrors/centos/5/updates/i386/"
PIDFILE="/var/run/centosmirror.pid"

# Don't run it twice...

if [ -f "$PIDFILE" ]; then
   RUNPID=`cat $PIDFILE`
   if ps -p $RUNPID; then
      echo "CentOS Mirror is already running..."
      exit 1
   else
      echo "CentOS Mirror pid found but process dead, cleaning up"
      rm -f $PIDFILE
   fi
else
   echo "No CentOS Mirror Process Detected"
fi
echo $$ > $PIDFILE

echo -n "CentOS Mirror Started at "
date

# Download, set up rights
$RSYNC $RSYNC_OPTS $MIRROR $LOCAL
$CHOWN -R apache:apache $LOCAL
$CHMOD -R 755 $LOCAL

echo -n "CentOS Mirror Ended at "
date
rm -f $PIDFILE

Ca, c'était la version rsync. Et si on est derrière un proxy, et qu'on ne peut pas faire du rsync? Pour le moment je me suis concentré sur ftp, mais ce script devrait tourner pour http :

#!/bin/bash

#################################################################################
#                                                                               #
# CentOS mirror syncer                                                          #
# Comes from :                                                                  #
#                                                                               #
# http://lists.centos.org/pipermail/centos-mirror/2005-April/000936.html        #
# http://wiki.monserveurperso.com/wakka.php?wiki=MirroringFTP                   #
# man wget                                                                      #
#                                                                               #
#################################################################################

# Variables

WGET=`which wget`
WGET_OPTS="-m --limit-rate=512k -nH --cut-dir 5"
CHOWN=`which chown`
CHMOD=`which chmod`
MIRROR="ftp://ftp.free.fr/mirrors/ftp.centos.org/5/updates/i386/*"
LOCAL="/home/ftp/mirrors/centos/5/updates/i386/"
PIDFILE="/var/run/centosmirror.pid"

# Don't run it twice...

if [ -f "$PIDFILE" ]; then
   RUNPID=`cat $PIDFILE`
   if ps -p $RUNPID; then
      echo "CentOS Mirror is already running..."
      exit 1
   else
      echo "CentOS Mirror pid found but process dead, cleaning up"
      rm -f $PIDFILE
   fi
else
   echo "No CentOS Mirror Process Detected"
fi
echo $$ > $PIDFILE

# wget + ftp = .listing files
find $LOCAL -name ".listing" -delete

echo -n "CentOS Mirror Started at "
date

# Download, set up rights
$WGET $WGET_OPTS $MIRROR -P $LOCAL
$CHOWN -R apache:apache $LOCAL
$CHMOD -R 755 $LOCAL

echo -n "CentOS Mirror Ended at "
date
rm -f $PIDFILE
find $LOCAL -name ".listing" -delete

On remarquera que c'est grosso modo la même chose, la version wget générant des fichiers .listing pour le téléchargement récursif, je les efface avant et après coup, au cas où. Comme mon miroir est aussi dispo en http, je rend le tout accessible pour l'utilisateur apache. Ce dernier script reste cependant à améliorer, car contrairement à rsync, il n'efface pas les fichiers présents en local mais disparus du miroir distant.

Propulsé par Dotclear