Restic, remplaçant de borg et duplicati

J'avais très vaguement parlé de restic lors de mon article sur ma gestion des sauvegardes. Restic est un outil de sauvegardes dans le même genre que borg, il fonctionne de la même manière, c'est à dire via des chunks, et gère correctement la déduplication.
Lors de mes premiers tests, restic était en version 0.9, et je l'avais trouvé beaucoup plus lent que borg (entre 2 et 4 fois plus lent), mais j'ai décidé de le garder sous le coude. La version 0.11 de restic est sortie, avec comme objectif d'améliorer les performances, et vous savez quoi ?! Ils ont réussi.
Je ferais surement un article comparatif entre restic et borg, mais la conclusion est que restic est désormais environ 2 fois plus rapide que borg.

Pourquoi remplacer borg et duplicati

Borg fonctionne très bien, duplicati aussi d'ailleurs, mais le problème vient surtout du fait de faire une sauvegarde d'une sauvegarde pour pouvoir faire une copie dans le cloud. Je préfère partir sur 2 sauvegardes indépendantes, car si je perds ma sauvegarde locale de 2To, puisque borg en plus de chiffrer, utilise son organisation, il me faudra restaurer toute la sauvegarde de duplicati avant de pouvoir restaurer via borg, pas très pratique.
Et c'est là que restic intervient, car en plus de faire comme borg (sauvegarde locale et via ssh), il permet d'utiliser rclone pour faire des sauvegardes sur le cloud (gdrive, onedrive, s3, mega etc ....) et même certains en natif (backblaze, s3, minio etc ...). C'est super efficace, et super simple à utiliser.

Je passerai sur l'installation, c'est du Go, donc un simple binaire à copier, je conseille cependant d'installer minimum la version 0.11, les versions sous debian et ubuntu sont beaucoup moins performantes. Je ferai beaucoup de comparaison avec borg, car comme j'ai dit, ces outils sont très similaires.

Utilisation

Contrairement à borg, restic n'a pas besoin d'avoir de serveur d'installé sur la machine cible, il utilise directement sftp.

Tout comme borg, il est possible d'utiliser un seul repo pour plusieurs hôtes ou pour plusieurs sauvegardes différentes, même si cela n'est pas forcément conseillé.

Initialisation du repo

L'initialisation d'un repo se fait simplement, un peu comme borg, pour un repository local ça donnerait :

$ restic -r ./restic_save init 
enter password for new repository: 
enter password again: 
created restic repository 0e31d6c2b0 at ./restic_save

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

Tout comme borg, il est possible de simplifier ça avec des variables d'environnements :

  • RESTIC_PASSWORD : Pour le mdp du repo
  • RESTIC_PASSWORD_COMMAND : Pour récupérer le mot de passe via une commande
  • RESTIC_PASSWORD_FILE : Pour stocker le mot de passe dans un fichier
  • RESTIC_REPOSITORY : Pour le nom du repo
  • .... : Plein d'autres, voir docs

Et pour un repo distant, nous utiliserons ce format pour le repository type:IP|NOM|URI|autre[:repository] :

  • ssh : restic -r ssh:[email protected]:/folder/saves init ou export RESTIC_REPOSITORY=ssh:[email protected]:/folder/saves && restic init
  • rest : restic -r rest:http://user:[email protected]:8080/saves init (Pour l'utilisation de l'API Rest compatible restic, rclone par exemple le permets)
  • rclone : restic -r rclone:gdrive:/foler/saves init (Il faut rclone sur la machine également)
  • .... : Plein d'autres, voir docs

Attention cependant avec le cloud, c'est beaucoup plus lent qu'en local ou en ssh, par exemple, la sauvegarde initiale que je fais après, m'a pris 7min en local, mais la même via rclone sur un onedrive à pris 50min (pour presque 9Go), en ssh les performances sont les mêmes que en local, à quelques secondes près.

Sauvegardes

Pour sauvegarder, nous utiliserons l'option backup :

$ restic -r ./restic_save backup /home/xataz/Images/
enter password for repository: 
repository 0e31d6c2 opened successfully, password is correct
created new cache in /home/xataz/.cache/restic

Files:        2012 new,     0 changed,     0 unmodified
Dirs:           49 new,     0 changed,     0 unmodified
Added to the repo: 8.780 GiB

processed 2012 files, 8.781 GiB in 7:10
snapshot 85a1c2ee saved

Si j'ajoute des fichiers et que je relance, en ajoutant des variables d'environnement :

$ export RESTIC_PASSWORD=azerty
$ export RESTIC_REPOSITORY=./restic_save
$ restic backup /home/xataz/Images/
repository 0e31d6c2 opened successfully, password is correct

Files:          14 new,     0 changed,  2012 unmodified
Dirs:            0 new,     3 changed,    46 unmodified
Added to the repo: 3.081 MiB

processed 2026 files, 8.784 GiB in 0:00
snapshot b427d8af saved

Déjà c'est beaucoup plus rapide, il a vraiment mis moins d'une seconde pour sauvegarder mes 14 nouveaux fichiers.

Lister les sauvegardes

Il faut pouvoir lister les sauvegardes :

$ restic snapshots
repository 0e31d6c2 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
---------------------------------------------------------------------------
85a1c2ee  2020-11-19 14:31:25  xataz-laptop              /home/xataz/Images
b427d8af  2020-11-19 14:50:13  xataz-laptop              /home/xataz/Images
---------------------------------------------------------------------------
2 snapshots

Contrairement à borg, on ne nomme pas les sauvegardes, donc restic génère un ID unique pour ça, ce n'est pas toujours pratique, donc pour cela nous avons ...

Les tags

Les tags vont permettre de s'organiser ou de filtrer les sauvegardes, on les ajoute à la création d'un backup :

$ restic backup --tag $(date +%Y%m%d) --tag images --tag $(date +%A) /home/xataz/Images/
repository 0e31d6c2 opened successfully, password is correct

