Backup via ftp con rsync e curlftpfs

Volete avere un backup sempre aggiornato del contenuto del vostro sito Internet, disponendo solo di un accesso FTP e consumando meno banda possibile? Avete uno storage remoto condiviso tra piu’ computer da mantenere sincronizzato?

Due strumenti per risolvere questo genere di problemi: curlftpfs e rsync. Il primo e’ un modolo FUSE per montare un indirizzo FTP come se fosse una normale directory del nostro spazio disco. Il secondo un programma che sincronizza file e directory in locale, via rsh e via ssh. Combinando la capacita’ di fare mirror tra risorse locali di rsync e quella di curlftpfs di montare un indirizzo FTP come risorsa locale, il gioco è presto fatto.

Entrambi sono presenti come pacchetti nei repository ufficiali di Ubuntu e altre Debian like, quindi per la loro installazione basta un sudo apt-get install curlftpfs rsync.

Ora la parte difficile. Monto il mio sito ftp:

curlftpfs -o "user:pwd" ftp.rainbowbreeze.it /mnt/rainbowbreeze.it

e poi ne faccio un mirror in locale, trasferendo soltanto i cambiamenti dall’ultimo mirror e cancellando file locali eventualmente non più esistenti in remoto:

rsync -azvv --delete /mnt/rainbowbreeze.it/ /opt/backup/rainbowbreeze.it/

Beh, da qui in poi e’ solo una questione di fantasia, e un sistemista GNU/Linux ne davvero tanta per definizione, dato che con tutte le potenzialità di questo sistema operativo, non puo’ che tenerla costantementei in allenamento Cool

Iniziamo col montare la nostra risorsa FTP all’avvio, aggiungendo alla fine del file /etc/fstab la seguente riga:


curlftpfs#user:pwd@ftp.rainbowbreeze.it /mnt/rainbowbreeze.it fuse rw,uid=500,user,noauto,allow_other 0 0 

se non si vuole mettere in chiaro username e password, si puo’ sempre creare il file /root/.netrc, con a sintassi spiegata nelle FAQ sul sito di curlftpfs e mettere li dentro le credenziali di accesso.

A questo punto, basta anche un cronjob per eseguire, grazie ad rsync, il mirror costante del sito in locale.

Se poi volete gestire uno storage remoto tenendolo sincronizzato tra più pc, allora basta fare un primo mirror dallo storage verso il vostro pc, e poi dal pc verso lo storage ogni volta che modificate la copia dei contenuti sul vostro pc.

Non avete un sito ftp da usare come storage remoto?  Diciamo che non ci credo, poi comunque gmailfs che esiste a fare?

12 Comments

  1. Ciao! Bel post, mi è stato molto utile! Però mi sa che l’istruzione per montare curlftpfs è
    curlftpfs -o user=”nome:password” http://ftp.sito.com mountpoint/
    Almeno a me funziona solo così :)

    Francesco

  2. ovviamente è
    curlftps -o user=”user : password” …
    (senza spazi), il software del sito mi ha trasformato i due punti + p (: p) in :p

    F

  3. senti ma sei sicuro di
    rsync -azvv –delete /mnt/rainbowbreeze.it/ /opt/backup/rainbowbreeze.it/
    perchè sulla mia ubuntu ha cominciato a CANCELLARE il contenuto del secondo pathname (cazzo)
    fortuna che prima del backup mi son fatto un backup

  4. sicurissimo… l’opzione –delete serve appunto per questo, per cancellare tutto quello che c’e’ di diverso nel secondo pathname rispetto a quello che c’e’ nel primo, in modo da avere un mirror preciso…

  5. Ho provato questa procedura, ma quando apro la cartella mi da un errore di ftp non trovato:

    curlftpfs#utente:password@ftp.dominio.com /media/nome-cartella fuse rw,uid=500,user,noauto,allow_other 0 0

    Nel mio caso:

    curlftpfs#nome:password@ftp://192.168.1.2 /media/ftp fuse rw,uid=500,user,noauto,allow_other 0 0

    o provato anche con:

    curlftpfs#nome:password@ftp://192.168.1.2 /media/ftp fuse rw,uid=1000,gid=1000,user,noauto,allow_other 0 0

    grazie

  6. potrebbe essere che versione dopo versione il programma abbia cambiato la sua sintassi…

    io comunque, quando lo usavo, garantisco che con la sintassi che ho scritto nel mio post tutto andava!

  7. spero tu legga ancora i commenti a questo post che sono un pò datati.
    Sono incappato in un piccolo problema: se i dati da copiare risiedono su una macchina occasionalmente spenta o che non viene vista per problemi di rete, rsync non si ferma (ovviamente): la cartella locale di collegamnto è vuota ed il risultato è la cancellazione di tutto il backup che non è seguita dalla nuova copia.
    Come se ne esce?

  8. Con un bel controllo sull’esistenza di un file di flag prima di lanciare rsync ;)
    il file risiede su server, quindi se esiste significa che il server e’ connesso, altrimenti esci dallo script, ritenti piu’ tardi, fai altro…

  9. grazie infinite, soprattutto per la celerità.
    mi pare però di non trovare quest’opzione tra quelle di rsync ed evidentemente mi perdo qualcosa. Potresti specificare meglio la procedura?
    Grazie ancora

  10. Sembra che al giorno d’oggi non sia possibile indicare a rsync il proprietario a cui assegnare i nuovi file creati nella destinazione. Riesco a fare in modo che ai file esistenti non venga cambiato utente e gruppo grazie ad –no-user e –no-group, però per il resto questa che tu hai indicato mi sembra la soluzione migliore.

Leave a Reply