Outils pour utilisateurs

Outils du site


borg

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
borg [/22092025/ 11:09] colmarisborg [/29092025/ 06:22] (Version actuelle) – [Automatisation] colmaris
Ligne 1: Ligne 1:
 Borg Backup est un programme de sauvegarde incrémentielle en ligne de commande. Il permet de fournir un moyen efficace et sûr de sauvegarder des données. Cette page aborde uniquement les sauvegardes distantes via SSH. Borg Backup est un programme de sauvegarde incrémentielle en ligne de commande. Il permet de fournir un moyen efficace et sûr de sauvegarder des données. Cette page aborde uniquement les sauvegardes distantes via SSH.
 +
  
  
Ligne 9: Ligne 10:
 sudo apt install borgbackup sudo apt install borgbackup
 </code> </code>
 +
  
  
Ligne 24: Ligne 26:
   *<key>-e</key> : signifie que le dépôt sera chiffré   *<key>-e</key> : signifie que le dépôt sera chiffré
   * <key>repokey</key> : indique que la clef de chiffrage sera stockée au sein même du dépôt.   * <key>repokey</key> : indique que la clef de chiffrage sera stockée au sein même du dépôt.
 +
 +{{ ::borg-init.png? |}}
 +
 +
  
 ====== Création de la sauvegarde ====== ====== Création de la sauvegarde ======
  
-Pour chacune de mes sauvegardes j'utilise ce script bash. +Pour chacune de mes sauvegardes j'utilise ce script bash. [[https://blog.flozz.fr/2023/10/15/borgbackup-sauvegarde-sur-une-machine-distante-via-ssh/#script-bash|Source]]
  
 Faire un topo sur la rétention des sauvegardes. FIXME //à faire// Faire un topo sur la rétention des sauvegardes. FIXME //à faire//
Ligne 34: Ligne 40:
 #!/bin/bash #!/bin/bash
  
-adresse du dépôt +#!/bin/bash
-export BORG_REPO=ssh://user@adresse-serveur:port-ssh/chemin/du/dépôt+
  
-configuration de la passphrase +Adresse du dépôt 
-export BORG_PASSPHRASE='strong-passphrase'+export BORG_REPO='ssh://borg@backup1.flozz.lan/home/borg/my-machine1-backup'
  
-quelques opmtimisation et gestion des erreurs +Mot de passe du dépôt 
-info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } +export BORG_PASSPHRASE='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
-trap 'echo $( date ) Backup interrupted >&2; exit 2INT TERM+
  
-info "Starting backup"+# Chemin vers l'exécutable de Borg (pratique en cas d'installation 
 +# non-standard ou si le script s'exécute dans un contexte ou la variable 
 +# $PATH n'est pas correctement définie) 
 +BORG=/usr/bin/borg
  
-Sauvegarde+Préparation ================================================================
  
-borg create                         \ +# Ici on peut exécuter des commandes pour préparer la sauvegarde, comme par 
-    --verbose                       \ +# exemple faire des dumps des bases de données..
-    --filter AME                    \ +# 
-    --list                          \ +# Attention à bien gérer les erreurs !
-    --stats                         \ +
-    --show-rc                       \ +
-    --compression lzma               \ +
-    --exclude-caches                \ +
-    --exclude 'home/*/.cache/*'     \ +
-    --exclude 'var/tmp/*'           \ +
-                                    \ +
-    ::'{hostname-{now}'            \ +
-    /opt/mailcow-backup+
  
-backup_exit=$?+# Sauvegarde =================================================================
  
-info "Pruning repository"+$BORG create \ 
 +    --verbose \ 
 +    --list \ 
 +    --stats \ 
 +    --show-rc \ 
 +    --compression zstd \ 
 +    '::auto-{hostname}-{now}'
 +    /root \ 
 +    /home \ 
 +    /etc \ 
 +    /var/www
  
-Utilisez la sous-commande `prune` pour conserver vos archives quotidiennes et/ou hebdomadaires et/ou mensuelles +Dans la commande "borg create" ci-dessus, on ne précise que le nom de 
-de CETTE machine. La correspondance « {hostname}-* » est très importante pour +# l'archive à créer et pas le chemin du dépôt, car celui-ci est déjà défini 
-limiter l'opération de prune aux archives de cette machine et ne pas l'appliquer +dans la variable d'environnement $BORG_REPO
-aux archives d'autres machines :+
  
-borg prune                          \ +# Je tiens également à attirer votre attention sur le nom de cette archive 
-    --list                          \ +# que je préfixe par "auto-". Cela me permet de distinguer les sauvegardes 
-    --glob-archives '{hostname}-*'  \ +# automatique d'éventuelles sauvegardes manuelles. On va voir à quoi cela 
-    --show-rc                       \ +# sert un peu plus tard... :)
-    --keep-daily    1               \ +
-    --keep-weekly                 \ +
-    --keep-monthly  0               \ +
-    --keep-yearly   0+
  
-prune_exit=$?+# On récupère le code de retour de la commande précédente. 
 +# 0 = OK, 1 = WARNING, 2 = ERROR 
 +BACKUP_STATUS=$?
  
-Libérer de l'espace disque sur le répertoire en compactant les segments.+En cas d'erreur on rapporte l'erreur et on quitte... 
 +if [[ $BACKUP_STATUS != 0 && $BACKUP_STATUS != 1 ]] ; then 
 +    echo "Backup failed!" 
 +    exit 1 
 +fi
  
-info "Compacting repository"+# NOTE : ici je vérifie explicitement que Borg ne s'est pas terminé avec 
 +# son code de retour OK ou WARNING et pas simplement qu'il s'est terminé par 
 +# ERROR. Il est en effet possible que d'autres codes d'erreurs soient 
 +# retournés, comme par exemple 127, retourné par Bash s'il ne trouve pas la 
 +# commande, ou 137 si le processus de Borg a été tué (sigkill).
  
-borg compact+# Nettoyage ==================================================================
  
-compact_exit=$?+# On commence par élaguer le dépôt...
  
-global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit )) +$BORG prune \ 
-global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))+    --verbose \ 
 +    --list \ 
 +    --stats \ 
 +    --show-rc \ 
 +    --glob-archives 'auto-{hostname}-'
 +    --keep-daily 7 \ 
 +    --keep-weekly 4 \ 
 +    --keep-monthly 12 \ 
 +    --keep-yearly 3
  
