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" :
Avant de commencer, cliquez sur "Verify now" au niveau de "Email verification required" puis suivre les instructions :
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 :
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" :
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 :
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 :
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