## page was renamed from GiuseppeTerrasi/Prove12 #format wiki #language it <> <> = Introduzione = '''Duplicity''' esegue il backup producendo archivi compressi in formato `.tar` (tarball) e salvandoli su destinazioni locali o remote. Utilizza la sicurezza [[Sicurezza/GnuPg|GPG]] per cifrare o firmare gli archivi. Questa guida illustra esempi di utilizzo di '''Duplicity''' per effettuare salvataggi su un server [[Server/Ftp|FTP]] remoto. = Installazione e configurazione = 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://duplicity | duplicity]]. 0. Preparare il percorso per ricevere i file di backup. {{{#!wiki note Per la configurazione del proprio server FTP, consultare la [[Server/Ftp|relativa guida]] o 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 raggiungibile dal server web. Negli esempi, sul server FTP, è stata creata la cartella `backup`. 0. Si procederà a effettuare copie di backup di una cartella locale con 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 il seguente contenuto 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. Questo script eseguirà il backup della cartella `salvami` posizionata sulla Scrivania in volumi compressi e cifrati con la password specificata, caricando quindi i file di backup sullo spazio FTP all'interno della cartella backup utilizzando i nomi utente e la password specificati. 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 == == Ripristinare un file == Per ripristinare un file, è possibile farlo rapidamente e facilmente apportando piccole modifiche al seguente script, denominandolo con il nome `restore.sh`:{{{ #!/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 dello script modificato, 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 di 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 dovrebbe indicare sottocartella/quattro.txt. * Potrebbe essere utile verificare un file di backup precedente a 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 recupera 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/utente/Scrivania/backup.sh >>/var/log/duplicity/etc.log }}} Verrà eseguito un backup a mezzanotte e creato un log per 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 accade perché il file di base è presente solo nel 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 da applicare 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. = Risoluzione problemi = == Duplicity non sovrascrive un file esistente == Si riceverebbe il seguente errore tentando di sovrascrivere il file `uno.txt`:{{{ Restore destination directory ~/Scrivania/salvami/uno.txt already exists. Will not overwrite. }}} È necessario prima cancellare il file di origine, oppure salvare il file del backup su un percorso diverso (come nell'esempio), oppure cambiare il nome del 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