Files:          38 new,     0 changed,  2026 unmodified
Dirs:            0 new,     3 changed,    46 unmodified
Added to the repo: 7.690 MiB

processed 2064 files, 8.793 GiB in 0:00
snapshot 0f024556 saved
$ restic snapshots
repository 0e31d6c2 opened successfully, password is correct
ID        Time                 Host          Tags                   Paths
--------------------------------------------------------------------------------------
85a1c2ee  2020-11-19 14:31:25  xataz-laptop                         /home/xataz/Images
b427d8af  2020-11-19 14:50:13  xataz-laptop                         /home/xataz/Images
0f024556  2020-11-19 16:07:15  xataz-laptop  20201119,images,jeudi  /home/xataz/Images
--------------------------------------------------------------------------------------
3 snapshots

Pour l'instant je n'ai que 3 sauvegardes, donc c'est encore visible, mais je pourrais tester ceci :

$ restic snapshots --tag 20201119
repository 0e31d6c2 opened successfully, password is correct
ID        Time                 Host          Tags                   Paths
--------------------------------------------------------------------------------------
0f024556  2020-11-19 16:07:15  xataz-laptop  20201119,images,jeudi  /home/xataz/Images
--------------------------------------------------------------------------------------
1 snapshots

Le Host est aussi une sorte de tag, elle n'a aucune incidence sur la sauvegarde et peut être overwrité.

Rotation

