Table of Contents

Borg Backup

Variabili di ambiente

Il programma borg esegue operazioni diverse a seconda dei parametri forniti sulla riga di comando. In generale avrà bisogno di sapere su quale repository (spazio di archiviazione) lavorare e chiederà in maniera interattiva la passphrase che sblocca la chiave di cifratura. Per non dover ripetere queste informazioni in ogni comando, è possibile impostare due variabili di ambiente opportune:

export BORG_REPO='/home/backups/documents'
export BORG_PASSPHRASE='475497037d3c00c9f07d259f63a30547'

Negli esempi che seguiranno il repository non è mai indicato perché si suppone che sia istanziata la variabile BORG_REPO. I comandi potranno essere eseguiti in modo non interattivo perché la password sarà istanziata in BORG_PASSPHRASE.

Repository locale o remoto

In modo abbastanza trasparente il programma può utilizzare un repository locale (spazio disco direttamente disponibile sull'host) oppure uno remoto (host remoto accessibile via SSH). È sufficiente usare la sintassi opportuna:

export BORG_REPO='/data/backup/main'
export BORG_REPO='ssh://username@example.com:2022/~/backup/main'

Inizializzare il repository

La prima operazione da effettuare è quella di creare un repository, cioè lo spazio dove verranno memorizzati gli archivi, Un archivio è il risultato di una singola operazione di backup.

borg init --encryption=repokey

Il comando inizializa lo spazio del repository, creando alcuni file e directory di servizio. La chiave di cifratura viene salvata nel file $BORG_REPO/config, cioè viene salvata nello stesso repository, per via dell'opzione repokey. Se il repository è remoto si potrebbe preferire memorizzare la chiave in un file locale, senza che sia presente nel repository remoto; in questo caso l'opzione keyfile. Vedere man borg-init.

La passphrase serve in ogni caso a sbloccare la chiave di cifratura.

Eseguire il backup

In questo esempio si esegue il backup di due directory (viene creato un archivio). Nel repository il nuovo archivio verrà identificato con un nome del tipo docs-and-mail-2021-08-05T17:00:48. Per una spiegazione delle varie opzioni vedere man borg-create.

borg create                  \
    --exclude-caches         \
    --verbose                \
    --filter AME             \
    --list                   \
    --stats                  \
    --show-rc                \
    --compression lz4        \
    ::'docs-and_mail-{now}'  \
    /home/share/documenti    \
    /home/niccolo/Maildir

Al termine dell'operazione vengono memorizzati alcuni file nella $HOME dell'utente che ha eseguito il backup:

$HOME/.config/borg/ 28 kb
$HOME/.cache/borg/ 11 Mb

FIXME A che servono questi file? Quanto spazio potranno occupare? Sono necessari per un restore bare-metal?

Se una operazione di backup viene interrotta prima che sia completata, lo spazio utilizzato non viene liberato. Forse viene riutilizzato alla successiva esecuzione? A seguito di un backup interrotto nel repository non risulta alcun archivio nuovo.

Elencare i backup eseguiti

Per vedere quanti backup sono contenuti in un determinato repository (cioè gli archivi), si esegue il comando:

borg list
docs-and-mail-2021-08-05T17:00:48  Thu, 2021-08-05 17:00:49 [b6d25f...
docs-and-mail-2021-08-06T09:19:03  Fri, 2021-08-06 09:19:03 [f408a7...

NOTA: Il repository e la passphrare si intendono istanziati nelle rispettive variabili d'ambiente.

Ispezionare il contenuto di un backup

Per elencare tutti i file contenuti in un archivio si utilizza il comando:

borg list ::docs-and-mail-2021-08-06T09:19:03

Vengono mostrati tutti i file esistenti al momento della creazione dell'archivio, anche quelli archiviati nei precedenti backup e che, grazie alla deduplicazione, non hanno occupato ulteriore spazio.

Recuperare file da un backup

Recuperare l'intero archivio

Estrae tutto l'archvio nella directory corrente:

borg extract --numeric-owner "/path/to/repo::backup_name-2023-02-06T04:47:01"

Recuperare una directory

L'estrazione avviene nella directory corrente, nel backup le directory sono memorizzate senza lo slash iniziale:

export BORG_PASSPHRASE='c13680266f0e8d62f4112978d958c9e9'
export BORG_REPO='ssh://username@example.com:2022/~/backup/main'
 
mkdir /tmp/restore
cd /tmp/restore
borg extract ::'backup-name-2022-02-14T19:02:21' 'var/www/html/'

Simulazione restore

borg extract --dry-run --list ::'backup-name-2022-02-14T19:02:21' 'home/niccolo/Maildir/cur'

Web References