Comment sauvegarder des données sur un service de stockage d’objets avec le client Restic Backup

introduction

Restic est un client de sauvegarde sécurisé et efficace écrit en langage Go. Il peut sauvegarder des fichiers locaux dans un certain nombre de référentiels principaux, tels qu'un répertoire local, un serveur SFTP ou un service de stockage d'objets compatible S3.

Dans ce tutoriel, nous allons installer Restic et initialiser un référentiel sur un service de stockage d'objets. Nous allons ensuite sauvegarder certains fichiers dans le référentiel. Enfin, nous allons automatiser nos sauvegardes pour prendre des instantanés toutes les heures et élaguer automatiquement les anciens instantanés lorsque cela est nécessaire.

Conditions préalables

Pour ce didacticiel, vous avez besoin d’un ordinateur UNIX avec certains fichiers que vous souhaitez sauvegarder. Bien que Restic soit disponible pour Mac, Linux et Windows, les commandes et techniques utilisées dans ce tutoriel ne fonctionneront que sur MacOS et Linux.

Restic nécessite une bonne quantité de mémoire pour s'exécuter. Vous devez donc disposer d'au moins 1 Go de RAM pour éviter les erreurs de réception.

Vous aurez également besoin de connaître les détails suivants concernant votre service de stockage d'objets:

  • Clef d'accès

  • Clef secrète

  • URL du serveur

  • Nom du seau

Si vous utilisez le service de stockage d'objetsDigitalOcean Spaces, vous pouvez configurer un espace et obtenir toutes les informations ci-dessus en suivant notre tutorielHow to Create a DigitalOcean Space and API Key.

Une fois que vous avez les informations de stockage d’objets, passez à la section suivante pour installer le logiciel Restic.

Installation du client Restic Backup

Restic est disponible en tant qu'exécutable précompilé pour de nombreuses plateformes. Cela signifie que nous pouvons télécharger un seul fichier et l'exécuter, sans gestionnaire de paquet ni dépendance.

Pour trouver le bon fichier à télécharger, utilisez d'abord votre navigateur Web pour accéder àRestic’s release page on GitHub. Vous trouverez une liste de fichiers sous l'en-têteDownloads.