Pour vous montrer la rotation, je vais recréer un autre repo, et faire des sauvegardes antidatées (c'est possible avec restic) sur 390 jours:

$ export RESTIC_PASSWORD=azerty
$ export RESTIC_REPOSITORY=./restic_save2
$ restic init
created restic repository 66dd4a3e3a at ./restic_save2

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
$ for i in $(seq 1 390); do 
    DATE=$(date "+%Y-%m-%d 00:30:00" --date "-390 days +$i days")
    filename=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
    head -c 1M < /dev/urandom > ../files/$filename
    echo "Création de la sauvegarde n°$i/390"
    restic backup --tag $(date --date "$DATE" +%Y%m%d) --time "$DATE" ../files/; 
done

Cette petite boucle va boucler 390 fois, et va donc me créer une sauvegarde antidatée depuis 390 jours, entre chaque sauvegarde, il va me créer un nouveau fichier aléatoire de 1Mo. Pour info, cette boucle a duré environ 5min.

Une fois ceci fait, on se retrouve avec beaucoup de backups, il faut donc activer une rotation des backups, pour ceci nous avons forget qui est l'équivalent de prune pour borg :

$ restic forget --prune --keep-daily 30 --keep-weekly 4 --keep-monthly 12 --keep-yearly 2
repository 7dbb4021 opened successfully, password is correct
Applying Policy: keep 30 daily, 4 weekly, 12 monthly, 2 yearly snapshots
keep 40 snapshots:
ID        Time                 Host          Tags        Reasons           Paths
------------------------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    monthly snapshot  /home/xataz/Documents/Projects/testsave/files
                                                         yearly snapshot
6167c834  2020-01-31 00:30:00  xataz-laptop  20200131    monthly snapshot  /home/xataz/Documents/Projects/testsave/files
56f2b973  2020-02-29 00:30:00  xataz-laptop  20200229    monthly snapshot  /home/xataz/Documents/Projects/testsave/files
[....]
d117adb0  2020-11-19 00:30:00  xataz-laptop  20201119    daily snapshot    /home/xataz/Documents/Projects/testsave/files
                                                         weekly snapshot
                                                         monthly snapshot
                                                         yearly snapshot
------------------------------------------------------------------------------------------------------------------------
40 snapshots

remove 350 snapshots:
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
4d112069  2019-10-27 00:30:00  xataz-laptop  20191027    /home/xataz/Documents/Projects/testsave/files
63fd465f  2019-10-28 00:30:00  xataz-laptop  20191028    /home/xataz/Documents/Projects/testsave/files
[....]
21b010bf  2020-10-13 00:30:00  xataz-laptop  20201013    /home/xataz/Documents/Projects/testsave/files
93d86e1f  2020-10-14 00:30:00  xataz-laptop  20201014    /home/xataz/Documents/Projects/testsave/files
8f48f592  2020-10-15 00:30:00  xataz-laptop  20201015    /home/xataz/Documents/Projects/testsave/files
a572b1b0  2020-10-16 00:30:00  xataz-laptop  20201016    /home/xataz/Documents/Projects/testsave/files
4ee60761  2020-10-17 00:30:00  xataz-laptop  20201017    /home/xataz/Documents/Projects/testsave/files
7b7295cd  2020-10-18 00:30:00  xataz-laptop  20201018    /home/xataz/Documents/Projects/testsave/files
3f224e7d  2020-10-19 00:30:00  xataz-laptop  20201019    /home/xataz/Documents/Projects/testsave/files
b0698bdd  2020-10-20 00:30:00  xataz-laptop  20201020    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
350 snapshots

[0:00] 100.00%  350 / 350 files deleted
counting files in repo
building new index for repo
[0:02] 100.00%  877 / 877 packs
repository contains 877 packs (1371 blobs) with 440.198 MiB
processed 1371 blobs: 0 duplicate blobs, 0 B duplicate
load all snapshots
find data that is still in use for 40 snapshots
[0:00] 100.00%  40 / 40 snapshots
found 671 of 1371 data blobs still in use, removing 700 blobs
will remove 0 invalid files
will delete 350 packs and rewrite 0 packs, this frees 28.321 MiB
counting files in repo
[0:00] 100.00%  527 / 527 packs
finding old index files
saved new indexes as [debf8d28]
remove 390 old index files
[0:00] 100.00%  390 / 390 files deleted
remove 350 old packs
[0:00] 100.00%  350 / 350 files deleted
done

Et si je vérifie mes sauvegardes :

$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
6167c834  2020-01-31 00:30:00  xataz-laptop  20200131    /home/xataz/Documents/Projects/testsave/files
56f2b973  2020-02-29 00:30:00  xataz-laptop  20200229    /home/xataz/Documents/Projects/testsave/files
0782bbe8  2020-03-31 00:30:00  xataz-laptop  20200331    /home/xataz/Documents/Projects/testsave/files
d38ae4cd  2020-04-30 00:30:00  xataz-laptop  20200430    /home/xataz/Documents/Projects/testsave/files
c6969e02  2020-05-31 00:30:00  xataz-laptop  20200531    /home/xataz/Documents/Projects/testsave/files
8db5e2cb  2020-06-30 00:30:00  xataz-laptop  20200630    /home/xataz/Documents/Projects/testsave/files
a0bfd39d  2020-07-31 00:30:00  xataz-laptop  20200731    /home/xataz/Documents/Projects/testsave/files
7e3c2a16  2020-08-31 00:30:00  xataz-laptop  20200831    /home/xataz/Documents/Projects/testsave/files
0e4cc400  2020-09-30 00:30:00  xataz-laptop  20200930    /home/xataz/Documents/Projects/testsave/files
77dc12b6  2020-10-21 00:30:00  xataz-laptop  20201021    /home/xataz/Documents/Projects/testsave/files
bdd230cf  2020-10-22 00:30:00  xataz-laptop  20201022    /home/xataz/Documents/Projects/testsave/files
f89c1f56  2020-10-23 00:30:00  xataz-laptop  20201023    /home/xataz/Documents/Projects/testsave/files
515db7b4  2020-10-24 00:30:00  xataz-laptop  20201024    /home/xataz/Documents/Projects/testsave/files
f40ca279  2020-10-25 00:30:00  xataz-laptop  20201025    /home/xataz/Documents/Projects/testsave/files
270b2d88  2020-10-26 00:30:00  xataz-laptop  20201026    /home/xataz/Documents/Projects/testsave/files
d2e61cab  2020-10-27 00:30:00  xataz-laptop  20201027    /home/xataz/Documents/Projects/testsave/files
ce055060  2020-10-28 00:30:00  xataz-laptop  20201028    /home/xataz/Documents/Projects/testsave/files
40b19a49  2020-10-29 00:30:00  xataz-laptop  20201029    /home/xataz/Documents/Projects/testsave/files
532bea0c  2020-10-30 00:30:00  xataz-laptop  20201030    /home/xataz/Documents/Projects/testsave/files
cc04a2fb  2020-10-31 00:30:00  xataz-laptop  20201031    /home/xataz/Documents/Projects/testsave/files
3cc179b1  2020-11-01 00:30:00  xataz-laptop  20201101    /home/xataz/Documents/Projects/testsave/files
8eb3a6a7  2020-11-02 00:30:00  xataz-laptop  20201102    /home/xataz/Documents/Projects/testsave/files
d8104ee6  2020-11-03 00:30:00  xataz-laptop  20201103    /home/xataz/Documents/Projects/testsave/files
6db0ef08  2020-11-04 00:30:00  xataz-laptop  20201104    /home/xataz/Documents/Projects/testsave/files
9125355a  2020-11-05 00:30:00  xataz-laptop  20201105    /home/xataz/Documents/Projects/testsave/files
984ef545  2020-11-06 00:30:00  xataz-laptop  20201106    /home/xataz/Documents/Projects/testsave/files
a7616509  2020-11-07 00:30:00  xataz-laptop  20201107    /home/xataz/Documents/Projects/testsave/files
8deff2c8  2020-11-08 00:30:00  xataz-laptop  20201108    /home/xataz/Documents/Projects/testsave/files
3eb12566  2020-11-09 00:30:00  xataz-laptop  20201109    /home/xataz/Documents/Projects/testsave/files
5ce603c1  2020-11-10 00:30:00  xataz-laptop  20201110    /home/xataz/Documents/Projects/testsave/files
a995bfce  2020-11-11 00:30:00  xataz-laptop  20201111    /home/xataz/Documents/Projects/testsave/files
9a50768a  2020-11-12 00:30:00  xataz-laptop  20201112    /home/xataz/Documents/Projects/testsave/files
cb6576b0  2020-11-13 00:30:00  xataz-laptop  20201113    /home/xataz/Documents/Projects/testsave/files
58c2c310  2020-11-14 00:30:00  xataz-laptop  20201114    /home/xataz/Documents/Projects/testsave/files
4015059a  2020-11-15 00:30:00  xataz-laptop  20201115    /home/xataz/Documents/Projects/testsave/files
060fe973  2020-11-16 00:30:00  xataz-laptop  20201116    /home/xataz/Documents/Projects/testsave/files
f0382a1d  2020-11-17 00:30:00  xataz-laptop  20201117    /home/xataz/Documents/Projects/testsave/files
00c19642  2020-11-18 00:30:00  xataz-laptop  20201118    /home/xataz/Documents/Projects/testsave/files
d117adb0  2020-11-19 00:30:00  xataz-laptop  20201119    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
40 snapshots

Comment ça marche

Donc là j'ai mis 4 options, --keep-daily 30, --keep-weekly 4, --keep-monthly 12, --keep-yearly 2, cela veut dire que je garde 30 sauvegardes journalières, 4 sauvegardes hebdomadaires, 12 sauvegardes mensuelles et 2 sauvegardes annuelles.

Oui mais là on devrait avoir 48 sauvegardes (30+4+12+2) ?!!

Et bien non, car certaines sauvegardes ont plusieurs fréquences.

  • Journalières : du 21/10/2020 au 19/11/2020
  • Hebdomadaires : 20200119, 20201115, 20201108 et 20201101 (Les derniers jours de la semaine où il y a eu une sauvegarde)
  • Mensuel : 20191231, 20200131, 20200229, 20200331, 20200430, 20200531, 20200630, 20200731, 20200831, 20200930, 20201031 et 20201119 (Les derniers jours du mois où il y a eu une sauvegarde)
  • Annuel : 20191231 et 20201119 (Derniers jours de l'année où il y a eu une sauvegarde)

Pour vérifier, nous allons réduire ce nombre :

$ restic forget --prune --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --keep-yearly 2
repository 7dbb4021 opened successfully, password is correct
Applying Policy: keep 7 daily, 4 weekly, 12 monthly, 2 yearly snapshots
keep 20 snapshots:
[....]
done
$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
6167c834  2020-01-31 00:30:00  xataz-laptop  20200131    /home/xataz/Documents/Projects/testsave/files
56f2b973  2020-02-29 00:30:00  xataz-laptop  20200229    /home/xataz/Documents/Projects/testsave/files
0782bbe8  2020-03-31 00:30:00  xataz-laptop  20200331    /home/xataz/Documents/Projects/testsave/files
d38ae4cd  2020-04-30 00:30:00  xataz-laptop  20200430    /home/xataz/Documents/Projects/testsave/files
c6969e02  2020-05-31 00:30:00  xataz-laptop  20200531    /home/xataz/Documents/Projects/testsave/files
8db5e2cb  2020-06-30 00:30:00  xataz-laptop  20200630    /home/xataz/Documents/Projects/testsave/files
a0bfd39d  2020-07-31 00:30:00  xataz-laptop  20200731    /home/xataz/Documents/Projects/testsave/files
7e3c2a16  2020-08-31 00:30:00  xataz-laptop  20200831    /home/xataz/Documents/Projects/testsave/files
0e4cc400  2020-09-30 00:30:00  xataz-laptop  20200930    /home/xataz/Documents/Projects/testsave/files
cc04a2fb  2020-10-31 00:30:00  xataz-laptop  20201031    /home/xataz/Documents/Projects/testsave/files
3cc179b1  2020-11-01 00:30:00  xataz-laptop  20201101    /home/xataz/Documents/Projects/testsave/files
8deff2c8  2020-11-08 00:30:00  xataz-laptop  20201108    /home/xataz/Documents/Projects/testsave/files
cb6576b0  2020-11-13 00:30:00  xataz-laptop  20201113    /home/xataz/Documents/Projects/testsave/files
58c2c310  2020-11-14 00:30:00  xataz-laptop  20201114    /home/xataz/Documents/Projects/testsave/files
4015059a  2020-11-15 00:30:00  xataz-laptop  20201115    /home/xataz/Documents/Projects/testsave/files
060fe973  2020-11-16 00:30:00  xataz-laptop  20201116    /home/xataz/Documents/Projects/testsave/files
f0382a1d  2020-11-17 00:30:00  xataz-laptop  20201117    /home/xataz/Documents/Projects/testsave/files
00c19642  2020-11-18 00:30:00  xataz-laptop  20201118    /home/xataz/Documents/Projects/testsave/files
d117adb0  2020-11-19 00:30:00  xataz-laptop  20201119    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
20 snapshots

On peut refaire le même exercice :

  • Journalières : 20201113, 20201114, 20201115, 20201116, 20201117, 20201118 et 20201119 ==> 7
  • Hebdomadaires : 20200119, 20201115, 20201108 et 20201101 => 4
  • Mensuel : 20191231, 20200131, 20200229, 20200331, 20200430, 20200531, 20200630, 20200731, 20200831, 20200930, 20201031 et 20201119 => 12
  • Annuel : 20191231 et 20201119 => 2

Ce qui nous donnerait un total de 24 sauvegardes, mais si nous enlevons les doublons, nous avons bien 20 sauvegardes.

Comme tout système de sauvegarde, il faut bien faire attention à la rétention, dans cette configuration, si je crée un fichier en début de semaine dernière et que je le supprime 2 jours après, ba là j'ai plus le fichier.

Jouer avec les tags

On peut également jouer avec les tags pour la rotation, par exemple je crée ma sauvegarde de photos avec un tag photo :

$ restic backup --tag $(date --date "$DATE" +%Y%m%d) --tag photos ~/photos

Et que dans le même repos je sauvegarde mes documents :

$ restic backup --tag $(date --date "$DATE" +%Y%m%d) --tag documents ~/documents

Mon répertoire photos n'est pas un répertoire que je sauvegarde souvent, puisque rarement modifié, je pourrais par exemple demander de garder les sauvegardes journalières pendant seulement 7 jours, et les sauvegardes hebdomadaires indéfiniment :

$ restic forget --keep-daily 7 --keep-weekly -1 --tag photos --prune

Là je n'agis donc que sur les backups avec le tag photos.

Restauration

Faire des sauvegardes c'est bien, mais il faut pouvoir les restaurer, c'est indispensable. Nous avons plusieurs outils qui nous permet de le faire.

Rechercher un fichier

J'ai supprimé par erreur le fichier nommé j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC, il faut donc rechercher ce fichier, restic fourni la commande find pour ceci :

$ restic find j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC
repository 7dbb4021 opened successfully, password is correct
Found matching entries in snapshot 00c19642 from 2020-11-18 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 060fe973 from 2020-11-16 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 0e4cc400 from 2020-09-30 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 3cc179b1 from 2020-11-01 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 4015059a from 2020-11-15 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 58c2c310 from 2020-11-14 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 7e3c2a16 from 2020-08-31 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 8db5e2cb from 2020-06-30 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot 8deff2c8 from 2020-11-08 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot a0bfd39d from 2020-07-31 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot c6969e02 from 2020-05-31 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot cb6576b0 from 2020-11-13 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot cc04a2fb from 2020-10-31 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot d117adb0 from 2020-11-19 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Found matching entries in snapshot d38ae4cd from 2020-04-30 00:30:00
/files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

On retrouve bien notre fichier, ouf !!!

On peut affiner la recherche avec quelques options :

--host : Dans le cas d'un repos multihost (Pas forcément recommandé)
--tag : Pour filtrer sur un certain tag
--newest ou --oldest : Pour rechercher le plus vieux ou le plus récent fichier

Et bien sûr d'autres que vous pouvez obtenir via restic find --help.

Comparer des sauvegardes

On peut comparer deux sauvegardes avec diff. Malheureusement il faudra utiliser les IDs des backups pour ce faire :

$ restic diff 00c19642 d117adb0
repository 7dbb4021 opened successfully, password is correct
comparing snapshot 00c19642 to d117adb0:

+    /files/6Ocl3G8kMNUEjTbsbZ5nrKN2CSEcF9Zg

Files:           1 new,     0 removed,     0 changed
Dirs:            0 new,     0 removed
Others:          0 new,     0 removed
Data Blobs:      2 new,     0 removed
Tree Blobs:      1 new,     1 removed
  Added:   1.166 MiB
  Removed: 169.658 KiB

Restaurer via mount

Tout comme borg, il est possible de monter une sauvegarde :

$ restic mount testmount
repository 7dbb4021 opened successfully, password is correct
Now serving the repository at testmount
When finished, quit with Ctrl-c or umount the mountpoint.

Par contre restic ne rend pas la main, donc dans un autre shell :

$ ls -lrt
total 0
dr-xr-xr-x 1 xataz xataz 0 déc.   1 10:34 tags
dr-xr-xr-x 1 xataz xataz 0 déc.   1 10:34 snapshots
dr-xr-xr-x 1 xataz xataz 0 déc.   1 10:34 ids
dr-xr-xr-x 1 xataz xataz 0 déc.   1 10:34 hosts

Nous pouvons voir 4 répertoires :

  • tags : Les sauvegardes sont triées par tags, donc puisque je mets la date en tag, j'ai un répertoire par date, ensuite j'ai les sauvegardes correspondants à ce tag, qui sont triées par date.
  • snapshots : Nous avons directement accès à toutes les sauvegardes, ici triées par date.
  • ids : Moins pratique, ici les sauvegardes sont triées par ids uniques.
  • hosts : C'est surtout dans le cas d'un repo pour plusieurs hôtes, un répertoire par hôte, et ensuite la liste des sauvegardes par date.

Donc pour restaurer ici, il suffit de faire un cp du fichier désiré, et de la copier où vous voulez.

Restaurer via restore

Cette commande est pratique quand vous savez exactement le ou les fichiers qu'il vous faut.

Pour tout restaurer la sauvegarde du 30/04/2020 (d38ae4cd) dans un répertoire temporaire :

$ restic restore --target restore d38ae4cd
repository 7dbb4021 opened successfully, password is correct
restoring <Snapshot d38ae4cd of [/home/xataz/Documents/Projects/testsave/files] at 2020-04-30 00:30:00 +0200 CEST by xataz@xataz-laptop> to restore

Petit exemple pour restaurer le fichier j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC précédemment cherché en date du 30/04/2020 (id d38ae4cd) :

$ restic restore --include j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC --target restore d38ae4cd
repository 7dbb4021 opened successfully, password is correct
restoring <Snapshot d38ae4cd of [/home/xataz/Documents/Projects/testsave/files] at 2020-04-30 00:30:00 +0200 CEST by xataz@xataz-laptop> to restore
$ ls restore/files/
j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC

Restaurer via dump

dump est particulier, car il permet de lire et d'afficher un fichier, super pratique pour par exemple restaurer une base de données qu'on aurait exportée en .sql

$ restic dump d38ae4cd files/j2J4IPrcZLmJdH31Ld0xu8Bok33jdezC
### Contenu du fichier

Pour un exemple plus concret, j'ai effectué ma sauvegarde mysql comme ceci :

$ mysqldump -d dbname -u dbuser -p dbpass | restic backup --stdin --stdin-filename database_dump.sql --tag $(date +%Y%m%d) --tag mysql

Vous pourrez restaurer comme ceci :

$ restic dump latest database_dump.sql | mysql --local-infile=1 -u dbuser -p dbpass -d dbname -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE mytable FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';"

Je n'ai pas testé ceci, mais ça devrait fonctionner sans soucis.

Divers

Gérer les accès

Restic a un petit avantage face à borg, il permet d'avoir plusieurs comptes pour accéder à une archive, par exemple vous avez une clé par serveur sauvegardé, et une clé pour vous, sur votre PC client qui permettra d'y accéder. L'avantage, c'est que si une clé est compromise, il vous suffit de ne révoquer que celle ci.

Commençons par lister les clés :

$ restic key list
repository 7dbb4021 opened successfully, password is correct
 ID        User   Host          Created
---------------------------------------------------
*fa335932  xataz  xataz-laptop  2020-11-19 16:40:39
---------------------------------------------------

L'hôte et le User n'ont aucune incidence sur le fonctionnement, ce sont des tags pour la gestion, l'organisation.

Donc nous allons créer une clé pour toto :

$ restic key add --user toto
repository 7dbb4021 opened successfully, password is correct
enter new password: 
enter password again: 
saved new key as <Key of toto@xataz-laptop, created on 2020-12-01 11:07:46.936851027 +0100 CET m=+12.941241627>

Je liste les clés :

$ restic key list
repository 7dbb4021 opened successfully, password is correct
 ID        User   Host          Created
---------------------------------------------------
 9f917fae  toto   xataz-laptop  2020-12-01 11:07:46
*fa335932  xataz  xataz-laptop  2020-11-19 16:40:39
---------------------------------------------------

Pour tester la clé, je vais l'ajouter dans les variables d'environnements :

$ export RESTIC_PASSWORD=qsdfgh

Et j'essaie de lister les snapshots :

$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
6167c834  2020-01-31 00:30:00  xataz-laptop  20200131    /home/xataz/Documents/Projects/testsave/files
56f2b973  2020-02-29 00:30:00  xataz-laptop  20200229    /home/xataz/Documents/Projects/testsave/files
0782bbe8  2020-03-31 00:30:00  xataz-laptop  20200331    /home/xataz/Documents/Projects/testsave/files
d38ae4cd  2020-04-30 00:30:00  xataz-laptop  20200430    /home/xataz/Documents/Projects/testsave/files
c6969e02  2020-05-31 00:30:00  xataz-laptop  20200531    /home/xataz/Documents/Projects/testsave/files
8db5e2cb  2020-06-30 00:30:00  xataz-laptop  20200630    /home/xataz/Documents/Projects/testsave/files
a0bfd39d  2020-07-31 00:30:00  xataz-laptop  20200731    /home/xataz/Documents/Projects/testsave/files
7e3c2a16  2020-08-31 00:30:00  xataz-laptop  20200831    /home/xataz/Documents/Projects/testsave/files
0e4cc400  2020-09-30 00:30:00  xataz-laptop  20200930    /home/xataz/Documents/Projects/testsave/files
cc04a2fb  2020-10-31 00:30:00  xataz-laptop  20201031    /home/xataz/Documents/Projects/testsave/files
3cc179b1  2020-11-01 00:30:00  xataz-laptop  20201101    /home/xataz/Documents/Projects/testsave/files
8deff2c8  2020-11-08 00:30:00  xataz-laptop  20201108    /home/xataz/Documents/Projects/testsave/files
cb6576b0  2020-11-13 00:30:00  xataz-laptop  20201113    /home/xataz/Documents/Projects/testsave/files
58c2c310  2020-11-14 00:30:00  xataz-laptop  20201114    /home/xataz/Documents/Projects/testsave/files
4015059a  2020-11-15 00:30:00  xataz-laptop  20201115    /home/xataz/Documents/Projects/testsave/files
060fe973  2020-11-16 00:30:00  xataz-laptop  20201116    /home/xataz/Documents/Projects/testsave/files
f0382a1d  2020-11-17 00:30:00  xataz-laptop  20201117    /home/xataz/Documents/Projects/testsave/files
00c19642  2020-11-18 00:30:00  xataz-laptop  20201118    /home/xataz/Documents/Projects/testsave/files
d117adb0  2020-11-19 00:30:00  xataz-laptop  20201119    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
20 snapshots

Puis si je supprime la clé de xataz :

$ $ restic key remove fa335932
repository 7dbb4021 opened successfully, password is correct
removed key fa335932c23f7ed6063d1d0ee541ef8864f9c832d357351aca44471bb4006123

Et que je retente avec mon ancien mot de passe :

$ export RESTIC_PASSWORD=azerty
$ restic snapshots
Fatal: wrong password or no key found



$ export RESTIC_PASSWORD=qsdfgh
$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
[....]
d117adb0  2020-11-19 00:30:00  xataz-laptop  20201119    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
20 snapshots

Je peux changer de passphrase également :

$ restic key passwd
repository 7dbb4021 opened successfully, password is correct
enter new password: 
enter password again: 
saved new key as <Key of xataz@xataz-laptop, created on 2020-12-01 11:18:15.004958077 +0100 CET m=+10.588438048>

Avec le mdp actuel, ça ne fonctionne plus :

$ restic snapshots
Fatal: wrong password or no key found

Mais si j'exporte le bon :

$ export RESTIC_PASSWORD=jaimerestic
$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
[....]
d117adb0  2020-11-19 00:30:00  xataz-laptop  20201119    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
20 snapshots

Tags

Nous pouvons ajouter des tags après sauvegarde, ou en supprimer

$ restic tag --add newtag latest
repository 7dbb4021 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
$ restic snapshots latest
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags             Paths
-----------------------------------------------------------------------------------------------------------
dbe8e35f  2020-11-19 00:30:00  xataz-laptop  20201119,newtag  /home/xataz/Documents/Projects/testsave/files
-----------------------------------------------------------------------------------------------------------
1 snapshots

Je peux le supprimer :

$ restic tag --remove newtag latest
repository 7dbb4021 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
$ restic snapshots latest
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
aeead31a  2020-11-19 00:30:00  xataz-laptop  20201119    /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
1 snapshots

Je peux en ajouter plusieurs d'un coup :

$ restic tag --add tag1 --add tag2 --add tag3 latest
repository 7dbb4021 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
$ restic snapshots latest
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags                     Paths
-------------------------------------------------------------------------------------------------------------------
2ac8c161  2020-11-19 00:30:00  xataz-laptop  20201119,tag1,tag2,tag3  /home/xataz/Documents/Projects/testsave/files
-------------------------------------------------------------------------------------------------------------------
1 snapshots

Ou même en ajouter et supprimer en même temps :

$ restic tag --add tag4 --remove tag1 latest
repository 7dbb4021 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
$ restic snapshots latest
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags                     Paths
-------------------------------------------------------------------------------------------------------------------
6b258d75  2020-11-19 00:30:00  xataz-laptop  20201119,tag4,tag2,tag3  /home/xataz/Documents/Projects/testsave/files
-------------------------------------------------------------------------------------------------------------------
1 snapshots

Ou alors tout remplacer d'un coup :

$ restic tag --set newnewtag latest
repository 7dbb4021 opened successfully, password is correct
create exclusive lock for repository
modified tags on 1 snapshots
$ restic snapshots latest
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
edf390e4  2020-11-19 00:30:00  xataz-laptop  newnewtag   /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
1 snapshots

L'utilité peut être multiple, par exemple, ajouter un tag "skip", pour que celui-ci ne rentre pas en compte dans la rotation des sauvegardes (via un --keep-tag skip par exemple), et garder indéfiniment, voir le contraire, car elle ne sert à rien, donc la supprimer directement.

Stats

Cela permet d'avoir quelques stats sur le repos, notamment la taille de celui-ci :

$ restic stats
repository 7dbb4021 opened successfully, password is correct
scanning...
Stats in restore-size mode:
Snapshots processed:   20
   Total File Count:   6219
         Total Size:   406.062 MiB
$ restic stats --mode raw-data
repository 7dbb4021 opened successfully, password is correct
scanning...
Stats in raw-data mode:
Snapshots processed:   20
   Total Blob Count:   631
         Total Size:   408.600 MiB

Faut être honnête, borg est beaucoup plus verbeux sur les stats, et permets d'avoir une meilleure visu et plus d'info en un coup d'oeil.

Recover

Ceci est un peu particulier, la commande recover va permettre de créer un snapshot qui contient tout les objets du repository complet.

Pour l'exemple, je vais supprimer tout les fichiers, en créer un nouveau, et faire une sauvegarde, je me retrouve donc avec ceci :

$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
6167c834  2020-01-31 00:30:00  xataz-laptop  20200131    /home/xataz/Documents/Projects/testsave/files
56f2b973  2020-02-29 00:30:00  xataz-laptop  20200229    /home/xataz/Documents/Projects/testsave/files
0782bbe8  2020-03-31 00:30:00  xataz-laptop  20200331    /home/xataz/Documents/Projects/testsave/files
d38ae4cd  2020-04-30 00:30:00  xataz-laptop  20200430    /home/xataz/Documents/Projects/testsave/files
c6969e02  2020-05-31 00:30:00  xataz-laptop  20200531    /home/xataz/Documents/Projects/testsave/files
8db5e2cb  2020-06-30 00:30:00  xataz-laptop  20200630    /home/xataz/Documents/Projects/testsave/files
a0bfd39d  2020-07-31 00:30:00  xataz-laptop  20200731    /home/xataz/Documents/Projects/testsave/files
7e3c2a16  2020-08-31 00:30:00  xataz-laptop  20200831    /home/xataz/Documents/Projects/testsave/files
0e4cc400  2020-09-30 00:30:00  xataz-laptop  20200930    /home/xataz/Documents/Projects/testsave/files
cc04a2fb  2020-10-31 00:30:00  xataz-laptop  20201031    /home/xataz/Documents/Projects/testsave/files
3cc179b1  2020-11-01 00:30:00  xataz-laptop  20201101    /home/xataz/Documents/Projects/testsave/files
8deff2c8  2020-11-08 00:30:00  xataz-laptop  20201108    /home/xataz/Documents/Projects/testsave/files
cb6576b0  2020-11-13 00:30:00  xataz-laptop  20201113    /home/xataz/Documents/Projects/testsave/files
58c2c310  2020-11-14 00:30:00  xataz-laptop  20201114    /home/xataz/Documents/Projects/testsave/files
4015059a  2020-11-15 00:30:00  xataz-laptop  20201115    /home/xataz/Documents/Projects/testsave/files
060fe973  2020-11-16 00:30:00  xataz-laptop  20201116    /home/xataz/Documents/Projects/testsave/files
f0382a1d  2020-11-17 00:30:00  xataz-laptop  20201117    /home/xataz/Documents/Projects/testsave/files
00c19642  2020-11-18 00:30:00  xataz-laptop  20201118    /home/xataz/Documents/Projects/testsave/files
edf390e4  2020-11-19 00:30:00  xataz-laptop  newnewtag   /home/xataz/Documents/Projects/testsave/files
1aa49e09  2020-12-01 11:37:25  xataz-laptop  test        /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
21 snapshots

Je lance donc mon recover, et liste le dernier snapshot :

$ restic recover
repository 7dbb4021 opened successfully, password is correct
load index files
load 43 trees

tree (43/43)
done
found 2 roots
saved new snapshot 69b027d6
$ restic snapshots latest
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
-----------------------------------------------------------------
69b027d6  2020-12-01 11:38:30  xataz-laptop              /recover
-----------------------------------------------------------------
1 snapshots

On peut en lister les fichiers :

$ restic ls latest
[.....]
/0f1709b6/files/test
[.....]
/15fa7252/fac5a21d/files/xrxLQ2A6owZENtgglG9ZtDTtJzPCtdXV
/15fa7252/fac5a21d/files/xuojEiZFDdKSIbHoiNqRkSnASzV2X5AG
/15fa7252/fac5a21d/files/xwxlMXfmUZyjXpgVfVwRi1qpJivh73ke
[.....]
/15fa7252/f9f7d197/files/vd0MmI5OKlbHis6Ik5ljfhbxvm8xW4vG
/15fa7252/f9f7d197/files/yCbGYDOpTBeResfAagxu2LgNxDHHQ67B
/15fa7252/f9f7d197/files/yXn7ZzTvzoEy05MnII4X1VSTd9ih6N5k
/15fa7252/f9f7d197/files/yvXTelkYE99lQMA6gE8vO7sgQZbrTNtZ

J'avoue que je ne sais pas trop comment il gère sa tambouille, mais là nous nous retrouvons avec tous les fichiers déjà sauvegardés.

Testons un peu plus loin, je supprime ce recover, et je vais faire un forget pour ne garder que la dernière sauvegarde, mais sans prune :

$ restic forget latest
repository 7dbb4021 opened successfully, password is correct
[0:00] 100.00%  1 / 1 files deleted
$ restic forget --keep-last 1
repository 7dbb4021 opened successfully, password is correct
Applying Policy: keep 1 latest snapshots
keep 1 snapshots:
ID        Time                 Host          Tags        Reasons        Paths
---------------------------------------------------------------------------------------------------------------------
1aa49e09  2020-12-01 11:37:25  xataz-laptop  test        last snapshot  /home/xataz/Documents/Projects/testsave/files
---------------------------------------------------------------------------------------------------------------------
1 snapshots

remove 20 snapshots:
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
2003f87e  2019-12-31 00:30:00  xataz-laptop  20191231    /home/xataz/Documents/Projects/testsave/files
6167c834  2020-01-31 00:30:00  xataz-laptop  20200131    /home/xataz/Documents/Projects/testsave/files
56f2b973  2020-02-29 00:30:00  xataz-laptop  20200229    /home/xataz/Documents/Projects/testsave/files
0782bbe8  2020-03-31 00:30:00  xataz-laptop  20200331    /home/xataz/Documents/Projects/testsave/files
d38ae4cd  2020-04-30 00:30:00  xataz-laptop  20200430    /home/xataz/Documents/Projects/testsave/files
c6969e02  2020-05-31 00:30:00  xataz-laptop  20200531    /home/xataz/Documents/Projects/testsave/files
8db5e2cb  2020-06-30 00:30:00  xataz-laptop  20200630    /home/xataz/Documents/Projects/testsave/files
a0bfd39d  2020-07-31 00:30:00  xataz-laptop  20200731    /home/xataz/Documents/Projects/testsave/files
7e3c2a16  2020-08-31 00:30:00  xataz-laptop  20200831    /home/xataz/Documents/Projects/testsave/files
0e4cc400  2020-09-30 00:30:00  xataz-laptop  20200930    /home/xataz/Documents/Projects/testsave/files
cc04a2fb  2020-10-31 00:30:00  xataz-laptop  20201031    /home/xataz/Documents/Projects/testsave/files
3cc179b1  2020-11-01 00:30:00  xataz-laptop  20201101    /home/xataz/Documents/Projects/testsave/files
8deff2c8  2020-11-08 00:30:00  xataz-laptop  20201108    /home/xataz/Documents/Projects/testsave/files
cb6576b0  2020-11-13 00:30:00  xataz-laptop  20201113    /home/xataz/Documents/Projects/testsave/files
58c2c310  2020-11-14 00:30:00  xataz-laptop  20201114    /home/xataz/Documents/Projects/testsave/files
4015059a  2020-11-15 00:30:00  xataz-laptop  20201115    /home/xataz/Documents/Projects/testsave/files
060fe973  2020-11-16 00:30:00  xataz-laptop  20201116    /home/xataz/Documents/Projects/testsave/files
f0382a1d  2020-11-17 00:30:00  xataz-laptop  20201117    /home/xataz/Documents/Projects/testsave/files
00c19642  2020-11-18 00:30:00  xataz-laptop  20201118    /home/xataz/Documents/Projects/testsave/files
edf390e4  2020-11-19 00:30:00  xataz-laptop  newnewtag   /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
20 snapshots

[0:00] 100.00%  20 / 20 files deleted
$ restic snapshots
repository 7dbb4021 opened successfully, password is correct
ID        Time                 Host          Tags        Paths
------------------------------------------------------------------------------------------------------
1aa49e09  2020-12-01 11:37:25  xataz-laptop  test        /home/xataz/Documents/Projects/testsave/files
------------------------------------------------------------------------------------------------------
1 snapshots
$ restic ls latest
repository 7dbb4021 opened successfully, password is correct
snapshot 1aa49e09 of [/home/xataz/Documents/Projects/testsave/files] filtered by [] at 2020-12-01 11:37:25.253919577 +0100 CET):
/files
/files/test

Et si je lance un recover :

$ restic recover
repository 7dbb4021 opened successfully, password is correct
load index files
load 45 trees

tree (45/45)
done
found 1 roots
saved new snapshot 9927251d

Et si nous vérifions tout les fichiers dans ce nouveau snapshot :

$ restic ls latest
[.....]
/0f1709b6/files/test
[.....]
/15fa7252/fac5a21d/files/xrxLQ2A6owZENtgglG9ZtDTtJzPCtdXV
/15fa7252/fac5a21d/files/xuojEiZFDdKSIbHoiNqRkSnASzV2X5AG
/15fa7252/fac5a21d/files/xwxlMXfmUZyjXpgVfVwRi1qpJivh73ke
[.....]
/15fa7252/f9f7d197/files/vd0MmI5OKlbHis6Ik5ljfhbxvm8xW4vG
/15fa7252/f9f7d197/files/yCbGYDOpTBeResfAagxu2LgNxDHHQ67B
/15fa7252/f9f7d197/files/yXn7ZzTvzoEy05MnII4X1VSTd9ih6N5k
/15fa7252/f9f7d197/files/yvXTelkYE99lQMA6gE8vO7sgQZbrTNtZ

Nous retrouvons tout nos fichiers.

Cependant dans le cas d'un prune, c'est différent :

$ restic forget latest
repository 7dbb4021 opened successfully, password is correct
[0:00] 100.00%  1 / 1 files deleted
$ restic prune
repository 7dbb4021 opened successfully, password is correct
counting files in repo
building new index for repo
[0:02] 100.00%  514 / 514 packs
repository contains 514 packs (639 blobs) with 408.668 MiB
processed 639 blobs: 0 duplicate blobs, 0 B duplicate
load all snapshots
find data that is still in use for 1 snapshots
[0:00] 100.00%  1 / 1 snapshots
found 3 of 639 data blobs still in use, removing 636 blobs
will remove 0 invalid files
will delete 512 packs and rewrite 0 packs, this frees 408.627 MiB
counting files in repo
[0:00] 100.00%  2 / 2 packs
finding old index files
saved new indexes as [aab34713]
remove 6 old index files
[0:00] 100.00%  6 / 6 files deleted
remove 512 old packs
[0:00] 100.00%  512 / 512 files deleted
done
$ restic recover
repository 7dbb4021 opened successfully, password is correct
load index files
load 2 trees

tree (2/2)
done
found 1 roots
saved new snapshot e707fee1
$ restic ls latest
repository 7dbb4021 opened successfully, password is correct
snapshot e707fee1 of [/recover] filtered by [] at 2020-12-01 11:52:46.318654368 +0100 CET):
/0f1709b6
/0f1709b6/files
/0f1709b6/files/test

Comme nous pouvons le voir, si nous faisons un prune (avec restic prune ou restic forget --prune), nous perdons tout.

Conclusion

Comme nous pouvons le voir, restic est un outil de sauvegarde en mode push très complet, et très performant, il se place au moins au même niveau que borg selon moi.
J'espère que cet article vous donnera au moins envie d'essayer cet outil.
De mon coté, je commence à remplacer petit à petit mes borg par restic, et j'ai déjà supprimé duplicati depuis.