venerdì 12 ottobre 2007

Backup su server FTP

Segnalo un utile strumento che serve a mantenere sincronizzati una directory locale e una remota su un server ftp.
Si tratta di FTPSync.pl che, come si intuisce dal nome, è uno script in Perl.

Traduco parte di quanto scritto nel file README,:

"Ftpsync.pl mantiene sincronizzata una gerarchia di directory locali con una gerarchia di directory remote su un server ftp. E' stato inizialmente scritto per automatizzare operazioni di web publishing ma può risultare utile per numerose altre operazioni, come fare un mirror di siti pubblici non troppo grossi, replicare dati e molto altro.

Perchè usare ftpsync.pl invece di mirror, sitecopy ....?

E' vero, ci sono altri progetti simili, alcuni commenti su questi:

rispetto a mirror, ftpsync.pl è in grado di fare anche PUT, non solo GET (se mirror è in grado di fare anche PUT non prendetevela con me, io non ci sono riuscito). Rispetto a sitecopy, ftpsync.pl non ha alcun problema se il sito remoto dopo l'ultima sincronizzazione viene modificato da altri tool o processi. Ftpsync.pl, a meno di problemi di connettività o di bachi, fornisce sempre una sincronizzazione affidabile. Rispetto a tutti e due ftpsync.pl è estremamente leggero."

Io ero da tempo alla ricerca di uno strumento che mi permettesse di archiviare in maniera automatica una copia delle mie foto su un server ftp, e dal mio punto di vista non posso fare altro che confermare quanto scritto nel README. Prima di ftpsync.pl ho provato mirror, sitecopy e wput e ho sempre avuto grossi problemi. La sincronizzazione semplicemente non funzionava, o meglio era totalmente inaffidabile, a volte andava, altre no. Da quando ho scoperto ftpsync.pl e dopo averne verificato per un po' il funzionamento finalmente mi sento sicuro e posso mettere in cron il processo di sincronizzazione e dimenticarmene. Sul server remoto ho sempre una copia aggiornata del mio prezioso archivio fotografico ...... in realtà non è che sia davvero prezioso ma perdere anni di fotografie digitali, belle o brutte che siano, per un banale guasto all'hard disk credo che dispiacerebbe a tutti.

