# BorgBackup
## Utilizzo [Sito ufficiale](https://www.borgbackup.org/) - [Repo (Github)](https://github.com/borgbackup/borg) - [Demo (Video)](https://asciinema.org/a/133292) BorgBackup è un software per effettuare backup da terminale ([e non solo](https://github.com/borgbackup/community#graphical-front-ends)): - [Deduplicazione](https://en.wikipedia.org/wiki/Data_deduplication) dei file invece del classico *"copia/incolla"* - Possibilità di crittografia (AES 256-bit) e verifica dei dati (HMAC-SHA256) - Possibilità di offuscare i dati, in modo da rendere i backup più *"sicuri"* - Possibilità di comprimere i dati usando gli algoritmi più conosciuti (LZ4, zlib, LZMA, zstd) - Possibilità di personalizzare il numero di backup da mantenere (giornalieri, settimanali, mensili, annuali) - Ottimo supporto della [comnunità](https://github.com/borgbackup/community) ## Struttura file e cartelle ``` /home/ ├── borg/ │ ├── docker_backup/ │ ├── borg_backup.sh │ └── borg_backup.log │ └── docker/ ├── container #1 ├── container #2 ├── ... ``` * `docker_backup` - cartella dove vengono salvati i backup da borg * `borg_backup.sh` - bash script per effettuare i backup * `borg_backup.log` - file di log con le date dei backup **N.B. Tutti i file e le cartelle devono essere creati a mano.** ## Setup ### Installare BorgBackup Normalmente si trova già in molti [package manager](https://borgbackup.readthedocs.io/en/latest/installation.html#distribution-package) delle distro linux/unix più usate. ### Creare e inizializzare una nuova cartella per i backup 1. `mkdir /home/borg`
2. `borg init --encryption=none /home/borg/docker_backup` Notare l'assenza dell'uso del comando `sudo`. In caso di problemi con i permessi di scrittura/lettura usatelo. ### Bash script Lo script deve avere la flag **executable (eseguibile)**, nel caso lanciate il comando `chmod +x borg_backup.sh` tanto è indolore. `borg_backup.sh` ```bash #!/bin/bash # LO SCRIPT MANTIENE IL SEGUENTE NUMERO DI BACKUP: # GIORNALIERI = 7 aka 1 settimana # SETTIMANALI = 4 aka 1 mese # MENSILI = 6 aka 6 mesi # ANNUALI = 0 # ----------------------------------------------- DIRECTORIES='/home/docker' BACKUP='/home/borg/docker_backup' LOGFILE='/home/borg/borg_backup.log' NOW=$(date +"%Y-%m-%d | %H:%M | ") echo "$NOW - Avvio del Backup e della Pulizia" >> $LOGFILE # CREA NUOVI BACKUP NELLA CARTELLA IMPOSTATA borg create \ $BACKUP::'{now:%s}' \ $DIRECTORIES \ \ --compression zstd \ --one-file-system \ --exclude-caches \ --exclude-if-present '.nobackup' \ # CANCELLA I VECCHI BACKUP, SE NECESSARIO borg prune -v --list $BACKUP \ --keep-daily=7 \ --keep-weekly=4 \ --keep-monthly=6 \ --keep-yearly=0 \ echo "$NOW Done" >> $LOGFILE echo '------------------------------' >> $LOGFILE ``` ### Avvio manuale 1. lanciate il seguente comando `sh ./borg_backup.sh` 2. alla domanda: `Attempting to access a previously unknown unencrypted repository` 3. rispondete con `yes` ### Avvio automatizzato Il metodo migliore è usare [cron](https://en.wikipedia.org/wiki/Cron), che sicuramente è già pre-installato nella vostra distro linux. Create un cronjob che faccia partire lo script [alle 03:00 di notte](https://crontab.guru/#0_03_*_*_*): 1. lanciate il seguente comando `crontab -e` 2. poi scrivere quanto segue `0 3 * * * /home/borg/borg_backup.sh` Comandi utili: * `systemctl status cron` - controlla se il servizio è attivo e/o installato * `crontab -l` - lista degli attuali cronjob * `journalctl -u cron` - cronologia di cron ## Controllare la cartella dei backup 1. entrare nella cartella dei backup `cd /home/borg/docker_backup/` 2. scrivere `borg list .` per ottenere la lista dei backup effettuati 3. scegliere il backup che vi interessa usando una [data epoch](https://en.wikipedia.org/wiki/Unix_time), esempio 1588986941 4. montare il backup su una cartella temporanea `borg mount .::1588986941 /mnt/temp` 5. controllare il contenuto della cartella e fate quello necessario 6. smontare la cartella temporanea del backup `borg umount /mnt/temp` **N.B. Di tanto in tanto, controllare i backup effettuati per evitare brutte sorprese!!!**