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.
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 lancé en crontab hebdomadaire :
0 3 * * 0 /mon_rep_de_scripts/rsync_Raid.sh>> /mon_rep_de_log/rsync_Raid.log 2>&1
#!/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 "################################################################################################"
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.
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