10 maggio 2017

Eseguire un backup con "Duplicati"


Ho sempre utilizzato per eseguire backup uno strumento minimale, chiamato rsync; è un programmino a riga di comando che permette di tenere sincronizzate due directory, la directory di origine e quella di destinazione. 
In tutto ciò vi è una grossa mancanza: il backup non possiede una lista di checksum (codici di controllo) per verificare la coerenza dei file nel tempo, in modo che qualora fossero stati corrotti per una rottura del disco (silent corruption), ce ne potremmo accorgere.
Quindi ho dovuto mettermi in cerca di un software di backup vero e proprio, efficiente e professionale, ma soprattutto NON commerciale, finalmente l'ho trovato.

Si chiama "Duplicati", ed è ispirato al noto software "Duplicity".

i punti di forza sono:

  • cross-platform
  • interfaccia grafica e a riga di comando
  • permette di eseguire il backup in simulazione
  • gratuito
  • usa un formato standard di archivio
  • possibilità di cifrare l'archivio

Per prima cosa iniziamo a scaricarlo dal sito web ufficiale:


installiamo la versione per il nostro sistema operativo.

nella seguente guida considererò la versione per Windows.


il software è utilizzabile sia da un'interfaccia grafica, sia da riga di comando.

Io considererò solo l'interfaccia a riga di comando in quanto più potente e versatile.

una volta installato il software, facciamo click destro su Computer, Proprietà, Impostazioni di sistema avanzate, Variabili d'ambiente...

nel secondo riquadro editiamo la riga devi valori relativa a "Path", ed aggiungiamo: ";C:\Program Files\Duplicati 2" escluse le virgolette.

a questo punto potremo eseguire "Duplicati.CommandLine.exe" da riga di comando aprendo il prompt dei comandi di windows.


il software permette di eseguire gli "snapshot", ossia una copia per ogni backup, ma io, non avendone bisogno, imporrò il numero di essi ad 1.

NOTA: per evitare il problema del cambio della drive letter tra i vari reinserimenti del dispositivo di archiviazione, tramite i parametri --alternate-destination-marker e -alternate-target-paths i quali permettono rispettivamente di ricercare un file il primo e ricercare una directory il secondo, in modo tale da ricercare il dispositivo di backup anche in caso di cambio di drive letter.
Sarà necessario creare un file fittizio denominato ad esempio "dest.txt" come specificato nel parametro --alternate-destination-marker. 

vediamo nel dettaglio i comandi che useremo:


------------------------------------------
------------------------------------------

crea o aggiorna un backup non criptato, mantenendo solo 1 copia:


Duplicati.CommandLine.exe backup --alternate-destination-marker=dest.txt --alternate-target-paths=* --dbpath=D:\database\db.sqlite --keep-versions=1 --no-encryption --console-log-level=Verbose D:\backup C:\Users\utente\Desktop\origine --no-encryption

NOTA: l'azione "backup" esegue implicitamente anche l'azione "compact" (descritta successivamente) con valore implicito di default, ossia --threshold=25. Per impedirglielo, basta utilizzare l'opzione --
no-auto-compact.

--dry-run per simulare
--exclude=<percorso> per escludere directory o file dal backup, le directory devono terminare con \

------------------------------------------
------------------------------------------

verifica integrità backup:

Duplicati.CommandLine.exe verify --alternate-destination-marker=dest.txt --alternate-target-paths=* --dbpath=C:\database\db.sqlite C:\Users\utente\Desktop\backup --full-remote-verification all --no-encryption

------------------------------------------
------------------------------------------

lista contenuto backup:

Duplicati.CommandLine.exe list --alternate-destination-marker=dest.txt --alternate-target-paths=* --dbpath=D:\database\db.sqlite C:\Users\utente\Desktop\backup * --no-encryption

--include=<percorso> al posto di "*" per listare directory o file del backup, le directory devono terminare con \ ed aggiungere * per listare il contenuto


------------------------------------------------------------------------------------

ripristina backup o parte di esso:

Duplicati.CommandLine.exe restore --alternate-destination-marker=dest.txt --alternate-target-paths=* --dbpath=D:\database\db.sqlite C:\Users\utente\Desktop\backup nomefile.txt --restore-path=C:\restored --no-encryption


------------------------------------------
------------------------------------------

lista delle versioni dei backup:

Duplicati.CommandLine.exe list --alternate-destination-marker=dest.txt --alternate-target-paths=* C:\Users\utente\Desktop\backup --dbpath=D:\database\db.sqlite --no-encryption


------------------------------------------
------------------------------------------

elimina fisicamente i dati eliminati:

Duplicati.CommandLine.exe compact --alternate-destination-marker=dest.txt --alternate-target-paths=* C:\Users\utente\Desktop\backup --verbose --dbpath=D:\database\db.sqlite --threshold=0 --no-encryption

------------------------------------------
------------------------------------------

ora facciamo alcune considerazioni sui comandi:


possiamo notare il file db.sqlite, esso è un file separato dal resto e contiene le informazioni sul backup; questo perché Duplicati è sostanzialmente progettato per eseguire backup remoti, quindi tale file è il database conservato in locale che rappresenta il database remoto.
Nel mio caso, il backup remoto non è contemplato in quanto non necessario quindi parte locale e parte remota saranno nello stesso disco, perciò salverò db.sqlite nell'hard disk di backup, in quanto se omessa quella direttiva, il file db.sqlite verrà salvato nella directory del programma, e, a seguito di una formattazione del computer, verrà perso (ma comunque potrà essere ricreato con una procedura). ecco spiegato il comando con db.sqlite

la directory remota, ossia D:\backup, conterrà 3 tipi di file, .dblock, .dindex, .dlist


.dblock contengono i dati veri e propri spezzettati in blocchi, non vengono mai ricreati, ma ad ogni backup ne vengono aggiunti ulteriori, uno snapshot legge in maniera sparsa 
i dati da qualsiasi dblock

.dindex sono giusto una rappresentazione dei .dblock per evitare lo scaricamento dei dblock quando viene creato il database locale


.dlist sono gli snapshot, quindi se avessimo --keep-version=1, avremo solo 1 file .dlist.

Vi consiglio di fare alcune prove per prendere dimestichezza.

Ci sono vari altri comandi, inclusi quelli per eseguire backup remoti, ma non rientrano del tipo di utilizzo di cui ho necessità, sono consultabili col seguente comando:

Duplicati.CommandLine.exe help