====== 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 =====
* **[[https://borgbackup.readthedocs.io/|Borg Documentation]]**
* **[[https://torsion.org/borgmatic/#documentation]]**