## page was renamed from GiuseppeTerrasi/Prove12 #format wiki #language it <> <> = Introduzione = '''Duplicity''' effettua il backup producendo archivi compressi in formato `.tar` salvandoli su destinazioni locali io remote. Utilizza [[Sicurezza/GnuPg|GPG]] per cifrare o firmare gli archivi. In questa guida verranno mostrati degli esempii di utilizzo di '''Duplicity''' compiendo dei salvataggi su un server FTP remoto. = Installazione e configurazione = 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://duplicity | duplicity]]. 0. Preparare il percorso per ricevere i file di backup. Per quanto concerne la configurazione del proprio server FTP si veda la [[Server/Ftp|relativa guida]] oppure si consulti la documentazione del proprio web hosting. 0. Una volta configurato l'account FTP creare la cartella di destinazione dei file di backup in una posizione non raggiungile dal server web. Negli esempi, sul server FTP, è stata creata la cartella `backup`. 0. Si tenterà di compiere delle copie di backup di una cartella locale avente la seguente struttura: {{{ mario@mario:~/Scrivania$ tree salvami/ salvami/ |-- due.txt |-- sottocartella | `-- quattro.txt |-- tre.txt `-- uno.txt }}} = Funzionalità di base = == Backup == 0. Per eseguire il backup copiare quanto segue in un [[Ufficio/EditorDiTesto|editor di testo]]: {{{ #!/bin/sh export PASSPHRASE=UnaPasswordMoltoLungaDifficilmenteCraccabile export FTP_PASSWORD=LaPasswordDelServerFTP duplicity /home/mario/Scrivania/salvami ftp://UtenteFTP@ftp.nomedominio.com/backup unset PASSPHRASE unset FTP_PASSWORD }}} e salvarlo denominandolo `backup.sh`. 0. Attribuire allo script appena creato i seguenti [[AmministrazioneSistema/PermessiFile|permessi]]: {{{ chmod 700 backup.sh }}} 0. Tale script eseguirà il backup della cartella `salvami` posizionata sulla `Scrivania` in volumi compressi e cifrati con la password specificata e quindi caricherà i file di backup sullo spazio FTP all'interno della cartella `backup` utilizzando i nomi utenti e la password specificate. 0. Dopo aver modificato adeguatamente l'esempio, lanciarlo digitando in un terminale il seguente comando: {{{ ./backup.sh }}} Al termine delle operazioni, lo script restituirà un output simile al seguente: {{{ --------------[ Backup Statistics ]-------------- StartTime 1292235612.44 (Mon Dec 13 11:20:12 2010) EndTime 1292235612.48 (Mon Dec 13 11:20:12 2010) ElapsedTime 0.04 (0.04 seconds) SourceFiles 6 SourceFileSize 8192 (8.00 KB) NewFiles 6 NewFileSize 8192 (8.00 KB) DeletedFiles 0 ChangedFiles 0 ChangedFileSize 0 (0 bytes) ChangedDeltaSize 0 (0 bytes) DeltaEntries 6 RawDeltaSize 0 (0 bytes) TotalDestinationSizeChange 300 (300 bytes) Errors 0 ------------------------------------------------- }}} dove si può leggere che in circa 4 secondi sono stati salvati 6 elementi della grandezza complessiva di 8Kb e non ci sono stati errori. 0. Sul server FTP si dovrebbe trovare un elenco di file simile al seguente: {{{ duplicity-full-signatures.2010-11-27T01:00:01-05:00.sigtar.gpg duplicity-full.2010-11-27T01:00:01-05:00.manifest.gpg duplicity-full.2010-11-27T01:00:01-05:00.vol1.difftar.gpg duplicity-full.2010-11-27T01:00:01-05:00.vol2.difftar.gpg }}} Per ulteriori dettagli si rimanda alla [[http://www.nongnu.org/duplicity/duplicity.1.html|pagina man]] di '''Duplicity'''. In questa sede si fa una breve menzione a: * Il file `sigtar.gpg` contiene la chiave di ogni file del quale viene eseguito il backup in modo che Duplicity riesca a capire quale parte di un file è stato modificato. Con queste informazioni si possono caricare solo le parti mancanti per completare un nuovo set di backup. * Il file `manifest.gpg` contiene un elenco di tutti i file nel set di backup e un hash SHA1 di ogni file, probabilmente così Duplicity può dire molto rapidamente se un file è stato cambiato o no dopo l'ultimo backup. * I file `vol?.difftar.gpg` contengono i dati di file effettivamente copiati. Sembra che i volumi Duplicity siamo al massimo di 5 MB. Questo è utile durante ripristina così l'intero set di backup non devono essere scaricati per recuperare un singolo file. Duplicity scaricherà solo il volume che contiene quel file. == Verifica == * Un archivio può essere verificato per controllare se il backup è stato eseguito completamente e quali file sono stati modificati dopo l'ultimo backup. Il codice sotto riportato è un esempio di come verificare le copie eseguite con lo script `backup.sh` (dare sempre permessi 700 come mostrato in precedenza): {{{ #!/bin/sh export PASSPHRASE=UnaPasswordMoltoLungaDifficilmenteCraccabile export FTP_PASSWORD=LaPasswordDelServerFTP duplicity verify ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/salvami unset PASSPHRASE unset FTP_PASSWORD }}} * Un possibile output: {{{ mario@mario:~/Scrivania$ ./verifica.sh NcFTP version is 3.2.4 Local and Remote metadata are synchronized, no sync needed. Last full backup date: Mon Dec 13 11:20:06 2010 Difference found: File sottocartella has mtime Mon Dec 13 11:39:46 2010, expected Mon Dec 13 11:13:30 2010 Difference found: New file sottocartella/cinque.txt Verify complete: 7 files compared, 2 differences found. }}} in questo caso volutamente sulla cartella locale è stato aggiunto un file. Le modifiche segnalate sono due in quanto viene tenuto conto della cartella in cui è contenuto il nuovo file. * Per aumentare il livello del dettaglio delle informazioni fornite modificare l'opzione `-v` passando da 4 (livello di default quando non è indicato come nel caso precedente) a 9 (il livello massimo, per esempio). Modificando in questo modo la riga indicata in precedenza: {{{ duplicity verify -v9 ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/salvami }}} == Elenco dei file archiviati == * A volte è utile controllare quali file sono nella copia di backup più recente. Questo può essere fatto con il seguente script: {{{ #!/bin/sh export PASSPHRASE=UnaPasswordMoltoLungaDifficilmenteCraccabile export FTP_PASSWORD=LaPasswordDelServerFTP duplicity list-current-files ftp://UtenteFTP@ftp.nomedominio.com/backup unset PASSPHRASE unset FTP_PASSWORD }}} * Un possibile output: {{{ mario@mario:~/Scrivania$ ./elenco.sh NcFTP version is 3.2.4 Local and Remote metadata are synchronized, no sync needed. Last full backup date: Mon Dec 13 11:20:06 2010 Mon Dec 13 11:13:24 2010 . Mon Dec 13 11:13:07 2010 due.txt Mon Dec 13 11:13:30 2010 sottocartella Mon Dec 13 11:13:27 2010 sottocartella/quattro.txt Mon Dec 13 11:13:14 2010 tre.txt Mon Dec 13 11:12:58 2010 uno.txt }}} == Ripristino == * Ad un certo punto, potrebbe essere necessario ripristinare un file. Questo compito può essere realizzato rapidamente e facilmente, facendo piccole delle modifiche allo script seguente: {{{ #!/bin/sh export PASSPHRASE=UnaPasswordMoltoLungaDifficilmenteCraccabile export FTP_PASSWORD=LaPasswordDelServerFTP duplicity --file-to-restore uno.txt ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/uno.txt unset PASSPHRASE unset FTP_PASSWORD }}} * Il comando precedente ripristina il file `uno.txt` dall'ultimo backup trovato sullo spazio FTP copiando il file nella propria cartella `Scrivania`. Alcune note sullo script `restore.sh` appena visto: * Il percorso del file da ripristinare è relativo alla cartella su cui si basa il set d backup. Inserire il percorso relativo partendo dalla radice `backup`. Quindi, in questo caso, trovandosi in `backup` il file `uno.txt` da recuperare, è stato sufficiente indicare `uno.txt`. Per recuperare il file `quattro.txt` si doveva mettere `sottocartella/quattro.txt`. * Duplicity non sovrascriverà un file esistente. Si sarebbe ricevuto il seguente errore tentando si sovrascrivere il file `uno.txt`: {{{ Restore destination directory ~/Scrivania/salvami/uno.txt already exists. Will not overwrite. }}} Bisogna prima cancellare il file di origine oppure salvare il file del backup su un percorso diverso (come è stato fatto nell'esempio) oppure cambiare il nome del file. * Potrebbe essere utile verificare un file di backup anteriore ad un certo periodo di tempo. il parametro `-t 3D` recupererà le copie di uno specifico file più vecchie di 3 giorni. Ecco lo script restore.sh modificato: {{{ #!/bin/sh export PASSPHRASE=UnaPasswordMoltoLungaDifficilmenteCraccabile export FTP_PASSWORD=LaPasswordDelServerFTP duplicity -t 3D --file-to-restore uno.txt ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/uno.txt unset PASSPHRASE unset FTP_PASSWORD }}} * Questo esempio invece recuperà il file `uno.txt` nelle versioni del backup di 4, 5 e 6 giorni fa: {{{ #!/bin/sh export PASSPHRASE=UnaPasswordMoltoLungaDifficilmenteCraccabile export FTP_PASSWORD=LaPasswordDelServerFTP duplicity -t4D --file-to-restore uno.txt ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/uno.txt duplicity -t5D --file-to-restore uno.txt ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/uno.txt duplicity -t6D --file-to-restore uno.txt ftp://UtenteFTP@ftp.nomedominio.com/backup /home/mario/Scrivania/uno.txt unset PASSPHRASE unset FTP_PASSWORD }}} Fare riferimento alla pagina di man per conoscere le altre modalità di ripristino dei file di backup. = Automatizzare Duplicity = Aggiungere il file `backup.sh` all'interno di [[AmministrazioneSistema/Cron|cron]]: {{{ 0 0 * * * /home/mario/Scrivania/backup.sh >>/var/log/duplicity/etc.log }}} Sarà eseguito un backup a mezzanotte e verrà creato un log per potere verificare che i backup siano stati compiuti con successo. = Funzionalità avanzate = Con l'aumentare del numero dei backup eseguiti il ripristino dei file potrebbe subire dei rallentamenti. Questo perché il file di base è presente solo sul primo backup completo e i backup incrementali conterranno solo le differenze rispetto al primo. In questo modo, sarà necessario scaricare il volume che contiene il file di base e anche tutti i file di backup incrementale che detengono le modifiche che devono essere applicate al file. Di conseguenza è necessaria una corretta gestione del backup per mantenerlo sotto controllo. Una soluzione potrebbe essere quella di compiere dei backup completi con cadenza mensile. == Cancellare i vecchi backup == Questo comando elimina i backup più vecchi di un anno: {{{ duplicity remove-older-than 1Y --force ftp://UtenteFTP@ftp.nomedominio.com/backup }}} Non è possibile fare un backup (completo o incrementale) e cancellare i vecchi file con lo stesso comando. == Cambiare modalità di backup == * 'full-if-older-than 1M': Questa opzione fa in modo che duplicity esegua un backup completo una volta al mese anche quando il backup del 1° giorno di un mese non riesce. Supponiamo si voglia eseguire il backup solo il primo giorno del mese. Il secondo script di seguito indicato mostra come è possibile farlo utilizzando l'opzione 'full-if-older-than 1M'. Questo verificherà che duplicity faccia il backup una sola volta al mese anche quando il backup del primo del mese fallisca. = Script di esempio = == Primo script di esempio == Questo script esegue solo il backup del file delle password GPG. Si noti i file non saranno crittografati. Questo perché i file GPG lo sono già. L'esempio è disponibile in [[http://wiki.ubuntu-it.org/AmministrazioneSistema/BackupDelSistema/Duplicity?action=AttachFile&do=view&target=gpg-backup.sh|allegato]]. Si vedano i commenti interni al file e lo si modifichi nel modo appropriato. == Secondo script di esempio == Fare una copia completa ogni mese (si veda anche sopra). L'esempio è disponibile in [[http://wiki.ubuntu-it.org/AmministrazioneSistema/BackupDelSistema/Duplicity?action=AttachFile&do=view&target=mt-complete-bk.sh|allegato]]. Si vedano i commenti interni al file. = Ulteriori risorse = * [[https://help.ubuntu.com/community/DuplicityBackupHowto/|Documento originale]] * [[http://www.nongnu.org/duplicity/index.html|Sito ufficiale del progetto]] * [[http://www.debian-administration.org/articles/209|Approfondimenti su debian-administration.org]] ---- CategoryAmministrazione