Sauvegarde hebdomadaire de données sous NetBSD

By | 19 août 2010

backup-planVoici une méthode automatique et simple, car elle n’utilise que des outils de base du système NetBSD, permettant de réaliser un backup modulable de disques.

Cette méthode est basique et ne repose que sur l’utilisation de crontab pour lancer un script Shell, lui même manipulant les utilitaires dump et gzip.
La destination du backup peut être ici soit des disques externes en USB/Firewire, des cartouches (très old school), ou encore des points de montage distants via NFS – peut être pas la meilleure solution néanmoins. Après adaptation légère, la destination peut aussi être un espace de stockage FTP par exemple, néanmoins cette manipulation ne sera pas traitée ici – mais peut être dans un billet ultérieur.
La source à sauvegarder est par défaut la machine qui lance le script. Là encore, il est possible, après avoir redéfini certaines variables du fichier de script, de sauvegarder les données d’une machine distante.

Par défaut, durant les trois premières semaines du mois, une sauvegarde incrémentale est opérée. La séquence des sauvegardes incrémentales est ici la plus simple possible, au détriment d’utiliser un peu plus d’espace disque que d’autres stratégies plus élaborées, telle que celle de la Tour d’Hanoi par exemple. Un backup complet est lui programmé la dernière semaine du mois.

 

    1. Script de backup
      L’adaptation des variables dans l’entête du script est laissée à la discrétion du lecteur.

#!/bin/sh
# This script must be set up in a cron job on a week basis

COMPUTER="`uname -n`" # name of this computer
MOUNT_DIRS="/ /var /home" # directories to backup (whitespace is a path delimiter)
BACKUP_DIR="/dump/backups" # where to store the backups
GZIP=/usr/bin/gzip # name and locaction of the GNU Zip
DUMP=/sbin/dump # name and location of Dump

# This is the day of week (0..6), where 0 is Monday
DAY_OF_WEEK=$((`date +%u`-1))
# This is the day of month (1..31).
DAY_OF_MONTH=`date +%e`
# This is the number of empty spaces at the beginning of month
OFFSET=$(((${DAY_OF_WEEK} + 36 - ${DAY_OF_MONTH}) % 7 ))
# This is the week of month (0..5).
WEEK_OF_MONTH=$(((${DAY_OF_MONTH} + ${OFFSET} - 1) / 7))

# On the 1st week of the month a permanent full backup is made.
# The other weeks an incremental backup is performed.

echo -n "Week ${WEEK_OF_MONTH}... "
if [ ${WEEK_OF_MONTH} -eq 1 ]; then # weekly full backup
# Set the dump level, 0 = full and others are incremental
DUMP_LEVEL=0
NAME="full"

# Remove past updates and the latest full backup
rm -f $BACKUP_DIR/$COMPUTER.*.gz
echo "full backup selected"
else #make incremental backup
# The interim week 0 is transformed into week 5 in order to get a full row of backups for a month
if [ ${WEEK_OF_MONTH} -eq 0 ]; then
WEEK_OF_MONTH=5
fi
# Set the dump level, 0 = full and others are incremental
DUMP_LEVEL=$((${WEEK_OF_MONTH}-1))
NAME="update.${DUMP_LEVEL}"

echo "incremental backup selected"
fi

# Check if the backup folder already exists
if [ ! -d "${BACKUP_DIR}" ];
then
mkdir -p "${BACKUP_DIR}"
fi

# Cycle through every mount point to backup
for DIRECTORY in ${MOUNT_DIRS}
do

echo "dumping $DIRECTORY..."
$DUMP
-${DUMP_LEVEL}
-a -n -u -f -
$DIRECTORY
| $GZIP > ${BACKUP_DIR}/$COMPUTER.`echo $DIRECTORY | tr -d "/"`.$NAME.gz

done

echo "done."

  1. (Optionnel) Drapeau pour dump dans fstab
    Non traité ici, voir la documentation de /etc/fstab pour configurer les drapeaux de dump des partitions. Préciser les drapeaux de dump est en revanche obligatoire si on omet de préciser les points de montage à sauvegarder dans le script.
  2. Programmation de la sauvegarde
    Cette nouvelle tâche devra évidemment s’exécuter avec des droits root, ou du moins être lancée par un utilisateur ayant des droits suffisant pour copier l’intégralité d’un disque.
    Sous NetBSD, il peut être utile d’intégrer cette sauvegarde à la liste des tâches hebdomadaires qui existent déjà pour le système. Dans ce cas, éditer le fichier /etc/weekly.local et ne pas modifier directement la configuration de crontab.

echo "nice -n 10 /bin/sh /usr/local/sbin/backup_system.sh" >> /etc/weekly.local

/usr/local/sbin/backup_system.sh est le chemin complet du script Shell présenté ci-dessus.
Sinon, il faudra rajouter manuellement une nouvelle entrée à la configuration de crontab

crontab -e

rajouter la ligne suivante afin de lancer le script tous les 7 jours après démarrage de la machine, à 4h30 locale:

30 4 * * */7 /usr/bin/nice /bin/sh /usr/local/sbin/backup_system.sh

La restauration des sauvegardes fera l’objet d’un billet séparé.

One thought on “Sauvegarde hebdomadaire de données sous NetBSD

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *