RESTIC il backup funzionale e cross platform

INTRODUZIONE

 Restic è un’applicazione per la gestione di backup sia in locale che in cloud, che supporta la crittografazione (AES-256) e la deduplicazione dei dati, riducendo dunque in modo significativo lo spazio necessario per conservare i file bekappati.

Restic è già ad oggi compatibile con la maggior parte dei servizi cloud quali : “OpenStack Swift, bucket Amazon S3, Backblaze B2, Microsoft Azure Blob Storage, Google Cloud”, e sono presenti anche immagini Docker.

Restic è sviluppato in linguaggio GO, cosa che lo rende molto leggero ed efficiente, risolvendo anche molti problemi di gestione di dipendenze.

– INSTALLAZIONE

Esistono molti pacchetti di installazione per la maggior parte dei sistemi operativi, coprendo un range che va da Arch Linux a MacOS, fino ai sistemi *BSD/*NIX……

Per i sistemi più “standard” l’installazione è banale:

– Debian

apt-get install restic

– Fedora

dnf install restic

– MacOS

brew install restic

….. per tutti gli altri sistemi si possono trovare tutte le specifiche sul sito ufficiale di Restic (https://restic.readthedocs.io/en/latest/020_installation.html#stable-releases)

Una volta installato il pacchetto i comandi per l’utilizzo di Restic sono davvero semplici ed immediati.

Prima di tutto va inizializzato lo spazio che si decide di stanziare, dedicare, al backup, ricordandosi che Restic chiama la destinazione per i backup “repository” ( –repo oppure -r ).

Quindi per inizializzare la Directory prescelta per la gestione dei backup possiamo agire in 3 modi diversi:

  • spostarci all’interno della DIR prescelta e dare il comando # restic init
  • indicare il PATH dei backup # restic init –repo /mnt/data/<nome_utente>/backup/
  • indicare un percorso di rete # restic -r sftp:<utente>@<indirizzo_IP>:/mnt/data/<nome_utente>/backup init

– COMANDI PRINCIPALI

  • init
  • backup
  • ls
  • restore
  • snapshots
  • tag
  • copy
  • stats

…….. e molti altri ancora che potete trovare sulla documentazione ufficiale, al sito restic-official-docu

Per poter automatizzare gli accessi ad aree esterne come, altri server, servizi cloud o altro, possiamo usare due metodi diversi;

1) creiamo un file .restic.env nel quale possiamo inserire i dati di accesso (es. ad AWS S3) , aggiungendo la password creata durante la fase di inizializzazione [“init“]

oppure

2) creiamo un file .rest_pass in cui inseriamo soltanto la password 

– ESEMPI

Es. file di tipo ENV ( .restic.env )

#!/bin/bash

export RESTIC_REPOSITORY=” s3:https://s3.amazonaws.com/restic-backup-test

export AWS_SECRET_ACCESS_KEY=”IVZ6GSBXEaZ1DeXzhN1gr4eCWcxD7hhMOt1RWMdn”

export RESTIC_PASSWORD=”<PASSWD>”

Prima di lanciare i comandi per restic, in ambiente Cloud, eseguo il comando:

source .restic.env

per caricare le variabili d’ambiente indicate nel file .restic.env

Es. file di tipo PASSWD ( .rest_pass )

< password >

….quando si decide di usare il file .rest_pass basta indicarlo alla fine della stringa di comando, come ad esempio:

restic -r sftp:<utente>@<indirizzo_IP>:/home/<utente>/backup/database snapshots -p .rest_pass

– Esempi Pratici

INIZIALIZZO UNA DIRECTORY LOCALE

.\restic.exe init –repo C:\Users\User\Desktop\restic-repo

enter password for new repository:

enter password again:

created restic repository 80ee4591fd at C:\Users\User\Desktop\restic-repo

Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.

Esegui il BACKUP

.\restic.exe backup -r C:\Users\User\Desktop\restic-repo E:\TEST1.txt
enter password for repository:
repository 80ee4591 opened successfully, password is correct
created new cache in C:\Users\User\AppData\Local\restic

Files: 1 new, 0 changed, 0 unmodified
Dirs: 1 new, 0 changed, 0 unmodified
Added to the repo: 467 B

processed 1 files, 0 B in 0:00
snapshot 0161a85c saved

Vedere la lista degli snapshot effettuati

.\restic.exe snapshots -r C:\Users\User\Desktop\restic-repo
enter password for repository:
repository 80ee4591 opened successfully, password is correct

ID Time Host Tags Paths

0161a85c 2021-08-05 13:08:45 Windows10 E:\TEST1.txt

1 snapshots

Vedere la lista dei files di una snapshot:

.\restic.exe ls -l -r C:\Users\User\Desktop\restic-repo 0161a85c
enter password for repository:
repository 80ee4591 opened successfully, password is correct
snapshot 0161a85c of [E:\TEST1.txt] filtered by [] at 2021-08-05 13:08:45.8317433 +0200 CEST):
drwxrwxrwx 0 0 0 1979-12-31 23:00:00 /E
-rw-rw-rw- 0 0 0 2021-08-05 13:07:20 /E/TEST1.txt

Esegui il Restore

Per effettuare un test reale, ho cancellato il file E:\TEST1.txt

.\restic.exe restore 0161a85c -r C:\Users\User\Desktop\restic-repo –target E:\restore
enter password for repository:
repository 80ee4591 opened successfully, password is correct
restoring to E:\restore

….così facendo ho recuperato la copia di backup facendone il restore sul disco E:\restore

$ ls -l E:\restore

Directory: E:\restore

Mode LastWrite Time Length Name
—- ————- —— —-
d—– 31/12/1979 23:00 0 TEST1.txt

Elimina gli snapshot

.\restic.exe forget –prune 0161a85c -r C:\Users\User\Desktop\restic-repo
enter password for repository:
repository 80ee4591 opened successfully, password is correct
[0:00] 100.00% 1 / 1 files deleted
1 snapshots have been removed, running prune
loading indexes…
loading all snapshots…
finding data that is still in use for 0 snapshots
[0:00] 0 snapshots
searching used packs…
collecting packs for deletion and repacking
[0:00] 100.00% 1 / 1 packs processed

to repack: 0 blobs / 0 B
this removes 0 blobs / 0 B
to delete: 2 blobs / 531 B
total prune: 2 blobs / 531 B
remaining: 0 blobs / 0 B
unused size after prune: 0 B ( of remaining size)

rebuilding index
[0:00] 0 packs processed
deleting obsolete index files
[0:00] 100.00% 1 / 1 files deleted
removing 1 old packs
[0:00] 100.00% 1 / 1 files deleted
done

N.B.: bisogna ricordarsi che, nel caso stessimo agendo sull’eliminazione di un backup/snapshot in ambiente cloud, tipo Amazon Bucket S3, prima del comando di forget –prune bisognerà dare un “restic unlock <ID dello snapshot>

Auto Pulizia

.\restic.exe forget –prune –keep-daily 7 –keep-monthly 12 –keep-yearly 3 -r C:\Users\User\Desktop\restic-repo
enter password for repository:
repository 80ee4591 opened successfully, password is correct
Applying Policy: keep 7 daily, 12 monthly, 3 yearly snapshots

Aggiorna la versione

Prima di tutto verifichiamo quale versione abbiamo al momento:

.\restic.exe version
restic 0.12.0 compiled with go1.15.8 on windows/amd64

oppure

$ restic version
restic 0.12.0 compiled with go1.15.8 on linux/amd64

Sulla macchina ArchLinux la versione è già l’ultima disponibile al momento (5 Agosto 2021) quindi non eseguiremo l’aggiornamento ma, ricordate che in caso di macchine nascoste da un Firewall a cui è vietato fare download di pacchetti si può comunque scaricare su di un’altra macchina l’ultima versione del software dal repository ufficiale su github , scompattarlo e sostituire il nuovo “restic” direttamente in /usr/bin

RESTIC Last Version Binaries Page

Es. :

bunzip2 restic_0.12.0_linux_amd64.bz2

mv restic_0.12.0_linux_amd64.bz2 restic

chmod +x restic

mv restic /usr/bin/

restic self-update

L’invito è quello di leggere la documentazione ufficiale poichè è davvero ricca di esempi, spiegazioni e modi di utilizzare questo fantastico strumento, ultra flessibile e davvero performante.

Rsync e la sincronizzazione dei contenuti Web

rsync aggiornamento web

Rsync aggiornamento Web

Supponiamo che ci tocchi gestire in produzione un numero X di frontend Web dietro un bilanciatore e che quindi, ad ogni nuova release, si renda necessario caricare i contenuti su ciascuno di essi (rendendo la vita difficile agli sviluppatori).

Certo il mercato e’ ricco di software di Configuration Manager, ma in questo caso ho deciso di usare come esempio l’automazione mediante l’uso di rsync, del resto non serve una Ferrari per fare la spesa. In pratica, i contenuti Web verranno caricati manualmente su un’unico frontend (che servirà da server) mentre le altre macchine fungeranno da client (ovvero aggiorneranno i loro contenuti ogni X minuti consultando direttamente la macchina server).

Configurazione della macchina server

Tale attività si articola in due fasi: la prima consiste nell’installazione e nella corretta configurazione del demone xinetd (evoluzione del celebre inetd), mentre la seconda riguarda solo ed esclusivamente rsync.

Procediamo dunque con l’installazione di xinetd:

[root@server ~]# yum install xinetd

ed impostiamo l’avvio automatico del demone in questione per i diversi runlevel:

[root@server ~]# chkconfig --levels 2345 xinetd on

Posizioniamoci nella dir /etc/xinetd.d ed apriamo in scrittura il file rsync, sostituendo la direttiva:

disable = yes

con

disable = no

In definitiva, il suddetto file, dovrà avere il seguente contenuto:

service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

Passiamo ora al secondo step relativo alla configurazione della macchina server, ovvero la creazione del file rsyncd.conf nella directory /etc:

[root@server ~]# touch /etc/rsyncd.conf

All’interno del suddetto file creeremo dei moduli ad-hoc contenenti tutte le direttive necessarie per la sincronizzazione dei contenuti tra server e client, ad esempio:

log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[images]
   path = /var/www/html/images
   uid = root
   gid = root
   read only = no
   list = yes
   host allow = 10.11.12.0/24

Salviamo il file ed avviamo xinetd:

[root@server ~]# service xinetd start

Configurazione delle macchine client

Tale configurazione consiste esclusivamente nella creazione di una entry crontab del tipo:

*/1 * * * *  root rsync -agruv root@10.11.12.1::images /var/www/html/images/

