Skip to content

Sauvegardes Restic sur un serveur Windows

Cette page décrit comment on sauvegarde un disque Windows (typiquement E:\) vers SwissBackup avec Restic, et surtout comment restaurer quand il en a besoin. Restic chiffre les données côté client, avant l'envoi : le stockage Infomaniak ne voit que des blocs chiffrés, et un outil tiers comme Cyberduck ne montre que des fichiers opaques. Conséquence directe : sans la clef Restic, plus rien n'est récupérable, c'est donc le secret le plus critique à protéger.

Pour le flux équivalent sur les instances Linux, voir Sauvegardes. Liens utiles : documentation Restic, documentation Infomaniak SwissBackup.

Architecture en bref

text
Disque Windows (E:)
        |
        v
Restic (chiffrement + déduplication)
        |
        v
SwissBackup (OpenStack Swift)

Une seule machine pousse vers SwissBackup. La restauration peut se faire depuis n'importe quelle machine qui a la clef Restic et les credentials SwissBackup.

Installation

Restic s'installe via winget :

powershell
winget install --exact --id restic.restic --scope Machine
restic version

Configuration

Clef de chiffrement

Restic chiffre tous les snapshots avec une clef. La générer une fois, depuis WSL ou n'importe quelle machine Linux :

powershell
openssl rand -base64 48

Et l'écrire dans un fichier local :

powershell
notepad E:\tools\restic-key.txt

La clef Restic est non négociable

Sans restic-key.txt, aucune sauvegarde n'est récupérable. La clef doit être stockée en parallèle dans Guardian, dans la note Cloud Infomaniak Backup Codes. Sans cette redondance, perdre la machine équivaut à perdre les backups.

Fichier d'environnement

Restic et le client OpenStack lisent leur configuration depuis des variables d'environnement. On regroupe tout dans un script PowerShell, à sourcer avant chaque utilisation :

powershell
# E:\restic_env.ps1
$env:OS_AUTH_URL="https://swift02-api.cloud.infomaniak.ch/identity/v3"
$env:OS_REGION_NAME="RegionOne"
$env:OS_PROJECT_NAME="sb_project_SBI-XXXX"
$env:OS_PASSWORD="PASSWORD_SWISSBACKUP"
$env:OS_USER_DOMAIN_NAME="default"
$env:OS_USERNAME="SBI-XXXX"
$env:OS_PROJECT_DOMAIN_NAME="default"

$env:RESTIC_REPOSITORY="swift:sb_project_SBI-XXXX:/windows-backup"
$env:RESTIC_PASSWORD_FILE="E:\tools\restic-key.txt"

Pour charger la configuration dans une session :

powershell
. E:\restic_env.ps1
echo $env:RESTIC_REPOSITORY

Chargement de l'environnement Restic : exécution de , puis  du dossier de config qui contient  et

Initialiser le dépôt

À faire une seule fois, à la création du dépôt SwissBackup :

powershell
restic init

Sauvegarder

Sauvegarde manuelle

powershell
restic backup E:\ `
  --exclude "E:\System Volume Information" `
  --exclude "E:\`$RECYCLE.BIN"

Et lister les snapshots produits :

powershell
restic snapshots

Sauvegarde automatisée

Un petit script PowerShell encapsule la sauvegarde et l'application de la politique de rétention :

powershell
# E:\restic-backup.ps1
. E:\restic_env.ps1

restic backup E:\ `
  --exclude "E:\System Volume Information" `
  --exclude "E:\`$RECYCLE.BIN"

