cipherbliss_blog

Borg backup version 2 est arrivé

Quelques nouveautés avec borg version 2, les commandes changent un peu, il est plus rapide, plus dur, meilleur, plus fort. Fait amusant, je l'ai utilisé sans savoir que c'était une référence à une série pas très connue que seuls des gens vachement plus vieux que moi regardaient.

On va commencer par définir un fichier contenant un mot de passe que Borg va pouvoir utiliser pour chiffrer les fichiers du dépot.

On définit quelques variables en Bash dans un fichier afin de ne pas avoir à se répéter partout. Faites chauffer votre terminal préféré:

# --------- archives dans un pool zfs nommé poule sur mon ordinateur nommé spaceship.

# --------- Ce nommage est arbitraire, vous pouvez bien sûr mettre ce que vous voulez et sauvegarder plusieurs dossiers tout aussi arbitraires.

# ---------  Pour cet exemple on va dire que ce qu'on veut sauvegarder n'est pas l'intégralité de notre home mais un autre dossier auquel on fera référénce via une variable en bash par la suite.


export ARCHIVE_SYNCABLE="/home/poule/encrypted/stockage-syncable" # place where we have our things sorted, other than home
export BORG_PASS_FILE="$ARCHIVE_SYNCABLE/.ma-borg-passphrase"
mkdir -p $ARCHIVE_SYNCABLE

editor BORG_PASS_FILE # on définit notre phrase de passe dans notre éditeur de texte favori
export BORG_PASSCOMMAND="cat $BORG_PASS_FILE" # get the borg repo pass 

export SPACESHIP_NEW_BORG_REPO="/home/poule/borg_archives/borg2_spaceship"
export BORG_REPO=$SPACESHIP_NEW_BORG_REPO

# --------- gestion des exclusions de dossier à sauvegarder
EXCLUDE=( ".yarn" ".nvm" "cache" ".cache" "Cache" "Steam" "steamapps" ".npm" ".yarn" "node_modules" ".mozilla" "vendor" "Steam" ".rbenv" ".config/borg" "@eaDir" "steamapps" "bower_components" ".cargo" ".gem" ".BOINC")
exclude_opts=()

for item in "${EXCLUDE[@]}"; do
      exclude_opts+=( --exclude="$item" )
done

export exclude_opts

# --------- création du dossier qui va contenir notre dépot borg
mkdir -p $SPACESHIP_NEW_BORG_REPO

# --------- Installation de borg version 2 avec pip
pip install "borgbackup==2.0.0b5"
borg --version

# --------- vous devriez voir marqué "borg 2.0.0b5", si vous ne le voyez pas, relancez votre terminal

Et voilà on peut maintenant créer une nouvelle sauvegarde avec un dossier contenant peu de choses dans un premier temps.

**

Créer un nouveau dépôt

Ici on demande la création d'un dépot chiffré par plusieurs algorithmes contenant sa clé, qui nécessite une phrase de passe, que nous avons défini dans un fichier texte ci dessus. La variable BORGPASSCOMMAND sera utilisée par borg pour aller chercher cette phrase.

borg rcreate --encryption=repokey-blake2-aes-ocb -r $BORG_REPO

# et voilà un "repository" créé, on va pouvoir le remplir de plusieurs sauvegardes

Créer une archive dans le dépôt

pour l'exemple j'ai précisé que je souhaitais une compression zstd de niveau 9, soit le niveau maximum.

borg create $BORG_REPO::encrypted_spaceship_{now} $ARCHIVE_SYNCABLE "${exclude_opts[@]}" --progress --verbose --stats --compression zstd,9

Pour notre exemple, la partie $ARCHIVESYNCABLE désigne un dossier que l'on veut inclure dans notre sauvegarde, mais on peut mentionner plusieurs chemins vers des dossiers ou des fichiers séparés d'un espace si on le veut.

Enlever les anciennes sauvegardes de notre dépot en faisant un tri automatique.

borg prune -r /home/poule/borg_archives/orgmode --list \
--list \
--match-archives 'sh:{hostname}-*' \
--show-rc \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6

Pour convertir votre archive borg existante, y'a une commande mais ça ne marche pas :D

Automatiser dans un cronjob

Plus qu'a faire vos commandes dans un fichier exécutable, par exemple localisé dans un dossier nextcloud situé ici: ~/Nextcloud/ressources/workflownextcloud/syncspaceship.sh et à le lancer périodiquement dans un cronjob. Pour modifier votre table de commandes cron:

crontab -e

Et rajouter ceci dans votre crontab pour lancer ce script toutes les 20 minutes par exemple:

# lancer le script de sauvegarde toutes les 
*/20 * * * * /bin/bash ~/Nextcloud/ressources/workflow_nextcloud/sync_spaceship.sh

Le site web crontab.guru pourra vous aider à clarifier la périodicité de vos sauvegardes. Pour déterminer une périodicité optimale, il faut voir le temps que prend votre sauvegarde à se faire.

Il est aussi possible d'utiliser Borgmatic qui se chargera de vos sauvegardes borg selon un fichier de configuration. Ou encore Ansible et son rôle borg backup.

Vous trouverez la doc complète d'installation de plusieurs façons et le détail des commandes sur le site de documentation de borgbackup

have fun et bonne stratégie de backup!