ovvero ogni minuto viene contattato il server (10.11.12.1, modulo images che punta a/var/www/html/images/) e viene sincronizzato il contenuto della Dir del client /var/www/html/images/.

Bene, l’aggiornamento e’ servito!

#RsyncSincronizzazione#AmbientiWeb

Rsnapshot Backup a riga di comando

Rsnapshot Backup a riga di comando

Rsnapshot Backup a riga di comando

#Rsnapshot Backup incrementali a riga di comando
rsnapshot e’ un utile software per effettuare backup incrementali, grazie all’utilizzo di rsync ed il tutto da riga di comando.

RSNAPSHOT
I software in commercio, in grado di effettuare backup incrementali del nostro sistema operativo oppure delle nostre directory preferite, sono molti e vari. Ad esempio per effettuare backup incrementali su Linux possiamo utilizzare Back In Time, Kup, Duplicati, TimeShift ecc. Per gli utemti che utilizzano Server Linux ma che preferiscono operare da terminale esiste rsnapshot, progetto open source che ci consente di effettuare backup incrementali grazie al tool rsync.

Attraverso rsnapshot possiamo effettuare backup incrementali di filesystem locali e remoti con numerose ed utili funzionalità.

Installare rsnapshot in Debian/Ubuntu e derivate è semplicissimo basta digitare da terminale:

sudo apt-get install rsnapshot

una volta installato dovremo operare sul file di configurazione in /etc/rsnapshot.conf
Configurazione

Per configurare rsnapshot è necessario aprire il file /etc/rsnapshot.conf con un editor di testo con i privilegi di amministrazione.

Ogni riga del file di configurazione dovrà contenere elementi separati dal carattere Tab e non dovrà contenere spazi. Non è quindi consigliabile fare il copia ed incolla delle seguenti istruzioni:

La seguente direttiva specifica la cartella di destinazione dei backup:

rsnapshot_root   /media/backup/
no_create_root 1

Si supponga di effettuare il backup tutti i giorni e di voler conservare le seguenti copie:

backup giornaliero dei 7 giorni precedenti;
backup settimanale delle 4 settimane precedenti;
backup mensile dei 6 mesi precedenti.

Le direttive di configurazione specifiche per una tale pianificazione sono le seguenti:

interval daily 7
interval weekly 4
interval monthly 6

Ora occorre definire le cartelle in cui fare i backup. Supponendo di voler conservare i file contenuti nelle cartelle /home /etc e /usr/local, nella cartella backup, aggiungere le seguenti istruzioni:

### BACKUP POINTS / SCRIPTS ###
backup /home/ snapshot/
backup /etc/  snapshot/
backup /usr/local/ snapshot/