Pour un système Linux 64 bits (l'environnement de serveur le plus courant), vous voulez que le fichier se termine par_linux_amd64.bz2.

Pour MacOS, recherchez le fichier avec_darwin_amd64.bz2.

Cliquez avec le bouton droit sur le fichier correspondant à votre système, puis choisissezCopy Link Address (le libellé peut être légèrement différent dans votre navigateur). Cela copiera l'URL de téléchargement dans votre presse-papiers.

Ensuite, dans une session de terminal sur l'ordinateur que vous sauvegardez (s'il s'agit d'une machine distante, vous devrez peut-être d'abord vous connecter via SSH), assurez-vous que vous êtes dans votre répertoire personnel, puis téléchargez le fichier aveccurl:

cd ~
curl -LO https://github.com/restic/restic/releases/download/v0.7.3/restic_0.7.3_linux_amd64.bz

Décompressez le fichier que nous avons téléchargé:

bunzip2 restic*

Copiez ensuite le fichier dans/usr/local/bin et mettez à jour ses autorisations pour le rendre exécutable. Nous devrons utilisersudo pour ces deux actions, car un utilisateur normal n'a pas la permission d'écrire dans/usr/local/bin:

sudo cp restic* /usr/local/bin/restic
sudo chmod a+x /usr/local/bin/restic

Vérifiez que l'installation a réussi en appelant la commanderestic sans argument:

restic

Certains textes d’aide devraient s’afficher à l’écran. Si tel est le cas, le binairerestic a été installé correctement. Nous allons ensuite créer un fichier de configuration pour Restic, puis initialiser notre référentiel de stockage d’objets.

Création d'un fichier de configuration

Restic a besoin de connaître notre clé d’accès, notre clé secrète, les détails de la connexion de stockage d’objets et le mot de passe du référentiel afin d’initialiser un référentiel dans lequel nous pourrons ensuite sauvegarder. Nous allons mettre ces informations à la disposition de Restic en utilisantenvironment variables.

Les variables d'environnement sont des informations que vous pouvez définir dans votre shell et qui sont transmises aux programmes que vous exécutez. Par exemple, chaque programme que vous exécutez sur la ligne de commande peut voir votre variable d'environnement$PWD, qui contient le chemin du répertoire courant.

Il est courant d’insérer des jetons et des mots de passe sensibles dans les variables d’environnement, car leur spécification sur la ligne de commande n’est pas sécurisée. Comme nous allons automatiser nos sauvegardes plus tard, nous enregistrerons ces informations dans un fichier où notre script pourra y accéder.

Commencez par ouvrir un fichier dans votre répertoire personnel:

nano ~/.restic-env

Cela ouvrira un fichier vide avec l'éditeur de texte denano. Lorsque nous aurons terminé, le fichier sera composé de quatre commandesexport. Ces instructionsexport définissent les variables d'environnement et les rendent disponibles à tous les programmes que vous exécuterez à l'avenir:

restic-env
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export RESTIC_REPOSITORY="s3:server-url/bucket-name"
export RESTIC_PASSWORD="a-strong-password"

Les clés d'accès et secrètes seront fournies par votre service de stockage d'objets. Vous souhaiterez peut-être générer un ensemble unique de clés uniquement pour Restic, afin que l'accès puisse être facilement révoqué au cas où les clés seraient perdues ou compromises.

Un exemple de valeurRESTIC_REPOSITORY serait:s3:nyc3.digitaloceanspaces.com/example-bucket. Si vous devez vous connecter à un serveur sur un port non standard ou via HTTP non sécurisé uniquement, incluez ces informations dans l'URL comme sis3:http://example-server:3000/example-bucket.

RESTIC_PASSWORD définit un mot de passe que Restic utilisera pour crypter vos sauvegardes. Ce chiffrement est local, vous pouvez donc sauvegarder sur un serveur hors site non fiable sans vous soucier du contenu de vos fichiers exposés.

Vous devez choisir ici un mot de passe fort et le copier dans un endroit sûr pour la sauvegarde. Une façon de générer un mot de passe aléatoire fort consiste à utiliser la commandeopenssl:

openssl rand -base64 24
Outputj8CGOSdz8ibUYK137wtdiD0SJiNroGUp

Cela génère une chaîne aléatoire de 24 caractères, que vous pouvez copier et coller dans le fichier de configuration.

Une fois que toutes les variables sont correctement remplies, enregistrez et fermez le fichier.

Initialisation du référentiel

Pour charger la configuration dans notre environnement shell, noussource le fichier que nous venons de créer:

source ~/.restic-env

Vous pouvez vérifier que cela fonctionne en imprimant l'une des variables:

echo $RESTIC_REPOSITORY

L'URL de votre référentiel doit être imprimée. Nous pouvons maintenant initialiser notre référentiel avec la commande Restic:

restic init
Outputcreated restic backend 57f73c1afc at s3:nyc3.digitaloceanspaces.com/example-bucket

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

Le référentiel est maintenant prêt à recevoir les données de sauvegarde. Nous enverrons ces données ensuite.

Sauvegarder un répertoire

Maintenant que notre référentiel de stockage d'objets distant est initialisé, nous pouvons y transférer des données de sauvegarde. En plus du cryptage, Restic diffère et déduplique lors de la sauvegarde. Cela signifie que notre première sauvegarde sera une sauvegarde complète de tous les fichiers, et que les sauvegardes suivantes devront uniquement transmettre de nouveaux fichiers et modifications. De plus, les données en double seront détectées et non écrites dans le backend, ce qui économise de l'espace.

Avant de sauvegarder, si vous testez des éléments sur un système vierge et que vous avez besoin de quelques exemples de fichiers à sauvegarder, créez un simple fichier texte dans votre répertoire personnel:

echo "sharks have no organs for producing sound" >> ~/facts.txt

Cela créera un fichierfacts.txt. Maintenant, sauvegardez-le avec le reste de votre répertoire personnel:

restic backup ~
Outputscan [/home/sammy]
scanned 4 directories, 14 files in 0:00
[0:04] 100.00%  2.558 MiB/s  10.230 MiB / 10.230 MiB  18 / 18 items  0 errors  ETA 0:00
duration: 0:04, 2.16MiB/s
snapshot 427696a3 saved

Restic travaillera quelques instants, vous montrant les mises à jour de l’état en cours de route, puis affiche l’ID du nouvel instantané (mis en évidence ci-dessus).

[.note] #Note: Si vous souhaitez sauvegarder un répertoire différent, remplacez les~ ci-dessus par le chemin du répertoire. Vous devrez peut-être utilisersudo devantrestic backup si le répertoire cible n'appartient pas à votre utilisateur. Si vous avez besoin desudo pour sauvegarder, n'oubliez pas de l'utiliser à nouveau lors de la restauration de l'instantané, sinon vous risquez d'obtenir des erreurs concernant l'impossibilité de définir correctement les autorisations.
#

Nous allons ensuite apprendre à trouver plus d’informations sur les instantanés stockés dans notre référentiel.

Liste des instantanés

Pour lister les sauvegardes stockées dans le référentiel, utilisez la sous-commandesnapshots:

restic snapshots
OutputID        Date                 Host         Tags        Directory
----------------------------------------------------------------------
427696a3  2017-10-23 16:37:17  restic-test              /home/sammy

Vous pouvez voir l'ID d'instantané que nous avons reçu lors de notre première sauvegarde, un horodatage indiquant le moment où l'instantané a été pris, le nom d'hôte, les balises et le répertoire sauvegardé.

Notre colonneTags est vide, car nous n'en avons utilisé aucune dans cet exemple. Vous pouvez ajouter des balises à un instantané en incluant un indicateur--tag suivi du nom de la balise. Vous pouvez spécifier plusieurs balises en répétant l'option--tag.

Les balises peuvent être utiles pour filtrer les instantanés ultérieurement lorsque vous définissez des stratégies de rétention ou lorsque vous recherchez manuellement un instantané particulier à restaurer.

LeHost est inclus dans la liste car vous pouvez envoyer des instantanés de plusieurs hôtes vers un seul référentiel. Vous devrez copier le mot de passe du référentiel sur chaque ordinateur. Vous pouvez également configurer plusieurs mots de passe pour que votre référentiel bénéficie d'un contrôle d'accès plus détaillé. Vous pouvez trouver plus d'informations sur la gestion des mots de passe de référentiel dansthe official Restic docs.

Maintenant que nous avons un instantané téléchargé et que nous savons comment répertorier le contenu de notre référentiel, nous allons utiliser notre identifiant d'instantané pour tester la restauration d'une sauvegarde.

Restaurer un instantané

Nous allons restaurer un instantané complet dans un répertoire temporaire pour vérifier que tout fonctionne correctement. Utilisez un ID d'instantané de la liste de l'étape précédente. Nous enverrons les fichiers restaurés dans un nouveau répertoire dans/tmp/restore:

restic restore 427696a3 --target /tmp/restore
Outputrestoring  to /tmp/restore

Allez dans le répertoire et listez son contenu:

cd /tmp/restore
ls

Vous devriez voir le répertoire que nous avons sauvegardé. Dans cet exemple, ce serait le répertoire personnel de l’utilisateursammy. Entrez le répertoire restauré et listez les fichiers à l'intérieur:

cd sammy
ls
Outputfacts.txt  restic_0.7.3_linux_amd64

Notre fichierfacts.txt est là, avec le binaire restic que nous avons extrait au début du tutoriel. Imprimezfacts.txt à l'écran pour vous assurer que c'est ce que nous attendions:

cat facts.txt

Vous devriez voir le fait que nous avons mis précédemment dans le fichier requin. Ça a marché!

[.note] #Note: Si vous ne souhaitez pas restaurer tous les fichiers d’un instantané, vous pouvez utiliser les options--include et--exclude pour affiner votre sélection. Lisezthe Restore section of the Restic documentation pour en savoir plus.
#

Maintenant que nous savons que la sauvegarde et la restauration fonctionnent, automatisons la création de nouveaux instantanés.

Automatisation des sauvegardes

Restic inclut une commandeforget pour aider à maintenir une archive en cours d'exécution des instantanés. Vous pouvez utiliserrestic forget --prune pour définir des politiques sur le nombre de sauvegardes à conserver quotidiennement, toutes les heures, toutes les semaines, etc. Les sauvegardes qui ne correspondent pas à la politique seront purgées du référentiel.

Nous utiliserons le service système decron pour exécuter une tâche de sauvegarde toutes les heures. Tout d’abord, ouvrez la crontab de votre utilisateur:

crontab -e

Vous serez peut-être invité à choisir un éditeur de texte. Sélectionnez votre favori - ounano si vous n'avez pas d'opinion - puis appuyez surENTER. La crontab par défaut pour votre utilisateur s'ouvrira dans votre éditeur de texte. Certains commentaires peuvent expliquer la syntaxe de crontab. À la fin du fichier, ajoutez ce qui suit à une nouvelle ligne:

crontab

. . .
42 * * * * . /home/sammy/.restic-env; /usr/local/bin/restic backup -q /home/sammy; /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7

Passons à travers cette commande. Le42 * * * * définit quandcron doit exécuter la tâche. Dans ce cas, il s'exécutera dans les 42eminute de chaquehour,day,month etday of week. Pour plus d'informations sur cette syntaxe, lisez notre tutorielHow To Use Cron To Automate Tasks.

Ensuite,. /home/sammy/.restic-env; équivaut àsource ~/.restic-env que nous avons exécuté précédemment pour charger nos clés et mots de passe dans notre environnement shell. Cela a le même effet dans notre crontab: les commandes suivantes sur cette ligne auront accès à ces informations.

/usr/local/bin/restic backup -q /home/sammy; est notre commande de sauvegarde Restic. Nous utilisons le chemin complet vers le binairerestic, car le servicecron ne recherchera pas automatiquement les commandes dans/usr/local/bin. De même, nous épelons explicitement le chemin du dossier de départ avec/home/sammy au lieu d'utiliser le raccourci~. Il est préférable d’être aussi explicite que possible lors de l’écriture d’une commande pourcron. Nous utilisons l'indicateur-q pour supprimer la sortie d'état de Restic, car nous ne serons pas là pour le lire.

Enfin,/usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7 élagera les anciens instantanés qui ne sont plus nécessaires en fonction des indicateurs de rétention spécifiés. Dans cet exemple, nous conservons des instantanés 24 heures sur 24 et 7 instantanés quotidiens. Il existe également des options pour les politiques hebdomadaires, mensuelles, annuelles et basées sur des balises.

Lorsque vous avez mis à jour la commande pour répondre à vos besoins, enregistrez le fichier et quittez l’éditeur de texte. La crontab sera installée et activée. Après quelques heures, exécutez à nouveaurestic snapshots pour vérifier que les nouveaux instantanés sont en cours de téléchargement.

Conclusion

Dans ce didacticiel, nous avons créé un fichier de configuration pour Restic avec les détails de notre authentification de stockage d’objets, utilisé Restic pour initialiser un référentiel, sauvegardé certains fichiers et testé la sauvegarde. Enfin, nous avons automatisé le processus avec Cron.

Restic a plus de flexibilité et plus de fonctionnalités que celles discutées ici. Pour en savoir plus sur Restic, jetez un œil à leursofficial documentation oumain website.

Related