====== 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]]**