mywiki/linux/borg.md

4.5 KiB

borgbackup

In Debian e derivate, installare il pacchetto col comando:

$ sudo apt install borgbackup -y

Inizializzazione del repository

Per inizializzare il repository, criptato tramite una password:

$ borg init --encryption=keyfile /path/to/repo

Backup

Per eseguire un backup manualmente

$ borg create --stats --list --progress /path/to/repo::25-11-2023 /path/to/source/

dove --stats permette di stampare statistiche aggiuntive sull'archivio, mentre l'opzione --list di visualizzare la lista degli oggetti inseriti nell'archivio.

Col flag --compression è possibile impostare anche il livello di compressione. Vedere: Backup compression

È possibile anche visualizzare la lista dei backup:

borg list /path/to/repo

Restore

Per ripristinare un backup, nella cartella corrente:

$ borg extract -v --list /path/to/repo/::25-11-2023

L'opzione --dry-run permette di vedere cosa verrebbe estratto, ma senza che sia veramente estratto.

Ulteriori esempi:

# Extract entire archive
$ borg extract /path/to/repo::my-files

# Extract entire archive and list files while processing
$ borg extract --list /path/to/repo::my-files

# Verify whether an archive could be successfully extracted, but do not write files to disk
$ borg extract --dry-run /path/to/repo::my-files

# Extract the "src" directory
$ borg extract /path/to/repo::my-files home/USERNAME/src

# Extract the "src" directory but exclude object files
$ borg extract /path/to/repo::my-files home/USERNAME/src --exclude '*.o'

Montare l'archivio

$ mkdir /tmp/borg/

$ borg mount /path/to/repo /tmp/borg/

$ ls -l /tmp/borg/

Retention

Col comando borg prune è possibile stabilire una politica di conservazione dei backup (https://borgbackup.readthedocs.io/en/stable/usage/prune.html)

Ad esempio:

# Keep 7 end of day, 4 additional end of week archives, and an end of month archive for every month:
borg prune --list --stats --force --keep-daily=7 --keep-weekly=4 --keep-monthly=-1 /path/to/repo

borg prune -v /path/to/repo --stats \
    --keep-hourly=12 --keep-daily=60 --keep-weekly=12 --keep-monthly=24

Script

Ecco un semplice esempio:

#!/bin/bash

# Percorsi
REPO_PATH=/media/user/Backup/Snapshot/
DATA_PATH=~/
LOG_FILE=~/logs/borg_backup.log

export BORG_PASSPHRASE='*****************************************************'

# Inizializzazione di Borg
borg init --encryption=keyfile /media/user/Backup/Snapshot/

# Creazione del backup con Borg
if borg create --stats --list --progress --compression lz4      \
    --exclude 'home/*/*.log.*'                                  \
    --exclude 'home/*/jd2/'                                     \
    --exclude-caches                                            \
    --exclude '*.deb'                                           \
    --exclude 'home/*/.cargo/'                                  \
    --exclude 'home/*/VirtualBoxVMs/'                           \
    --exclude 'home/*/iso/'                                     \
    --exclude 'home/*/Trash/'                                   \
    $REPO_PATH::{now:'%H:%M_%d-%m-%Y'} $DATA_PATH; then
    echo "$(date '+%H:%M:%S %d %b %Y'): Backup con Borg completato con SUCCESSO." >> $LOG_FILE 
else
    echo "$(date '+%H:%M:%S %d %b %Y'): ERRORE durante la creazione del backup con Borg." >> $LOG_FILE
    exit 1
fi

# This command frees repository space by compacting segments
borg compact $REPO_PATH

# Pulizia del repository
# Keep 7 end of day, 4 additional end of week archives, and an end of month archive for every month:
borg prune --list --stats --force \
    --keep-daily=7 --keep-weekly=4 --keep-monthly=-1 $REPO_PATH && borg list $REPO_PATH >> $LOG_FILE

exit 0;

Per il montaggio:

#! /bin/bash

# Configurazione
export BORG_PASSPHRASE='***********************************************************'
REPO_PATH="/media/user/Backup/Snapshot"
TMP_DIR="/tmp/borg"

# Creazione della directory temporanea
mkdir -p $TMP_DIR 2> /dev/null 

borg mount $REPO_PATH $TMP_DIR && ls -l $TMP_DIR

exit 0

Collegamenti