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.
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'
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.
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 |
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.
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.
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.
Estrae tutto l'archvio nella directory corrente:
borg extract --numeric-owner "/path/to/repo::backup_name-2023-02-06T04:47:01"
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/'
borg extract --dry-run --list ::'backup-name-2022-02-14T19:02:21' 'home/niccolo/Maildir/cur'