mkdevs

[ TWITTER ] [ FACEBOOK ] [ GITHUB ] [ LINKEDIN ]

Bienvenue sur mkdevs



Sauvegarder et restaurer ses données avec BorgBackup

juin 25, 2026 | Documentations

Découvrons comment mettre en place une stratégie de sauvegarde robuste, ignorer les dossiers inutiles (node_modules, .git...) et restaurer vos fichiers en un clin dœil.

Avoir des sauvegardes régulières est la base de toute bonne hygiène informatique. Cependant, copier bêtement ses dossiers sur un disque externe devient vite fastidieux, lourd et inefficace. Entre les dossiers de dépendances géants (comme l'incontournable node_modules ), les caches de compilation (.NET, Python, Java) et l'historique des dépôts locaux, on se retrouve rapidement à saturer notre espace disque pour rien.

C'est là qu'intervient BorgBackup (ou simplement Borg), un outil de sauvegarde en ligne de commande ultra-performant qui gère nativement la déduplication, la compression et l'exclusion intelligente.

1. Pourquoi BorgBackup ?

Contrairement à un simple copier-coller ou un tar classique, Borg découpe vos fichiers en morceaux (chunks) et ne sauvegarde que les parties uniques. Si vous avez dix projets utilisant la même version d'une bibliothèque, elle ne sera stockée qu'une seule fois. Le gain d'espace et de temps est tout simplement phénoménal.

2. Configurer les exclusions intelligentes

Lorsque l'on navigue entre plusieurs écosystèmes (Angular, React, Python, .NET, Java, PHP, ou même du COBOL), nos répertoires de travail se remplissent de fichiers temporaires et de builds lourds qu'il est inutile de sauvegarder. La meilleure approche consiste à externaliser ces patterns dans un fichier de configuration dédié : ~/.config/borg_backup/borg_exclude.conf.

# --- DÉPENDANCES ET PAQUETS ---
**/node_modules
**/.venv
**/venv
**/packages
**/vendor

# --- BUILDS ET SORTIES BINAIRES ---
**/bin
**/obj
**/dist
**/target
**/build
**/*.exe
**/*.dll

# --- VERSIONNING ET SÉCURITÉ ---
**/.git
**/.cache
**/__pycache__

En utilisant le préfixe **/, Borg va automatiquement ignorer ces dossiers et fichiers, peu importe où ils se trouvent dans votre arborescence de projets.

3. Automatiser avec un script Bash

Le secret d'un bon backup est l'automatisation. Un script Bash permet de lire vos répertoires sources (définis dans un fichier borg_backup.conf propre, débarrassé de ses commentaires), de lancer la commande borg create avec les exclusions, puis de synchroniser le dépôt local vers un support externe (comme un disque disque EXTERNAL_DISK) via rsync .

Le script se charge également du Pruning (le nettoyage automatique), une politique de rétention indispensable pour ne garder par exemple que les 7 derniers jours, 4 dernières semaines et 12 derniers mois de sauvegardes.

Le script de backup

#!/usr/bin/env bash

# --- CONFIGURATION ---
BACKUP_DIR="$HOME/BorgBackup"
EXTERNAL_MOUNT="/media/USERNAME/DISKNAME" # A configurer selon vos besoins
CONF_FILE="$HOME/.config/borg_backup/borg_backup.conf"
EXCLUDE_FILE="$HOME/.config/borg_backup/borg_exclude.conf"
ARCHIVE_NAME="backup-$(date +'%Y-%m-%d-%H%M%S')"

# Sécurité si les fichiers de conf n'existent pas
if [ ! -f "$CONF_FILE" ]; then
  echo "❌ Erreur : Le fichier de configuration $CONF_FILE est introuvable."
  exit 1
fi

if [ ! -f "$EXCLUDE_FILE" ]; then
  echo "❌ Erreur : Le fichier d'exclusions $EXCLUDE_FILE est introuvable."
  exit 1
fi

# 1. Initialisation du dépôt Borg local s'il n'existe pas
if [ ! -d "$BACKUP_DIR" ] || [ ! -f "$BACKUP_DIR/config" ]; then
  echo "📦 Initialisation (ou réparation) du dépôt Borg local dans $BACKUP_DIR..."
  rm -rf "$BACKUP_DIR" # Nettoyage si un dossier vide ou corrompu existait
  borg init --encryption=none "$BACKUP_DIR"
fi

# 2. Lancement de la sauvegarde Borg
echo "⚡ Création de l'archive Borg : $ARCHIVE_NAME..."

# On lit le fichier de conf en filtrant les lignes vides et les commentaires
mapfile -t TARGETS < <(sed -e 's/#.*//' -e '/^\s*$/d' "$CONF_FILE")

# Sécurité : on vérifie si on a bien des dossiers à sauvegarder
if [ ${#TARGETS[@]} -eq 0 ]; then
  echo "❌ Erreur : Aucun dossier valide à sauvegarder trouvé dans $CONF_FILE."
  exit 1
fi

# Lancement avec gestion des exclusions
borg create --stats --progress \
  --exclude-from "$EXCLUDE_FILE" \
  "$BACKUP_DIR::$ARCHIVE_NAME" \
  "${TARGETS[@]}"

# Nettoyage automatique (Prune) : Garde les 7 derniers jours, 4 dernières semaines, 12 derniers mois
borg prune -v --list "$BACKUP_DIR" --keep-within=7d --keep-weekly=4 --keep-monthly=12

# 3. Transfert/Synchro vers le disque externe (si branché)
echo "🔄 Vérification du disque externe..."
if [ -d "$EXTERNAL_MOUNT" ]; then
  echo "💾 Disque externe détecté. Synchronisation du dépôt..."

  # Vérification si rsync est disponible
  if command -v rsync &>/dev/null; then
    rsync -av --delete "$BACKUP_DIR/" "$EXTERNAL_MOUNT/BorgBackup/"
    echo "✅ Synchronisation terminée !"
  else
    echo "❌ Erreur : 'rsync' n'est pas installé. Impossible de synchroniser le disque externe."
  fi
else
  echo "⚠️ Disque externe non détecté. Sauvegarde conservée uniquement en local."
fi

Exemple de fichier de configuration

# $HOME/.config/borg_backup/borg_backup.conf

/home/michel/Documents
/home/michel/Pictures
/home/michel/Music
/home/michel/workspace
/home/michel/.config/awesome
/home/michel/.config/kitty
/home/michel/.config/zathura
/home/michel/.ssh
/home/michel/.gnupg
/home/michel/.password-store
/home/michel/.bashrc
/home/michel/.bash_aliases
/home/michel/.bash_functions
/home/michel/.oh-my-bash

# Le system de backup lui-même
/home/michel/.config/borg_backup
/home/michel/backup.sh

Exemple de fichier d'exclusion

# --- DÉPENDANCES ET PAQUETS ---
**/node_modules
**/bower_components
**/.venv
**/venv
**/env
**/ENV
**/packages
**/vendor
**/.composer

# --- BUILDS, BINAIRES ET SORTIES ---
**/bin
**/obj
**/dist
**/.next
**/.nuxt
**/out
**/target
**/.gradle
**/build
**/*.exe
**/*.dll
**/*.so
**/*.o
**/*.lst
**/*.gnt

# --- CACHES ET FICHIERS TEMPORAIRES ---
**/.cache
**/.sass-cache
**/__pycache__
**/*.pyc
**/*.pyo
**/*.pyd
**/.phpunit.result.cache
**/.angular
**/.nx

# --- VERSIONNING (Optionnel mais demandé) ---
# Note : Si tu veux garder l'historique de tes commits locaux, retire **/.git
**/.git
**/.svn
**/.hg

# --- SYSTÈME ET IDE ---
**/.DS_Store
**/Thumbs.db
**/.idea
**/.vscode
**/.project
**/.classpath

4. Et la restauration ? C'est là que réside la vraie valeur !

Un backup n'a de valeur que si l'on sait le restaurer. Heureusement, Borg brille par sa flexibilité à travers trois approches principales.

A. Lister les archives disponibles

Pour connaître l'état de votre dépôt et identifier l'archive que vous souhaitez exploiter :

borg list ~/BorgBackup

B. La restauration chirurgicale (Extraction)

Si vous avez supprimé un fichier de configuration ou un script par erreur, pas besoin de tout restaurer. Placez-vous dans votre répertoire courant et extrayez uniquement le chemin ciblé (en omettant le slash initial) : 

$ cd ~
$ borg extract ~/BorgBackup::backup-2026-06-25-073453 home/michel/.config/borg_backup.conf

⚠️ Règle d'or :
Borg extrait toujours les fichiers relativement au dossier où vous vous trouvez actuellement. Il n'écrasera
jamais directement vos fichiers système actifs sans votre accord.

C. La méthode magique : Le montage virtuel (FUSE)

C'est sans doute la fonctionnalité la plus confortable. Borg vous permet de "mount" l'intégralité de votre dépôt de sauvegarde sous forme de système de fichiers virtuel. Vous pouvez alors naviguer dedans avec votre terminal classique ou votre explorateur de fichiers :

$ mkdir ~/AperçuBackup
$borg mount ~/BorgBackup ~/AperçuBackup$ cd ~/AperçuBackup
# Vous voyez ici un dossier par archive. Vous pouvez copier/coller vos fichiers !
$ borg umount ~/AperçuBackup

Conclusion

En combinant la puissance de déduplication de Borg, un fichier d'exclusion bien calibré pour vos technologies de développement et une synchronisation rsync vers un support physique externe (fiable), vous obtenez une solution entièrement sous votre contrôle. Testez vos restaurations régulièrement, et dormez sur vos deux oreilles !