Blog & Astuces

Mettre en place une sauvegarde de ses données avec Restic et Google Drive

Mettre en place une sauvegarde de ses données avec Restic et Google Drive

Tuto

Dans ce tutoriel, je vais expliquer comment mettre en place une sauvegarde de fichiers avec Restic, et stocker cette sauvegarde dans Google Drive. Cela peut permettre de sauvegarder les données stockées sur un serveur ou un NAS par exemple. A la fin, j'expliquerais comment l'automatiser en mettant en place la mise à jour de la sauvegarde chaque semaine.

Auparavant, j'avais écrit le même article mais qui présente comment mettre en place une sauvegarde sur le service Backblaze B2.

Présentation de Restic

Restic est un utilitaire en ligne de commande, très simple à utiliser, qui permet de réaliser des sauvegardes de fichiers et de dossiers.

Restic s'appuie pour cela sur la notion de repository qui correspond aux endroits où sont stockées les sauvegardes : cela peut être des disques dur locaux, des services dans le Cloud, etc.

Restic essaye de compresser au maximum les données sauvegardées pour optimiser l'espace de stockage qu'il utilise. De plus, les sauvegardes sont par défauts chiffrées avec un mot de passe, qui est demandé lors de la mise en place d'un repository.

Restic prend en charge également la déduplication qui permet d'éviter de sauvegarder les fichiers qui ne changent pas en double, ceci afin de réduire au maximum le stockage utilisé par les sauvegardes.

Restic prend en charge Windows, Linux et Mac OS, mais le tutoriel se concentrera sur l'utilisation de Linux.

Installation de Restic

Télécharger la release en fonction de l'OS ici : https://github.com/restic/restic/releases/latest

Pour Linux le fichier est nommé sous la forme : restic_x.x.x_linux_amd64.bz2

Exemple, pour télécharger la version 0.17.0, utilisez cette commande :

wget https://github.com/restic/restic/releases/download/v0.17.0/restic_0.17.0_linux_amd64.bz2 -O restic.bz2

Puis décompresser le binaire de Restic, lancez la commande :

bunzip2 restic.bz2

Puis rendre le binaire exécutable :

chmod +x restic

Puis, déplacez le binaire de Restic dans le dossier /usr/local/bin pour le rendre utilisable, avec cette commande :

sudo mv restic /usr/local/bin

Vérifiez ensuite que l'installation se soit bien faite avec la commande :

restic version

Qui doit afficher quelque chose du genre :

restic x.x.x compiled with goX.X.X on linux/amd64

Restic peut être mis à jour avec la commande suivante :

sudo restic self-update

Installation de Rclone

Afin de pouvoir fonctionner avec Google Drive, Restic s'appuie sur l'utilitaire en ligne de commandes Rclone qui permet de traiter différents services de stockage dans le cloud dont Google Drive.

Pour installer Rclone, se référer au site officiel

Sur Linux, il suffit de lancer la commande suivante :

sudo -v ; curl https://rclone.org/install.sh | sudo bash

Puis pour mettre à jour Rclone quand une nouvelle version sort :

sudo rclone selfupdate

Configuration de Rclone

Avant de s'attaquer à la configuration de Restic, il faut d'abord configurer Rclone pour se connecter à votre compte Google Drive.

Pour cela, lancez la commande suivante :

rclone config

Tapez ensuite n puis Entrée pour créer un nouveau remote (New remote).

Entrez le nom que vous voulez pour le remote, par exemple gdrive.

Repérez le numéro du service Google Drive parmi la liste affichée par Rclone. A date d'écriture de ce tutoriel, il s'agit du numéro 17. Entrez donc ce numéro, puis appuyez sur Entrée.

Ensuite, Rclone vous explique que vous devez entrer votre propre Application Client Id. Cette étape est entièrement optionnelle, car Rclone s'appuie sur son propre Client Id, mais vous pouvez en générer un vous-même en créant une application de test gratuitement dans Google Cloud. Cela permet d'éviter de dépasser les quotas d'utilisation d'API car la clé de base de Rclone est partagée par tous les utilistaurs de Rclone. Plus d'infos ici pour générer votre propre Client Id.