restic forget `
  --keep-hourly 24 `
  --keep-daily 7 `
  --keep-weekly 4 `
  --keep-monthly 12 `
  --prune

La rétention conserve :

OptionSens
--keep-hourly 24les 24 dernières heures
--keep-daily 7les 7 derniers jours
--keep-weekly 4les 4 dernières semaines
--keep-monthly 12les 12 derniers mois

--prune libère l'espace en supprimant les blocs qui ne sont plus référencés.

Planification via Task Scheduler

  1. Ouvrir Task Scheduler et créer une nouvelle tâche.
  2. Onglet Trigger : Daily, Repeat task every 15 minutes (ou 1 heure), pendant la journée complète.
  3. Onglet Action : Start a program, avec :
    • Program/script : powershell
    • Add arguments : -ExecutionPolicy Bypass -File E:\restic-backup.ps1

Vérifier les sauvegardes

Lister les snapshots et leurs fichiers :

powershell
restic snapshots
restic ls latest

Vérifier l'intégrité du dépôt (à faire périodiquement) :

powershell
restic check

Restaurer

C'est la partie qui compte le jour où ça se passe mal. Le principe est simple : on identifie le bon snapshot, puis on extrait soit tout, soit une partie, soit on monte le dépôt pour fouiller à la main.

Identifier le bon snapshot

Sur un dépôt actif, la liste de snapshots grossit vite : avec une sauvegarde toutes les 15 minutes, on dépasse facilement les 2'500 snapshots. La commande de base les liste tous :

powershell
restic snapshots

Sortie complète de  sur un dépôt de production : colonnes ID, Time, Host, Tags, Paths, Size, plusieurs centaines de lignes qui défilent

Pour s'y retrouver, des filtres :

powershell
# Les 10 derniers snapshots, tous hôtes confondus
restic snapshots --latest 10

# Seulement la machine prod-windows
restic snapshots --host prod-windows

# Seulement ce qui couvre E:\
restic snapshots --path "E:\"

Combinables. Un cas fréquent, "le dernier snapshot du serveur de prod", se fait avec restic snapshots --host prod-windows --latest 10.

L'ID court (8 caractères, en première colonne) suffit pour la commande de restauration ci-dessous.

Avant de restaurer, on a souvent besoin de fouiller dans un snapshot pour repérer le bon fichier ou vérifier qu'on prend la bonne version. Plusieurs commandes pour ça :

powershell
# Lister la racine du snapshot le plus récent
restic ls latest /

# Lister un sous-dossier précis (récursivement si besoin)
restic ls latest /E/<customer>/Media --recursive

# Chercher un fichier par nom à travers tous les snapshots
restic find "web.config"
restic find "facture-2026-*.pdf"

Session restic d'exploration : ,  qui remonte tous les chemins matchant à travers les snapshots, et  pour la liste filtrée des 10 derniers snapshots

Syntaxe des chemins : le préfixe peut varier

Les chemins de filtres sont absolus depuis la racine du snapshot (commencent toujours par /) et sans la lettre de lecteur Windows sous sa forme E:. En revanche, selon comment le backup a été lancé, la lettre peut apparaître comme un dossier de premier niveau : la racine d'un snapshot de E:\ est parfois /<customer>/..., parfois /E/<customer>/.... En cas de doute, restic ls latest / ou restic find <nom-de-fichier> montrent en une commande la forme exacte à utiliser.

Restaurer vers un dossier dédié

C'est le mode par défaut et le plus sûr : les fichiers du snapshot sont écrits dans un dossier neuf, sans toucher au disque source.

powershell
restic restore abcd1234 --target E:\restore

Restic affiche d'abord une progression le temps de charger les index, puis l'extraction démarre :

Restauration en cours :  avec une progression "0:40 58.06% 1541 / 2654 index files loaded"

À l'issue de la commande, E:\restore contient l'arborescence complète du snapshot. Tu peux ensuite recopier à la main ce qui t'intéresse vers l'emplacement d'origine.

Restaurer un sous-ensemble de fichiers

Pour ne récupérer que quelques fichiers ou un sous-dossier, deux approches.

Filtrer une restauration classique avec --include (combinable, --exclude fait l'inverse) :

powershell
restic restore abcd1234 --target E:\restore `
  --include "/E/cvdp/Media" `
  --include "/E/cvdp/Customer"

Restauration d'un sous-ensemble :  pour repérer le dossier, puis deux  sur des snapshots différents, chacun terminant par "Summary: Restored 380 / 376 files/dirs"

Extraire directement un seul fichier ou un sous-arbre vers la cible de ton choix, sans passer par un dossier de restauration complet :

powershell
# Un fichier à un endroit choisi
restic dump latest /E/cvdp/Media/logo.png > C:\tmp\logo.png

# Un sous-arbre entier, sous forme de tar à dérouler
restic dump latest /E/cvdp/Media > C:\tmp\media.tar
tar -xf C:\tmp\media.tar -C C:\tmp\media\

Les chemins suivent la même règle que pour restic ls (voir la note ci-dessus).

Parcourir un snapshot comme un disque (mount)

Idéal quand tu cherches "le bon" fichier sans encore savoir lequel. Restic monte le dépôt comme un disque accessible dans l'Explorateur :

powershell
restic mount E:\restic-mount

Tu navigues ensuite dans E:\restic-mount\snapshots, chaque sous-dossier étant un snapshot daté. Tu copies-colles directement depuis l'Explorateur Windows.

Pour démonter, Ctrl+C dans la fenêtre PowerShell qui tient le mount.

Restaurer en place sur le disque source

Possible en pointant --target E:\ directement, mais ça écrase les fichiers existants par les versions du snapshot. À réserver aux cas où tu sais exactement que c'est ce que tu veux (sinistre total, ou perte récente bien identifiée). Dans la majorité des cas, restaurer vers un dossier dédié puis recopier manuellement reste plus sûr.

Après la restauration

  • Vérifier la taille et le nombre de fichiers attendus.
  • Pour les fichiers critiques, ouvrir un échantillon ou comparer un checksum.
  • Si la restauration concerne des données applicatives (DB, médias d'un site Umbraco / nopCommerce), redémarrer l'application après la copie pour repartir d'un état propre.

Bonnes pratiques

  • Clef Restic dans Guardian. C'est le seul artefact qui ne peut pas être régénéré.
  • Tester une restauration régulièrement. Une sauvegarde non testée n'est pas une sauvegarde.
  • restic check périodique. Détecte la corruption avant que tu en aies besoin.
  • Surveiller la sortie de la tâche planifiée. Une sauvegarde qui échoue silencieusement est pire qu'une absence de sauvegarde.

Contributors

The avatar of contributor named as Clément Favre Clément Favre

Changelog