Cet article fait partie d’une sĂ©rie :
- Sauvegardes #1 â Introduction et serveur de sauvegarde đŸ
- Sauvegardes #2 â Sauvegardes de serveurs avec Restic đ
- Sauvegardes #3 â Sauvegardes de PC avec Restic đ»
- Sauvegardes #4 â Sauvegardes de bases MySQL/MariaDB avec Restic đïž
- Sauvegardes #5 â Sauvegardes d’annuaire OpenLDAP avec Restic đïž
- Sauvegardes #6 â Sauvegardes de bases PostgreSQL avec Restic đïž
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
- Sous Archlinux
$ sudo pacman -S restic
- Sous Ubuntu
$ sudo apt install restic
Manuellement
Dans ce cas, le binaire de Restic sera installĂ© dans le home de l’utilisateur
- CrĂ©ation d’un rĂ©pertoire
bindans le home :
$ mkdir $HOME/bin
- 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
restic: chemin vers le binaire Restic-r sftp:<alias du serveur de sauvegarde>:restic/<nom du serveur Ă sauvegarder>-r: pour indiquer l’adresse du dĂ©pĂŽt (repository)sftp: le protocole utilisĂ©<alias du serveur de sauvegarde>: l’alias indiquĂ© dans la configuration SSH ci-dessusrestic/<nom du dĂ©pĂŽt>: chemin du dĂ©pĂŽt sur le serveur de sauvegarde (en lâoccurrence dans un rĂ©pertoireresticqui contiendra les sauvegardes selon le nom du PC sauvegardĂ©. Il est Ă©galement possible de nommer le dĂ©pĂŽt directement avec le nom de la machine Ă sauvegarder si cela fait du sens)init: fonction pour initialiser le dĂ©pĂŽt
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 :
- 1 fichier de configuration contenant les paramĂštres de sauvegarde,
- 1 fichier d’exclusion (pour exclure des rĂ©pertoires ou fichiers au sein des arborescences sĂ©lectionnĂ©es pour la sauvegarde),
- 2 services
oneshot,- lancement des sauvegardes, qui sera exécuté quotidiennement à 1h du matin pour réaliser la sauvegarde et supprimer les snapshots en fonction de la politique de rétention (voir fichier de configuration),
- nettoyage des sauvegardes, qui sera exĂ©cutĂ©e mensuellement pour effectivement supprimer les donnĂ©es liĂ©es aux snapshots supprimĂ©s (cette opĂ©ration Ă©tant plus lourde, il n’est pas nĂ©cessaire de la lancer trop souvent),
- 2 timers pour planifier lâexĂ©cution de ces services.
Les configurations
- Créer le répertoire pour stocker les configurations :
$ mkdir $HOME/.config/restic
-
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=
- 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
- Créer le répertoire pour les services systemd :
$ mkdir $HOME/.config/systemd/user/
- 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 :
- Afin de s’assurer que le service ne se lancera que lorsqu’une connexion Ă internet est disponible, il faut indiquer cette dĂ©pendance :
After=network-online.target: utilisĂ© conjointement avec la directive ci-dessous, mais avec une notion ordonnancement.Wants=network-online.target: indique la nĂ©cessitĂ© d’une connexion rĂ©seau active pour le lancement du service.
- NĂ©anmoins, cette vĂ©rification n’est pas viable lors d’une sortie de veille. Il faut donc Ă©galement mettre en place un redĂ©marrage du service en cas d’Ă©chec, avec des gardes fous afin de limiter le nombre de lancement du service :
StartLimitIntervalSec=300: dĂ©fini l’intervalle de temps (300 secondes) du taux maximum de dĂ©marrage.StartLimitBurst=5: dĂ©fini le nombre de dĂ©marrage maximum, dans l’intervalle dĂ©fini ci-dessus.Restart=on-failure: redĂ©marre le service s’il a Ă©chouĂ©.RestartSec=30: dĂ©fini le temps d’attente avant de redĂ©marrer le service (30 secondes).
- 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
- 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
- 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
- Recharger la liste des services :
$ systemctl --user daemon-reload
- 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/