Si vous ne souhaitez pas générer votre propre Client Id, n'entrez rien et appuyez sur Entrée. Pareil quand Rclone demande le Client Secret.

Ensuite, Rclone vous demande les droits que vous souhaitez lui accorder : dans le cadre de la sauvegarde avec Restic, il faut donner l'ensemble des droits à Rclone. Entrez donc 1 puis Entrée.

Puis, à Service Account File, laissez vide et appuyez sur Entrée.

Ensuite, Rclone va vous demander de vous authentifier à votre compte Google. Il vous demande si la machine sur laquelle vous exécutez Rclone dispose d'un environnement graphique qui peut exécuter un navigateur web. Si c'est le cas, entrez y et authentifiez-vous.

Sinon, entrez n et Rclone vous donnera une commande à lancer sur un autre appareil qui peut exécuter Rclone avec un environnement graphique et un navigateur web, puis vous donnera un code à copier-coller sur l'appareil qui n'a pas d'environnement graphique. Plus d'infos ici.

Une fois cela effectué, la configuration de l'accès à Google Drive est terminée. Il reste à configurer et mettre en place Restic.

 Utilisation de Restic

Création du repository Restic sur le bucket

Créez un dossier puis un fichier d'environnement pour stocker les variables d'environnement qui seront utilisées par Restic :

cd ~
mkdir restic
cd restic
touch restic-env-gdrive

Puis entrez le contenu suivant dans le fichier :

export RCLONE_CONFIG="<chemin vers le fichier de config de Rclone>"
export RESTIC_REPOSITORY="rclone:gdrive:<chemin où stocker les sauvegardes>"
export RESTIC_PASSWORD_FILE=<chemin vers le fichier contenant le mot de passe>

Renseignez les valeurs comme suit :

  • RCLONE_CONFIG : le chemin vers le fichier de configuration de Rclone, sous la forme /home/<nom d'utilisateur>/.config/rclone/rclone.conf où le nom d'utilisateur est celui sous lequel a été effectuée la configuration De Rclone juste avant
  • RESTIC_REPOSITORY : correspond au chemin où stocker les fichiers de Restic. Remplacez gdrive par le nom que vous avez donné au remote lors de la configuration de Rclone.
  • passwordFile : chemin d'un fichier où sera stocké le mot de passe de Restic

Créez ensuite le fichier qui stockera le mot de passe qui va permettre de sécuriser le repository et de le chiffrer, puis insérez le mot de passe dans le fichier.