Se invece si intende fare il backup di porzioni di file system di un sistema remoto, è possibile utilizzare il protocollo ssh, come nel seguente esempio:

backup root@example.com:/home/ snapshot/example.com/

Inoltre è possibile aggiungere direttive per l’inclusione e l’esclusione di file mediante il pattern matching così come specificato nella pagina di manuale di rsync. Suppondendo di voler escludere tutti i file .mp3 dal backup è sufficiente aggiungere la seguente direttiva:
exclude *.mp3
Infine, è possibile testare il file di configurazione digitando il seguente comando in una finestra del terminale:

sudo rsnapshot configtest
# Syntax OK

Automatizzare il backup
È possibile effettuare il backup di vari servizi mediante degli script controllati da rsnapshot.

Supponendo di voler effetttuare il backup di un database MySql, si realizzi uno script, da inserire in un nuovo file (es. /root/scripts/backupmysql.sh), simile al seguente:

mysqldump nomedatabase --user=root --password=passworddiroot > dump.sql

Dopo aver impostato il nome del database in «nomedatabse» e dopo aver impostato le opzioni «user» e «password» con il nome utente desiderato e la relativa password, è possibile richiamare lo script a partire dal file di configurazione sopra citato con un’istruzione simile alla seguente:

backup_script /root/scripts/backupmysql.sh snapshot/mysql/

rsnapshot lancerà lo script e sposterà nella cartella snapshot/mysql/ tutti i file di output prodotti nella cartella corrente.

Avvio del programma

rsnapshot deve essere avviato specificando il tipo di backup che si intende utilizzare. Questo corrisponde ad una delle direttive «interval» sopra descritte.

Per avviare il tipo di backup desiderato digitare il relativo comando in una finestra di terminale:

  • backup giornaliero:

    sudo rsnapshot daily
  • backup settimanale:
    sudo rsnapshot weekly
  • backup mensile:
    sudo rsnapshot monthly

     

*Aggiungendo l’opzione -t al comando è possibile verificarne il corretto funzionamento. Quello che segue è un esempio:

test :

# sudo rsnapshot -t hourly
echo 24319 > /var/run/rsnapshot.pid 
mkdir -m 0755 -p /media/backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
 /home/user/Immagini /media/backup/hourly.0/snapshot/ 
