Le script de sauvegarde prend en paramètre la configuration à charger, ainsi qu’une commande à exécuter.
- /home/backup/backup.sh ${configuration} ${commande}
#!/bin/sh # Example : # # backup an existing configuration : # backup.sh configuration incremental set -u set -e HOME=/home/backup/ # Source the configuration file, the file is expected to have thoses property # defined # # BACKUP_NAME : the name to the backup on the distant server # PATH_TO_BACKUP : an existing path to backup on the disk # TIME_BEFORE_FULL :how many time we need before starting a new full backup # ENC_KEYS : the gpg keys (coma separated) to encrypt the data with # CONFIGURATION=$1 . "${CONFIGURATION}" shift # This line will raise an error if the variable is not set. echo "Backuping to ${BACKUP_NAME}" # Create a file for the duplicity configuration # This file will be deleted once the script is executed # # The configuration file is generated on the fly in order to declare the name # to the backup path on the remote server. BACKUP_CONF=$(mktemp) trap 'rm -f "${BACKUP_CONF}"' EXIT BACKUP_NAME="${BACKUP_NAME}" envsubst < ${HOME}/config.json > "${BACKUP_CONF}" BACKUP="multi://${BACKUP_CONF}?mode=mirror&onfail=abort" # Transform the keys into the format expected by duplicity ENC_KEY=$(echo ${ENC_KEYS}| sed -e "s/,/ --encrypt-key /g") # The backup function with all the common settings # Arguments # - The duplicity target # - Other arguments to give to duplicity backup() { duplicity \ --name ${BACKUP_NAME} \ --archive-dir=${HOME}/cache \ --encrypt-key ${ENC_KEY} \ --file-prefix-manifest 'hot_' \ --file-prefix-signature 'hot_' \ --file-prefix-archive 'cold_' \ --full-if-older-than ${TIME_BEFORE_FULL} \ "$@" \ ${BACKUP} } # Restore a backup. We change the order here to set the backup before the other # arguments. restore() { shift 1 duplicity \ --name ${BACKUP_NAME} \ --archive-dir=${HOME}/cache \ --encrypt-key ${ENC_KEY} \ --file-prefix-manifest 'hot_' \ --file-prefix-signature 'hot_' \ --file-prefix-archive 'cold_' \ restore \ ${BACKUP} \ "$@" } case $1 in incremental|full) backup $* "${PATH_TO_BACKUP}" ;; restore) restore $* ;; *) backup $* ;; esac
Les sauvegardes configurées sont lues dans les fichiers .conf présents dans le répertoire /home/backup/
Attention
Les fichiers de configuration sont automatiquement installés lors de l’installation du système à partir du blog, les modifications seront écrasées lors du prochain déploiement.
Commandes
| Commande | Description |
|---|---|
| collection-status | Affiche la liste des sauvegardes réalisées |
| collection-status | grep Full | Affiche uniquement la date de la première sauvegarde de la chaîne |
| incremental | Réalise une sauvegarde incrémentale (sauf si la durée définie dans le fichier de configuration est atteinte) |
| --full | Crée une nouvelle sauvegarde complète. |
| --force remove-all-but-n-full 4 | Supprime les anciennes sauvegardes pour ne conserver que 4 chaines completes. |
Lancer la commande manuellement
La commande est prévue pour être exécutée via la tâche planifiée. Si celle-ci doit être lancée manuellement, il est nécessaire de préparer les variables d’environnement GNUPGHOME et HOME :
GNUPGHOME=/root/.gnupg HOME=/home/backup/ sudo --preserve-env=GNUPGHOME,HOME /home/backup/backup.sh ${configuration} ${action}
Configuration
Exemple de configuration de sauvegarde :
BACKUP_NAME=${nom de la sauvegarde} PATH_TO_BACKUP=${répertoire à sauvegarder} ENC_KEYS=${clef GPG} TIME_BEFORE_FULL=3M
La sauvegarde se base également sur le fichier /home/backup/config.json qui contient les clefs d’accès à OVH et défini les serveurs distants.
Planification
Tous les fichiers de configuration présents dans /home/backup/ sont pris en compte :
- /etc/systemd/system/backup.service
[Unit] Description=Backup with duplicity After=network-online.target Wants=network-online.target [Service] Type=simple ExecStartPre=sh -c 'while ! ping -c 1 example.com; do sleep 1; done' ExecStart=systemd-inhibit \ --who 'backup' \ --why 'Sauvegarde en cours' \ --mode block \ sh -c 'find /home/backup/ -name '*.conf' -print0 | xargs -0 -I @ /home/backup/backup.sh @ incremental'
Journal des actions
Les journaux des dernières sauvegardes peuvent être consultés à cette adresse ou avec la commande suivante :
sudo journalctl -u backup
Timer
La sauvegarde se déclenche une fois par semaine
- /etc/systemd/system/backup.timer
[Unit] Description=Weekly backup [Timer] OnCalendar=weekly AccuracySec=12h Persistent=true OnBootSec=5mn [Install] WantedBy=timers.target
GPG
Les sauvegardes sont chiffrées à l’aide de gpg. Les sauvegardes étant lancées avec le compte root, il est nécessaire que l’utilisateur dispose de la clef publique associée pour pouvoir chiffrer les fichiers.
Voir l’article Mettre à jour les clefs GPG