-if [ ${global_exit} -eq 0 ]; then +# Dans la commande "borg prune" ci-dessus, je lui demande de considérer 
-    info "Backup, Prune, and Compact finished successfully+# uniquement les sauvegardes dont le nom commence par "auto-machine1-". 
-elif [ ${global_exit} -eq 1 ]; then +# Cela me permet de faire des sauvegardes manuelles (par exemple en cas de 
-    info "Backup, Prune, and/or Compact finished with warnings" +# grosse mise à jour des sites hébergés) sans que ces sauvegardes manuelles 
-else +# ne soient supprimées automatiquement. 
-    info "Backup, Prune, and/or Compact finished with errors"+ 
 +PRUNE_STATUS=$? 
 + 
 +# En cas d'erreur on rapporte l'erreur et on quitte... 
 +if [[ $PRUNE_STATUS != 0 && $PRUNE_STATUS != ]] ; then 
 +    echo "Prune failed!
 +    exit 1
 fi fi
  
-exit ${global_exit}+# ... puis on libère l'espace disque 
 + 
 +$BORG compact \ 
 +    --verbose \ 
 +    --show-rc 
 + 
 +COMPACT_STATUS=$? 
 + 
 +# En cas d'erreur on rapporte l'erreur et on quitte... 
 +if [[ $COMPACT_STATUS != 0 && $COMPACT_STATUS != 1 ]] ; then 
 +    echo "Compaction failed!" 
 +    exit 1 
 +fi 
 + 
 +# ATTENTION : Si l'option --append-only est utilisée sur le serveur, les 
 +# anciennes archives ne seront pas effectivement supprimées (seulement marquées 
 +# comme tel), et l'espace disque ne sera pas récupéré. Il faudra exécuter ces 
 +# commande sans le mode append only de temps en temps. 
 + 
 +# Finition =============================================================== 
 + 
 +# Ici on peut exécuter des commandes pour nettoyer après la sauvegarde. On peut 
 +# par exemple supprimer les dumps de base de données faits avant la sauvegarde. 
 +
 +# Attention à bien gérer les erreurs ! 
 + 
 +# Reporting ============================================================== 
 + 
 +echo "Backup finished" 
 +exit 0 
 +</code> 
 + 
 +Sécurisation du script. Aucun accès a part pour le root. 
 + 
 +<code bash> 
 +chown root:root /opt/my-backup.sh 
 +chmod 700 /opt/my-backup.sh
 </code> </code>
  
Ligne 112: Ligne 175:
 </code> </code>
  
 +====== Restaurer une sauvegarde ======
 +
 +Chez borg on ne parle pas de restauration à proprement parler, mais plutôt d'une extraction de notre sauvegarde.
 +
 +<code bash> borg extract ssh://draconis@192.168.21.105:22/backup/colmaris::version-a-extraire /point/de/restauration</code>
 +
 +On peut aussi restaurer uniquement certains éléments.
 +
 +<code bash> borg extract ssh://draconis@192.168.21.105:22/backup/colmaris::version-a-extraire {élément à restaurer} /point/de/restauration</code>
 +
 +
 +
 +====== Commandes utiles ======
 +
 +Lister les sauvegardes.
 +
 +<code bash> borg list ssh://draconis@192.168.21.105:22/backup/colmaris</code>
 +
 +Lister le contenu d'un sauvegarde FIXME
 +
 +
 +<code bash> borg list ssh://draconis@192.168.21.105:22/backup/colmaris::version-sauvegarde</code>
 +
 +Obtenir des informations sur une sauvegarde
 +
 +<code bash> borg info ssh://draconis@192.168.21.105:22/backup/colmaris::version-sauvegarde</code>
borg.1758539376.txt.gz · Dernière modification : de colmaris