touch /media/backup/hourly.0/

Per maggiori informazioni su rsnapshot consiglio di consultare il Wiki ufficiale di Ubuntu.

Montare una cartella FTP

CurlFTPfs

CurlFTPfs

FTP in tasca

Sempre piu’ spesso la mole di dati che ci troviamo a dover gestire ci impone di creare ed utilizzare i piu’ svariati servizi di Cloud Storage presenti sul mercato, molti di questi offrono comode partizioni gestibili via FTP su cui spostare/upgradare tutti i nostri piu’ preziosi ricordi.

Come fare pero’ ad organizzare un sistema di backup e ripristino di questi dati, possibilmente rendendo l’operazione facile come scorrere il nostro file system locale ? . La soluzione potrebbe risiedere in un software, che permette di montare un server FTP come se fosse una normale directory del proprio filesystem.

Per fare questo è necssario installare curlftpfs dal proprio repository. In Ubuntu bastera’ basta digitare:

sudo apt-get install curlftpfs

Una volta installato possiamo montare la nostra cartella ftp con il seguente comando:

sudo curlftpfs -o user=utente:password mio_server punto_di_mount

Se per esempio il server fosse ftp.<mio_server>.it , con nome utente pippo e, con password pluto, il comando sarà:

sudo curlftpfs -o user=pippo:pluto ftp.<mio_server>.it /media/scambio # il mio punto di mount

Da questo momento in poi la mia cartella /media/scambio conterrà i files presenti sul server FTP e potranno essere copiati, spostati ed eliminati come se fossero presenti sul proprio filesystem. In questo modo, se si dovesse avere anche un minimo di conoscenza di programmazione della shell, si potra’ creare uno script per il backup dell’intero disco/repository/sito (insomma di quello che volete) con pochissimi comandi, automatizzando il tutto.

Check Disk

Salvaguardare lo stato di salute del disco :

Gli Hard Disk sono una delle parti più delicate degli odierni pc, ed infatti sono tra le periferiche che più facilmente sono soggette a rompersi.

Fortunantamente ci sono degli strumenti studiati per diagnosticare i malfunzionamenti prima ancora che possano creare danno. Ma ricordate che un backup periodico dei dati importanti è sempre la scelta migliore.

In questo articolo vedremo come usare alcuni strumenti come smartmontools e badblocks per monitorare lo stato di salute di un hard disk.

* Controllare lo stato di salute di un HD: smartmontools

Gli smartmontools permettono di usare la funzionalità SMART di tutti i moderni HD grazie alla quale è possibile prevedere con 24 ore di anticipo la rottura di un HD.

In debian basta installare il pacchetto smartmontools:

# apt-get install smartmontools

* Analizzare lo stato dell’HD: 

Possiamo usare l’utility smartctl per analizzare lo stato dell’HD.

Innanzi tutto vediamo alcune informazioni generiche sul nostro HD:

 sudo smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdd -d scsi # /dev/sdd, SCSI device
 sudo smartctl -a /dev/sda  # questo ci permettera' di vedere ogni info sul disco in questione