Puis lancez les commandes suivantes pour sécuriser les deux fichiers de configuration (qui seront rendues lisibles que par l'utilisateur root) :

chown root:root <chemin vers le fichier restic-env-gdrive>
chown root:root <chemin vers le fichier contenant le mot de passe>
chmod 700 <chemin vers le fichier restic-env>
chmod 700 <chemin vers le fichier le mot de passe>

Puis initialiser le repository (nous nous mettons en root pour pouvoir lire le fichier d'environnement de restic que nous avons créé auparavant) :

sudo -s
source restic-env-gdrive
restic -r rclone:gdrive:<chemin où stocker les sauvegardes> init

Remplacer repository par celui paramétré dans le fichier restic-env.

Si tout s'est bien passé pour l'initialisation, vous verrez apparaître ce type de résultat :

created restic repository <id> at <repository>

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Sauvegarder un dossier ou un fichier

Pour sauvegarder un dossier ou un fichier, il suffit d'utiliser la commande restic backup en mentionnant le nom du repository, comme suit :

sudo -s
source restic-env-gdrive
restic -r rclone:gdrive:<chemin où stocker les sauvegardes> backup <chemin vers le dossier ou le fichier à sauvegarder stocké sur l'appareil>

Vous pouvez ensuite vérifier la sauvegarde avec la commande restic -r rclone:gdrive:<chemin où stocker les sauvegardes> snapshots.

Mettre en place une tâche planifiée pour mettre à jour la sauvegarde chaque semaine

Créer un script nommé backup-restic-gdrive dans le dossier /etc/cron.weekly de cette manière avec le contenu suivant :

#!/bin/bash
source /CHEMIN/VERS/LE/FICHIER/restic-env-gdrive
echo "--------------------------------" >> /var/log/restic-gdrive.log
date >> /var/log/restic-gdrive.log
echo "--------------------------------" >> /var/log/restic-gdrive.log
echo "Backup:" >> /var/log/restic-gdrive.log
echo "" >> /var/log/restic-gdrive.log
/usr/local/bin/restic -r rclone:gdrive:<chemin où stocker les sauvegardes> backup --tag <tag du backup> <chemin vers le dossier ou le fichier à sauvegarder> >> /var/log/restic-gdrive.log 2>&1
echo "" >> /var/log/restic-gdrive.log
echo "Prune:" >> /var/log/restic-gdrive.log
echo "" >> /var/log/restic-gdrive.log
/usr/local/bin/restic forget --tag <tag du backup> --keep-last 2 --prune >> /var/log/restic-gdrive.log 2>&1

Cela permettra de mettre à jour la sauvegarde chaque semaine. Comme Restic fonctionne avec de la déduplication, seuls les nouveaux dossiers ou les fichiers qui ont changé seront ajoutés à la sauvegarde. Nous nommons le backup avec un tag, afin de pouvoir nettoyer les plus anciens backups avec la commande forget pour gagner de l'espace (on garde les deux derniers snaphosts). Les logs de Restic seront écrits à l'emplacement /var/log/restic-gdrive.log pour avoir une trace des exécutions.

Vous pouvez aussi recevoir une alerte si le script ne s'est pas exécuté correctement en suivant mon autre tuto.

Mise en place d'une vérification de santé périodique

Il est conseillé également de lancer de temps en temps la commande restic check pour vérifier la santé de la sauvegarde.

Vous pouvez vous inspirer de ce script qui envoie une alerte en cas d'erreur lors de la vérification de santé, à l'aide de la solution OPSGenie (version gratuite disponible) :

#!/bin/bash

source /CHEMIN/VERS/LE/FICHIER/restic-env-gdrive

# Clé API OpsGenie
opsgenie_api_key="API-KEY-OPSGENIE"

# Fonction pour envoyer une alerte via OpsGenie
send_ops_genie_alert() {
    curl -X POST https://api.eu.opsgenie.com/v2/alerts \
        -H "Content-Type: application/json" \
        -H "Authorization: GenieKey $opsgenie_api_key" \
        -d \
    "{
        \"message\": \"Problème de santé du repository Restic\",
        \"alias\": \"Restic Repository Check\",
        \"description\": \"La vérification de santé du repository Restic a échoué. Vérifiez l'état du repository.\",
        \"responders\": [
            {\"username\": \"[email protected]\", \"type\": \"user\"}
        ],
        \"tags\": [\"Critical\"],
        \"details\": {\"date_check\": \"$(date)\"},
        \"priority\": \"P1\"
    }"
}

# Vérification du repository Restic
/usr/local/bin/restic -r rclone:gdrive:<chemin où stocker les sauvegardes> check --read-data-subset=10%

# Si la vérification échoue, envoyer une alerte
if [ $? -ne 0 ]; then
    send_ops_genie_alert
fi

read-data-subset permet de lire une partie des fichiers stockés dans la sauvegarde sur Google Drive (ici 10%) afin de vérifier s'ils ne sont pas corrompus.

Activer ensuite la vérification périodique qui va exécuter ce script chaque mois :

sudo crontab -e

Puis entrez ce contenu à la fin du fichier crontab :

0 5 1 * * /CHEMIN/VERS/LE/SCRIPT/DE/VERIFICATION

Tester la restauration d'un fichier

Pour restaurer un fichier, il faut utiliser la commande restic restore comme suit :

restic -r rclone:gdrive:<chemin où stocker les sauvegardes> restore <snapshot ID> --target /tmp/restore-work

Pour récupérer le snapshot ID, vous pouvez utiliser la commande restic -r rclone:gdrive:<chemin où stocker les sauvegardes> snapshots comme nous l'avons fait plus tôt.

 Conclusion

Grâce à Restic, Rclone et Google Drive, nous avons pu mettre en place une sauvegarde de fichiers de manière simple. La mise en place d'une sauvegarde peut s'avérer importante pour éviter une perte de données accidentelle.

Commentaires