1.  Jus de framboise

J'ai installé un serveur web pour partager les photos familiales en utilisant un raspberry. Il fonctionnait depuis 3 ans et je n'avais pas fait l'effort de mettre en place une sauvegarde .... Ce qui devait arriver est arrivé, une coupure électrique intempestive sans doute, une carte SD inutilisable. Heureusement j'avais installé les données sur DD en USB. Néanmoins cela a nécessité une réinstallation complète et la base de données était corrompue, il a donc fallu retrier les photos. J'ai donc décidé de copier mon système et de sauvegarder mes bases.

2.  Sauvegarde du système

C'est inspiré de developper-blog.net. Tout d'abord si vous n'avez pas déjà installé pv et pigz vous devez commencer par cela.

 % sudo apt-get install pv pigz

Ensuite il faut écrire un petit script bash /usr/local/bin/backup.sh par exemple.

#!/bin/bash

# On fixe le répertoire où l'on veut mettre la sauvegarde. A priori sur un disque USB monté ou une clef.
DIR=/var/www/SauvegardeImage

echo "Démarrage de la sauvegarde complète du RPI !"

#  Le répertoire existe t-il ?
if [ ! -d "$DIR" ];
   then
      echo "Le répertoire $DIR n'existe pas, création en cours ... !"
      mkdir $DIR
fi

# Creation d'un fichier daté
OFILE="$DIR/backup_$(date +%Y%m%d)"
OFILEFINAL=$OFILE.img.gz

# Synchronisation des disques
sync; sync

# On arrête les services avant le backup
# Vous devez adapter cela suivant les services lancés sur votre machine.
echo "Arrêt des services"
/usr/sbin/service nginx stop
/usr/sbin/service mysql stop
/usr/sbin/service cron stop
/usr/sbin/service php5-fpm stop

# On commence la sauvegarde
echo "Début de la sauvegarde. Soyez patient."
SDSIZE=`/sbin/blockdev --getsize64 /dev/mmcblk0`;
# dd pour le dump, pv pour le suivi en temps, pigz pour la compression
dd if=/dev/mmcblk0 obs=1M conv=sync,noerror iflag=fullblock | pv -tpreb -s $SDSIZE | pigz --fast > $OFILE
# On récupère  dans RESULT si cela s'est bien passé.
RESULT=$?
# Rédémarrage des services arrêtés
echo "On redémarre les services"
/usr/sbin/service nginx start
/usr/sbin/service mysql start
/usr/sbin/service cron start
/usr/sbin/service php5-fpm start
#  Cela a fonctionné on supprime l'ancienne sauvegarde
if [ $RESULT = 0 ];
   then
      rm -f $DIR/backup_*.img.gz
      mv $OFILE $OFILEFINAL
      echo "La sauvegarde est terminée. FICHIER :  $OFILEFINAL"
      exit 0
#  On supprime la tentative de sauvegarde
   else
      echo "Le backup n'a pas fonctionné. Le précédent est conservé"
      rm -f $OFILE
      exit 1
fi

Il faut maintenant ajouter cela à la table de cron. Mon système n'évoluant pas souvent, une sauvegarde mensuelle suffit. Le premier jour de chaque mois à 3h.

 % sudo crontab -e

On ajoute la ligne ci-dessous :

 0 3 1 * * /usr/local/bin/backup.sh 1>/var/www/log/backup_pi.log 2>&1

3.  Restauration

4.  Sauvegarder ses bases de données

automysqlbackup