=== START OF INFORMATION SECTION ===
Model Family: Western Digital Scorpio Blue Serial ATA
Device Model: WDC WD5000BEVT-22ZAT0
Serial Number: WD-WXNY08ND3649
LU WWN Device Id: 5 0014ee 257a423e8
Firmware Version: 01.01A01
User Capacity: 500.107.862.016 bytes [500 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: 5400 rpm
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS (minor revision not indicated)
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Mon Jun 30 10:54:33 2014 CEST

SMART support is: Available - device has SMART capability.
SMART support is: Enabled

oltre alle informazioni generiche, dalle ultime due righe si capisce che l’HD supporta la tecnologia SMART e che il supporto è attivato. Se non fosse attivato basterebbe questo comando:

sudo smartctl -s on /dev/sda

per attivare il supporto SMART.

E’ anche possibile effettuare dei test più o meno approfonditi sul disco. Alcuni test si possono effettuare con l’HD montato e funzionate, ed il test stesso avrà un impatto minimo o nullo sulle prestazioni del sistema.

Per effettuare un test:

sudo smartctl -t <tipo_test> /dev/sda

dove tipo_test può essere:

short
effettua un test sul disco di durata inferiore a 10 minuti, può essere eseguito durante il normale funzionamento e non impatta le prestazioni. Questo test controlla le performace meccaniche ed elettriche del disco, oltre che le performance in lettura.

long
effettua un test di durata da 40 minuti ad un ora (a seconda del disco). Può essere effettuato durante il normale funzionamento del disco e non ha impatto sulle prestazioni. Questo test è una versione più estesa dello short test.

conveyance
effettua un test di alcuni minuti atto a scoprire difetti dovuti ad incurie nel trasporto dell’HD. Può essere eseguito durante il normale funzionamento dell’HD.

Esistono anche altri tipi di test per i quali si rimanda alla simpatica pagina di manuale: man smartctl.

I risultati di questi test vengono riportati nella parte finale dell’output di smartctl -a /dev/sda, come notato in precedenza.

Controllo automatizzato :

E’ possibile attivare il demone smartd fornito dal pacchetto smartmontools per monitorare in continuazione lo stato di salute dell’HD e notificare ogni anomalia immediatamente tramite syslog.

Normalmente il demone è disabilitato. Per abilitarlo bisogna editare il file /etc/default/smartmontools e decommentare la riga:

start_smartd=yes

Dobbiamo inoltre configurare smartd per deciderne il suo comportamento. A tal scopo editiamo il file /etc/smartd.conf. Leggendo i commenti nel file e l’amichevole pagina di manuale (man smartd.conf) è possibile scegliere quali parametri smartd debba monitorare, programmare dei test automatici, e decidere quali azioni intraprendere in caso di errore.

Nel mio caso ho inserito solo la seguente linea per il solo disco di sistema:

/dev/sda -a -o on -S on

che attiva il monitoraggio di tutti (-a) i parametri, abilitia l’ automatic online data collection (-o on), e abilita il salvataggio degli attributi (-S on) in modo che le informazioni di log di SMART vengano memorizzare nella FLASH del disco e siano disponibili anche dopo il riavvio.

Verifica di settori corrotti con BadBlocks : 

** Data lapotenza dell’utility che va a lavorare davvero a basso livello se ne consiglia l’uso solo nei casi in cui l’hard disk risulta gia’ compromesso e comunque soltanto dopo aver gia’ effettuato un backup (come precedentemente spiegato). L’utility badblocks permette di fare un controllo di basso livello per vedere se su una partizione sono presenti dei settori danneggiati.

I moderni HD  fanno un controllo automatico degli errori e sono in grado di segnare dei settori corrotti che di conseguenza non verranno più usati. Questo rende in parte inutile badblocks, ma se si effettua un controllo e dei settori risultano danneggiati vuol dire che probabilmente la superficie del disco contiene così tanti settori danneggiati che la circuiteria di controllo non è più in gradio di gestirli.

Per effettuare un controllo con badblocks e’ preferibile lavorare sui dischi usando una LiveCD da cui eseguiremo:

# badblocks -b dimensione_blocco /dev/sdaX

dove /dev/sdaX è la partizione da controllare. Il parametro dimensione_blocco è la dimensione del blocco usata dal filesytem espresso in byte. Di solito è 4096 (ovvero 4KB), per controllare potete usare:

# disktype /dev/sda

** Per le ulteriori opzioni di badblocks si rimanda all’amichevole pagina di manuale, ma attenzione: l’opzione -w distruggerà tutti i dati sulla vostra partizione.
Non usatela se non volete che ciò accada.

* Leggi anche ( “ estraiamo i nostri dati ” )