Blog & Astuces

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

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

Tuto

Dans ce tutoriel, je vais expliquer comment mettre en place une sauvegarde de fichiers avec Restic, et stocker cette sauvegarde dans le service cloud Backblaze B2. 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.

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.

 Présentation de Backblaze

Backblaze est une entreprise fournissant un service de stockage dans le cloud à des tarifs plutôt compétitifs. J'ai choisi ce service pour ses tarifs, et je ne suis pas affilié à Backblaze (un tutoriel sur l'utilisation de Restic avec Google Drive sera publié prochainement).

Le prix dépend de la taille de stockage utilisée : il est d'environ 7$/mois pour 1 To de stockage. Si vous utilisez moins, vous payez moins. La version gratuite propose 10 Go de stockage et un certains nombres d'utilisation de l'API.

Le service est de plus très simple à utiliser et à intégrer à Restic.

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

 Utilisation de Backblaze

 Création d'un compte

S'inscrire sur Backblaze à l'adresse suivante : https://www.backblaze.com/sign-up/cloud-storage

 Créer un bucket

Après s'être inscris à Backblaze, créer un bucket dans B2 Cloud Storage :

https://secure.backblaze.com/b2_buckets.htm

Cliquez sur "Créer un bucket" :

Backblaze

Avant de commencer, cliquez sur "Verify now" au niveau de "Email verification required" puis suivre les instructions :

Backblaze

Ensuite, retourner sur la page des buckets pour créer un bucket. Donnez-lui un nom, puis laisser les valeurs des autres champs tels quels puis validez :

Backblaze

Ensuite, une fois le bucket créé, cliquez sur "Paramètres de cycle de vie" (Lifecycle settings) et cochez "Conserver uniquement la dernière version du fichier" ("Keep only the last version of the file"), afin d'éviter de stocker inutilement de précédentes versions des fichiers (Restic gère cela lui même).

 Génération des clés d'API pour le bucket

Accéder à la page de gestion des clés d'API :

https://secure.backblaze.com/app_keys.htm

Puis créez une clé d'API pour le bucket en cliquant sur "Ajouter une nouvelle clé d'application" :

Backblaze

Entrez ensuite un nom quelconque, puis sélectionnez le bucket que vous avez créé auparavant. Sélectionner le type d'accès à "Lecture et écriture", laissez les autres options par défaut puis cliquez sur "Create new key" en bas de la fenêtre :

Backblaze

Vous verrez ensuite appraître les deux clés qui seront nécessaires pour gérer les backups, notez les quelques part car elle n'apparaissent qu'une seule fois ici :

Backblaze

Facturation

La version gratuite de Backblaze est limitée à 10 Go d'utilisation et un certain nombre de requêtes API par mois. Si vous souhaitez utiliser plus de stockage, vous devez enregistrer vos coordonnées bancaires sur la page Facturation de votre compte.

 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

Puis entrez le contenu suivant dans le fichier :

export AWS_ACCESS_KEY_ID=<keyID>
export AWS_SECRET_ACCESS_KEY=<applicationKey>
export RESTIC_REPOSITORY=<repository URL>
export RESTIC_PASSWORD_FILE=<passwordFile>

Renseignez les valeurs comme suit :

  • keyId et applicationKey : les clés que vous avez vu s'afficher lors de la création de la clé précedemment
  • repository URL : correspond au serveur de Backblaze. Cela dépend de celui que vous avez choisi lors de la création de votre compte. Il apparaît au niveau du bucket (screen 7). Il doit être de la forme suivante : "s3:[adresse du serveur Backblaze]/[nom du bucket]"
  • 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>
chown root:root <chemin vers le fichier restic-password>
chmod 700 <chemin vers le fichier restic-env>
chmod 700 <chemin vers le fichier restic-password>

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
restic -r <repository URL> 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 URL>

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
restic -r <repository URL> backup <chemin vers le dossier ou le fichier à sauvegarder>

Vous pouvez ensuite vérifier la sauvegarde avec la commande restic -r <repository URL> snapshots.

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

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

#!/bin/bash
source /CHEMIN/VERS/LE/FICHIER/restic-env
echo "--------------------------------" >> /var/log/restic.log
date >> /var/log/restic.log
echo "--------------------------------" >> /var/log/restic.log
echo "Backup:" >> /var/log/restic.log
echo "" >> /var/log/restic.log
/usr/local/bin/restic -r <repository URL> backup --tag <tag du backup> <chemin vers le dossier ou le fichier à sauvegarder> >> /var/log/restic.log 2>&1
echo "" >> /var/log/restic.log
echo "Prune:" >> /var/log/restic.log
echo "" >> /var/log/restic.log
/usr/local/bin/restic forget --tag <tag du backup> --keep-last 2 --prune >> /var/log/restic.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.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

# 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 <repository URL> check

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

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 <repository URL> restore <snapshot ID> --target /tmp/restore-work

Pour récupérer le snapshot ID, vous pouvez utiliser la commande restic snapshots comme nous l'avons fait plus tôt.

 Conclusion

Grâce à Restic et Backblaze, 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