Cet article fait partie d’une sĂ©rie :

Introduction

Suite aux précédents articles sur les sauvegardes, cette 3Úme partie traitera de la mise en place de la sauvegarde sur un PC (testé sous Archlinux).

Note : Contrairement Ă  l’article sur la sauvegarde des serveurs, dans ce cas il ne sera pas nĂ©cessaire de crĂ©er un utilisateur dĂ©diĂ© ou de mettre en place des permissions particuliĂšres, car l’utilisateur ne sauvegardera que des fichiers de son home sur lesquels il dispose dĂ©jĂ  de tous les droits nĂ©cessaires.

Installation de Restic

Via un gestionnaire de paquet

$ sudo pacman -S restic
$ sudo apt install restic

Manuellement

Dans ce cas, le binaire de Restic sera installĂ© dans le home de l’utilisateur

  1. CrĂ©ation d’un rĂ©pertoire bin dans le home :
$ mkdir $HOME/bin
  1. DĂ©ploiement de Restic (pensez Ă  adapter l’URL Ă  la derniĂšre version de Restic) :
$ sudo curl -L https://github.com/restic/restic/releases/download/v0.11.0/restic_0.11.0_linux_amd64.bz2 | bunzip2 > $HOME/bin/restic
$ sudo chmod 750 $HOME/bin/restic

Configurer SSH cÎté PC

Éditer le fichier de configuration SSH de votre utilisateur ($HOME/.ssh/config), et ajouter les lignes suivantes :

Host <alias du serveur de sauvegarde>
    HostName <nom de domaine ou IP du serveur de sauvegarde>
    User restic
    Port <port SSH>
    IdentityFile /home/<votre utilisateur>/.ssh/restic_id_rsa

Initialiser le dépÎt des sauvegardes

$ restic -r sftp:<alias du serveur de sauvegarde>:restic/<nom du dépÎt>/ init

Automatisation des sauvegardes

Afin d’assurer l’automatisation des sauvegardes, il sera nĂ©cessaire de crĂ©er des fichiers de configurations et des services systemd :

Les configurations

  1. Créer le répertoire pour stocker les configurations :
$ mkdir $HOME/.config/restic
  1. Créer le fichier de configuration $HOME/.config/resitc/restic-backup.conf, avec les paramÚtres suivants :

    • BACKUP_PATHS : les chemins des rĂ©pertoires Ă  sauvegarder, sĂ©parĂ© par des espaces.
    • BACKUP_EXCLUDES : le chemin du fichier d’exclusion. Laisser le champ vide s’il n’est pas nĂ©cessaire d’exclure des fichiers.
    • RETENTION_DAYS : le nombre de snapshot journalier Ă  garder.
    • RETENTION_WEEKS : le nombre de snapshot hebdomadaire Ă  garder.
    • RETENTION_MONTHS : le nombre de snapshot mensuel Ă  garder.
    • RETENTION_YEARS : le nombre de snapshot annuel Ă  garder.
    • RESTIC_REPOSITORY : l’adresse du dĂ©pĂŽt.
    • RESTIC_PASSWORD : le mot de passe du dĂ©pĂŽt.

    Exemple :

BACKUP_PATHS="/home/<votre utilisateur>"
BACKUP_EXCLUDES="--exclude-file /home/<votre utilisateur>/.config/restic/restic-excludes.conf"
RETENTION_DAYS=7
RETENTION_WEEKS=4
RETENTION_MONTHS=6
RETENTION_YEARS=3
RESTIC_REPOSITORY=sftp:<alias du serveur de sauvegarde>:restic/<nom du dépÎt>/
RESTIC_PASSWORD=
  1. CrĂ©er le fichier d’exclusion $HOME/.config/restic/restic-excludes.conf, et y lister les chemins de fichiers ou rĂ©pertoires Ă  exclure. Par exemple :
/home/<vptre utilisateur>/tmp
/home/<vptre utilisateur>/somefile

Services

  1. Créer le répertoire pour les services systemd :
$ mkdir $HOME/.config/systemd/user/
  1. Créer le service pour les sauvegardes $HOME/.config/systemd/user/restic-backup.service :
[Unit]
Description=Restic backup service
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=300
StartLimitBurst=5
[Service]
Type=oneshot
Restart=on-failure
RestartSec=30
ExecStart=restic backup --verbose --one-file-system --tag systemd.timer $BACKUP_EXCLUDES $BACKUP_PATHS
ExecStartPost=restic forget --verbose --tag systemd.timer --group-by "paths,tags" --keep-daily $RETENTION_DAYS --keep-weekly $RETENTION_WEEKS --keep-monthly $RETENTION_MONTHS --keep-yearly $RETENTION_YEARS
EnvironmentFile=%h/.config/restic-backup.conf

Quelques éléments ont été ajoutés rapport aux services créés pour les serveurs :

  1. Créer le timer pour les sauvegardes ~/.config/systemd/user/restic-backup.timer :
[Unit]
Description=Backup with restic daily
[Timer]
OnCalendar=*-*-* 1:00:00
Persistent=true
[Install]
WantedBy=timers.target
  1. Créer le service pour le nettoyage des sauvegardes ~/.config/systemd/user/restic-prune.service :
[Unit]
Description=Restic backup service (data pruning)
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=300
StartLimitBurst=5
[Service]
Type=oneshot
Restart=on-failure
RestartSec=30
ExecStart=restic prune
EnvironmentFile=%h/.config/restic-backup.conf
  1. Créer le timer pour le nettoyage ~/.config/systemd/user/restic-prune.timer :
[Unit]
Description=Prune data from the restic repository monthly
[Timer]
OnCalendar=monthly
Persistent=true
[Install]
WantedBy=timers.target
  1. Recharger la liste des services :
$ systemctl --user daemon-reload
  1. Activer les timers :
$ systemctl --user enable --now restic-backup.timer
$ systemctl --user enable --now restic-prune.timer

Il est également possible de lancer manuellement les services avec les commandes suivantes :

$ systemctl --user start restic-backup
$ systemctl --user start restic-prune.service

Manipuler les sauvegardes

Lister les snapshots

$ restic -r sftp:<alias du serveur de sauvegarde>:restic/<nom du dépÎt>/ snapshots

Restorer un snapshot

$ mkdir $HOME/tmp
$ restic -r sftp:<alias du serveur de sauvegarde>:restic/<nom du dépÎt>/ restore latest --target /home/brice/tmp/<nom du PC>-restore

Monter un snapshot

$ mkdir -p $HOME/mnt/restic
$ restic -r sftp:<alias du serveur de sauvegarde>:restic/<nom du dépÎt>/ mount ~/mnt/restic/