Table of Contents
Création de snapshots de système de fichiers XFS
Table of Contents
L'atelier consiste à reprendre les données des répertoires /data/ops
et /data/petra
de l'ancien serveur vers le partage NFS du nouveau serveur, et d'ammorcer les snapshots
journaliers avec des liens physqiues comme POC.
Les dossiers dans lesquels sont hébergés ces liens sont libellés avec le numero du jour du mois
mkdir -pv /data/backups/{01..31}/ops /data/backups/{01..31}/petra
Contrairement aux snapshots btrfs ou xfs, les images créées avec cette méthode sont interdépendantes, les fichiers référencés avec un lien physique sont ceux de la source. Si on altère le source on altère le fichier référencé dans le dossier de backup et vice-versa, mais lorsqu'on détruit l'inode de la source le fichiers hard linked subsistent.
Les scripts de synchronisation
Les Scripts ont la même structure et déroulent le même algorithme:
- synchronisation du dossier
/data
de l'ancien serveur sur le partage nfs du nouveau serveur - si le sous-dossier existe dans le dossier du jour précédent1) on le détruit
- création du sous-dossier de la sauvegarde dans le dossier correspondant au jour précédent2)
- synchronisation des sous-dossiers sources(dossiers dans le partage nfs) dans les sous-dossiers de
backups/
du jour précédent3)
cat > ~/syncro-nfsshare-ops.sh << 'EOF' #!/bin/bash # Script pour faire un snapshot en utilisant les liens physiques set -o errexit set -o nounset set -o pipefail readonly SOURCE_DIR="/data/ops/" readonly BACKUP_DIR="/nfsshare/ops/" LC_TIME="fr_FR.UTF-8" BACKUP_PATH="/nfsshare/backups/$(date -d yesterday +%d)/ops/" rsync -av --delete ${SOURCE_DIR} ${BACKUP_DIR}>> /root/synchro-nfsshare-ops.log LC_TIME="fr_FR.UTF-8" TIMEFORMAT="Sauvegarde ${SOURCE_DIR} de "$(date -d yesterday +%A)" en %R secondes ..." { time { cd ${BACKUP_DIR} for _rep in */ ; do echo "ammorce de ${BACKUP_PATH}${_rep%/}/" LATEST_LINK="${BACKUP_PATH}${_rep%/}/" if [ -d "${LATEST_LINK}" ] then rm -rf "${LATEST_LINK}" fi mkdir -p "${LATEST_LINK}" # La commande cp ci-dessous equivaut à la commande rsync avec --link-dest # cp -al "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}" rsync -a --link-dest="${BACKUP_DIR}/${_rep}" "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}" touch "${LATEST_LINK}/$(date -d yesterday +%A-%w-%d)" done "$@" 2>&3 } } 3>&2 2>> /root/synchro-nfsshare-ops.log tail -n40 /root/synchro-nfsshare-ops.log | mailx -s "synchro nfsshare ops $(date)" -S smtp=smtp://smtp.oc.dgfip:25 -S from="esi.marseille.snsreseau@dgfip.finances.gouv.fr" esi.marseille.snsreseau@dgfip.finances.gouv.fr EOF
cat > ~/syncro-nfsshare-petra.sh << 'EOF' #!/bin/bash # Script pour faire un snapshot en utilisant les liens physiques set -o errexit set -o nounset set -o pipefail readonly SOURCE_DIR="/data/petra/" readonly BACKUP_DIR="/nfsshare/petra/" LC_TIME="fr_FR.UTF-8" BACKUP_PATH="/nfsshare/backups/$(date -d yesterday +%d)/petra/" rsync -av --delete ${SOURCE_DIR} ${BACKUP_DIR}>> /root/synchro-nfsshare-petra.log LC_TIME="fr_FR.UTF-8" TIMEFORMAT="Sauvegarde ${SOURCE_DIR} de "$(date -d yesterday +%A)" en %R secondes ..." { time { cd ${BACKUP_DIR} for _rep in */ ; do echo "ammorce de ${BACKUP_PATH}${_rep%/}/" LATEST_LINK="${BACKUP_PATH}${_rep%/}/" if [ -d "${LATEST_LINK}" ] then rm -rf "${LATEST_LINK}" fi mkdir -p "${LATEST_LINK}" # La commande cp ci-dessous equivaut à la commande rsync avec --link-dest # cp -al "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}" rsync -a --link-dest="${BACKUP_DIR}/${_rep}" "${BACKUP_DIR}/${_rep}" "${LATEST_LINK}" touch "${LATEST_LINK}/$(date -d yesterday +%A-%w-%d)" done "$@" 2>&3 } } 3>&2 2>> synchro-nfsshare-petra.log tail -n40 /root/synchro-nfsshare-petra.log | mailx -s "synchro nfsshare petra $(date)" -S smtp=smtp://smtp.oc.dgfip:25 -S from="esi.marseille.snsreseau@dgfip.finances.gouv.fr" esi.marseille.snsreseau@dgfip.finances.gouv.fr EOF
Les tests de synchronisation
Première synchronisation
source | cible | backup mercredi | |||
---|---|---|---|---|---|
chemin | volumétrie | chemin | volumétrie | chemin | volumétrie |
/data/petra | 929G | /data/petra | 929G | /data/backups/mercredi/petra | 929G |
/data/ops | 254G | /data/ops | 254G | /data/backups/merceredi/ops | 254G |
Total | 1,2T | 1,2T | 1,2T | ||
Sur Disque | 1,2T | 1,2T | <1G |
En regardant le fichier o51e/home/nagios/MegaSAS.log
on observe que les deux versions du fichier sont identiques (même inode, même taille et même date)
ls -ali /data/ops/o51e/home/nagios/MegaSAS.log 6232096771 -rw-r--r--. 1 root root 4827776011 28 déc. 20:40 /data/ops/o51e/home/nagios/MegaSAS.log ls -ali /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log 6232096771 -rw-r--r--. 1 root root 4827776011 28 déc. 20:40 /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log
Si on altère le contenu du clone de backup on s'aperçoit qu'on affecte aussi le fichier source, il s'agit bien d'un lien physique:
echo "ligne ajoutée">> /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log ls -ali /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log 6232096771 -rw-r--r--. 2 root root 4829513818 30 déc. 07:27 /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log ls -ali /data/ops/o51e/home/nagios/MegaSAS.log 6232096771 -rw-r--r--. 2 root root 4829513818 30 déc. 07:27 /data/ops/o51e/home/nagios/MegaSAS.log
Deuxième synchronisation
source | cible | backup mercredi | backup jeudi | ||||
---|---|---|---|---|---|---|---|
chemin | volumétrie | chemin | volumétrie | chemin | volumétrie | chemin | volumétrie |
/data/petra | 929G | /data/petra | 929G | /data/backups/mercredi/petra | 929G | /data/backups/Thirsday/petra | 929G |
/data/ops | 254G | /data/ops | 254G | /data/backups/merceredi/ops | 254G | /data/backups/Thirsday/ops | 254G |
Total | 1,2T | 1,2T | 1,2T | 1,2T | |||
Sur Disque | 1,2T | 1,2T | <1G | <1G |
En regardant le fichier o51e/home/nagios/MegaSAS.log
on observe:
ls -ali /data/ops/o51e/home/nagios/MegaSAS.log 6175290448 -rw-r--r--. 2 root root 4829513803 29 déc. 20:40 /data/ops/o51e/home/nagios/MegaSAS.log ls -ali /data/backups/Thursday/ops/o51e/home/nagios/MegaSAS.log 6175290448 -rw-r--r--. 2 root root 4829513803 29 déc. 20:40 /data/backups/Thursday/ops/o51e/home/nagios/MegaSAS.log ls -ali /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log 6232096771 -rw-r--r--. 1 root root 4827776011 28 déc. 20:40 /data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log
- que les fichier
/data/ops/o51e/home/nagios/MegaSAS.log
et/data/backups/Thursday/ops/o51e/home/nagios/MegaSAS.log
sont identiques (même inode, même taille et même date) - que le lien physique
/data/backups/mercredi/ops/o51e/home/nagios/MegaSAS.log
pointe vers l'ancien fichier, qui subsiste bien que la dernière synchronisation ait écrasé la source4).
Autres synchronisations
On observe une augmentation de la taille sur le disque dur, mais pas autant que le cumul des sauvegardes quotidiennes
Programmation des sauvegardes
Configuration de crontab
Pour ajouter aou modifier crontab utiliser la commande crontab -e
:
# minute heure jour-du-mois numero-du-mois jour-de-la-semaine(6=samedi) #0 8 25 8 6 rsync -avP /data/ops/o13e /data/ops-o13e-25aout2018/ 2>&1 >> /data/sauveOPS.log