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 ont la même structure et déroulent le même algorithme:
/data de l'ancien serveur sur le partage nfs du nouveau serveurbackups/ 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
| 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
| 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
/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)/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).On observe une augmentation de la taille sur le disque dur, mais pas autant que le cumul des sauvegardes quotidiennes
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