Ecco come usarlo: innanzitutto va scompattato il file ftpsync-1.2.33.tar.bz2, (tar jvxf ftpsync-1.2.33.tar.bz2). Dopo aver copiato il file ftpsync.pl dove si desidera sul sistema (io l'ho messo in /usr/local/bin: "sudo cp ./ftpsync-1.2.33/ftpsync.pl /usr/local/bin/" ) e essersi assicurati che sia eseguibile ("sudo chmod +x /usr/local/bin/ftpsync.pl") si può provare a lanciare ftpsync.pl -h per vedere quali opzioni sono disponibili.

L 'output è questo:

FTPSync.pl 1.2.33 (2006-10-27)

ftpsync [ options ] [ localdir remoteURL ]
ftpsync [ options ] [ remoteURL localdir ]
options = [-dfgpqv] [ cfg|ftpuser|ftppasswd|ftpserver|ftpdir=value ... ]
localdir local directory, defaults to ".".
ftpURL full FTP URL, scheme
ftp://[ftpuser[:ftppasswd]@]ftpserver/ftpdir
ftpdir is relative, so double / for absolute paths as well as /
-c | -C like -i, but then prompts whether to actually do work
-d | -D turns debug output (including verbose output) on
-f | -F flat operation, no subdir recursion
-g | -G forces sync direction to GET (remote to local)
-h | -H prints out this help text
-i | -I forces info mode, only telling what would be done
-n | -N no deletion of obsolete files or directories
-l | -L follow local symbolic links as if they were directories
-p | -P forces sync direction to PUT (local to remote)
-q | -Q turnes quiet operation on
-v | -V turnes verbose output on
cfg= read parameters and options from file defined by value.
ftpserver= defines the FTP server, defaults to "localhost".
ftpdir= defines the FTP directory, defaults to "." (/wo '"')
ftpuser= defines the FTP user, defaults to "ftp".
ftppasswd= defines the FTP password, defaults to "anonymous".


Later mentioned options and parameters overwrite those mentioned earlier.
Command line options and parameters overwrite those in the config file.
Don't use '"', although mentioned default values might motiviate you to.


Nella pratica io ho questa esigenza: ho una directory "/home/utente1/Pictures" sul mio pc e voglio sempre averne una copia su un server ftp remoto (ftp.example.com) nella cartella "Backup/Pictures"

Per fare questo posso usare questo comando (tutto sulla stessa riga):

/usr/local/bin/ftpsync.pl -p /home/utente1Pictures/ ftpuser=<ftpuser> ftppasswd=<ftppasswd> ftpdir=/ ftp://ftp.example.com/backup/Pictures

Il parametro -p serve a rendere il trasferimento monodirezionale, da locale al server ftp. In sostanza in caso di differenze fa sempre testo la mia copia locale. E' un po' rischioso, nel senso che se venisse cancellata per sbaglio una directory locale, alla successiva sincronizzazione la stessa directory verrebbe cancellata anche sul server remoto. Quindi bisogna prestare una certa attenzione. Se non avessi impostato questa opzione potrebbe succedere il contrario: se qualcuno facesse una modifica sui file presenti sul server ftp questa verrebbe riportata sul mio pc locale. Dal momento che ftp non è precisamente il protocollo più sicuro del mondo preferisco che sia la mia copia locale quella che comanda. Ma è comunque una questione di scelte personali e di cosa si ha bisogno di fare. E comunque, se possibile, una ulteriore copia su hard disk esterno, dvd o nastro è sempre bene averla.

11 commenti:

  1. Giusto per allungare un po' la lista dei prodotti usabili per ottenere lo stesso risultato, ci tengo a segnalarti lftp che, oltre ad essere un buonissimo client, consente anche di scriptare una sincornizzazione completa.

    Solo i miei due eurocent. :)

    RispondiElimina
  2. Un articolo davvero UTILISSIMO, grazie!

    Durante le mie ricerche ho trovato anche questo sofware: http://migas-sbackup.sourceforge.net/. Non l'ho provato, ma magari può interessarti per fare qualche prova.

    RispondiElimina
  3. Grazie a Paolo e Federico. Non appena ho un attimo li proverò tutti e due.

    RispondiElimina
  4. Davvero interessante ...
    Stavo cercando un programma di questo tipo.
    Però ti faccio una domanda:io vorrei fare al contrario, ho un server ftp remoto (ftp.example.com) nella cartella “Backup/Pictures”e voglio sempre averne una copia su una directory “/home/utente1/Pictures” sul mio pc avviando ftp sul mio pc, se è possibilie farlo o magari conosci il modo potresti contattarmi all'e-mail...
    grazie...

    RispondiElimina
  5. Usa wget, è fatto apposta per quello che chiedi tu.
    Usa l'opzione "-m" (mirror) e fai qualche prova, vedrai che è facile.

    RispondiElimina
  6. Scusami ho dimenticato di dire che dovrei fare un backup completo, rimuovendo cartelle in remoto dovrebbero essere rimosse anche in locale qundi wget non va bene ...
    qualche idea...
    grazie a presto

    RispondiElimina
  7. Ma certo, usa ftpsync.pl, quello di cui si parla qua sopra.
    Solamente usa l'opzione "-g" (GET) al posto di "-p" (PUT) e inverti nella linea di comando l'url remoto e la directory locale. E fammi sapere, ovviamente :-)

    RispondiElimina
  8. A me dà errore sia in upload che in download, dandomi in tutti e due i casi errore nel nome utente:

    bash: xxx@aruba.it: Nessun file o directory

    sapresti dirmi perchè?

    RispondiElimina
  9. Ovviamente no, con queste informazioni.

    RispondiElimina
  10. Ho appena provato questo script in perl ma non riesco a capire perchè invece di inviarmi solo le differenze mi reinvia tutta la cartella locale sul server. Non è che c'è qualche opzione per inviare solo le differenze (file aggiunti o modificati) ?

    RispondiElimina
  11. A me questo FTPSync.pl pare proprio una ciofeca

    RispondiElimina