Table des matières
Backup raid
Sauvegarde locale
Objectif
Le raid 1 offre une solution haute disponibilité face à une panne matériel disque.
Pour consolider la sauvegarde face à une suppression (volontaire ou non) il est nécessaire d'ajouter un backup historisé des données.
Solution technique
La recopie des données est assurées par rsync.
La gestion de l'historisation est assurée avec la notion de copie hard link (cp -al). En effet mon disque de backup n'est pas suffisement gros pour assurer une recopie complète n fois.
Attention le hard link permet certe de gagner de la place et de s'affranchir d'une suppression au sein des différentes versions de backup .. mais pas d'une modification : l'inode est le même = le fichier reste le même!
Le plan de sauvegarde est donc le suivant, à chaque itération :
Avec ça les données commencent à être au chaud
Shell de backup
Shell lancé en crontab hebdomadaire :
0 3 * * 0 /mon_rep_de_scripts/rsync_Raid.sh>> /mon_rep_de_log/rsync_Raid.log 2>&1
- rsync_Raid.sh
#!/bin/bash echo "################################################################################################" echo "################################################################################################" echo "[$(date "+%Y-%m-%d %H:%M:%S")] - Debut Sauvegarde" # Variables START_TIME=`date +%s` # Pour le compte rendu SOURCE="/mnt/Raid/" DEST="/mnt/disque_samsung/BACKUP_RAID" # Gestion des sauvegardes incrementales echo "[$(date "+%Y-%m-%d %H:%M:%S")] - Gestion des increments" rm -rf ${DEST}.4 mv ${DEST}.3 ${DEST}.4 mv ${DEST}.2 ${DEST}.3 mv ${DEST}.1 ${DEST}.2 cp -al ${DEST}.0 ${DEST}.1 # Lancement synchronisation des donnees source echo "[$(date "+%Y-%m-%d %H:%M:%S")] - Sauvegarde des donnees sources" RSYNC_OPTIONS="--verbose --progress --stats --archive --delete --one-file-system" RSYNC_OPTIONS="${RSYNC_OPTIONS} --exclude=/Dropbox --exclude=/Freebox --exclude=/Videos" # archive = recursive + links + perms + times + group + owner # For a dry run : RSYNC_OPTIONS="${RSYNC_OPTIONS} --dry-run" rsync ${RSYNC_OPTIONS} ${SOURCE} ${DEST}.0 # Compte rendu echo "[$(date "+%Y-%m-%d %H:%M:%S")] - Compte rendu de la sauvegarde" END_TIME=`date +%s` ELAPSED=`expr $END_TIME - $START_TIME` remainder="$(expr $ELAPSED % 3600)" hours="$(expr $(expr $ELAPSED - $remainder) / 3600)" seconds="$(expr $remainder % 60)" minutes="$(expr $(expr $remainder - $seconds) / 60)" echo "Fin du traitement : " `date` " Durée $hours H $minutes min $seconds sec" echo "################################################################################################" echo "################################################################################################"
Sauvegarde distante
Objectif
On a du RAID 1 pour la panne materiel et la haute dispo, une sauvegarde incrementale pour les erreurs de manip .. mais pour le vol ou l'incendie c'est un autre site physique de sauvegarde qu'il nous faut. Pourquoi? Parce qu'on peut.
Solution technique
Profitant d'un lien fibre à la maison ainsi que dans la famille et d'un disque MybookWorld rooté, la sauvegarde distante se base sur le script précédent en utilisant un rsync par dessus ssh :
Le script est à dupliquer et à modifier tel que :
rsync -e "ssh -pmon_port_d_ecoute -i ma_clef_rsa" ${RSYNC_OPTIONS} ${SOURCE} user@ip_distante:${DEST}
Un crontab dans la foulée est on est habillé pour l'hiver