Inizio con il riportare la definizione di Rsync scritta su Appunti di informatica libera.
Rsync è un sistema di copia tra elaboratori (o anche all’interno del file system dello stesso sistema locale), in grado di individuare e trasferire il minimo indispensabile di dati, allo scopo di allineare la destinazione con l’origine. L’uso di questo programma è molto semplice ed è simile a quello di rcp (Remote shell copy) o anche di scp (Secure shell copy).
L’aggiornamento dei dati, in funzione delle opzioni utilizzate, può basarsi sul confronto delle date di modifica, delle dimensioni dei file e anche sul calcolo di un codice di controllo (checksum). In linea di principio, a meno di utilizzare opzioni che specificano qualcosa di diverso, non conta il fatto che i dati siano più recenti o meno, basta che questi siano diversi per ottenerne il trasferimento.
Alla luce di quanto scritto personalmente lo trovo un buon sistema per effettuare dei backup dove non ci sono problemi di spazio ( in quanto la copia viene fatta 1 a 1 con l’originale )
Supponendo di voler effettuare il backup della directory /home su /backup_giornaliero possiamo semplicemente scrivere :
rsync -a -v --delete /home /backup_giornaliero
questo il significato dei parametri …
- -a duplica anche le sottodirectoy in modo ricordsivo
- -v ci da il dettaglio dello svolgimento della copia
- –delete cancella i file sotto /backup_giornaliero che non esistono in /home
Ma come possiamo automatizzare questo comando ?
Io ho usato cron.
( per una guida in italiano vi suggerisco questo link )
Ho editando il file /etc/crontab e aggiunto questa riga:
0 23 * * * root rsync -a -v --delete /home /backup_giornaliero
In questo modo ogni giorno alla 23.00 viene fatto partire rsync
Dato che sono paranoico e che un backup non mi basta , una volta alla settimana ed una volta al mese preferisco farne un altro.
0 23 * * * root rsync -a -v --delete /home /backup_giornaliero
0 2 * * 0 root rsync -a -v --delete /home /backup_settimanale
0 5 1 * * root rsync -a -v --delete /home /backup_mensile
In questo modo tutte le sere faccio il backup su /backup_giornaliero
Ogni domenica alla 2 del mattino lo faccio su /backup_settimanale
Ed il giorno 1 di ogni mese alla 5 del mattino viene fatto su /backup_mensile
Ricordiamoci di creare le directory !!!
Mi rimane ancora una domanda … come faccio a sapere se il backup è stato eseguito ?
Mi faccio mandare una mail !!!
0 23 * * * root rsync -a -v --delete /home /backup_giornaliero | mail tuamail@dominio.it -s "Log Backup"
0 2 * * 0 root rsync -a -v --delete /home /backup_settimanale | mail tuamail@dominio.it -s "Log Backup"
0 5 1 * * root rsync -a -v --delete /home /backup_mensile | mail tuamail@dominio.it -s "Log Backup"
In questo modo grazie all’opzione -s ed all’utilizzo della pipe ci inviamo l’output di rsync nella nostra casella di posta.
Semplice e preciso. Ottimo articolo, complimenti.
Hai aggiunto uno zero di troppo all’inizio di tutte le linee in crontab. I comandi corretti sono del tipo:
0 23 * * * root rsync -a -v –delete /home /backup_giornaliero
I campi in crontab sono solo 5 (vedi http://it.wikipedia.org/wiki/Crontab)
@marco,
grazie!!!
non mi ero mai accorto del refuso… 😉
che programma hai installato per poter fare in modo che il comando mail funzioni? php, postfix? grazie, ottima guida!
http://packages.debian.org/stable/mail/mailx
per installarlo sotto debian… apt-get install mailx
😉
si sono sotto ubuntu (server 7.10) ma bisogna configurarlo in qualche maniera (cioè di fatto creare un server mail) o funziona già da solo(vedo che usa postfix)?
penso che un server smtp sia già installato di default.
il modo più veloce per saperlo è provare…
echo “prova” | mail tuamail@dominio.ext -s “prova invio”
se dovesse dare un qualche tipo di errore allora possiamo valutare se procedere con l’installazione di un MTA come postfix
apt-get install postfix
per riconfigurarlo: dpkg-reconfigure postfix
ho risolto:
1) apt-get install postfix
2) dpkg-reconfigure postfix
3) apt-get install mailx
e tutto funzia…
Grazie mille
> Ho editando il file /etc/crontab e aggiunto questa riga:
> 0 0 23 * * * root rsync -a -v –delete /home /backup_giornaliero
occhio che c’e’ ancora un campo in piu’, ad inizio riga 🙂
@ maaaatteo,
grazie corretto 😉
ciao, complimenti per il blog lo sto seguendo con interesse.
e’ possibile salvare il backup su un account ftp che voi sappiate?
@andrea,
ti lascio un link che dovrebbe rispondere alla tua domanda:
How to use ftp in a shell script.
In questo modo puoi far partire la copia ftp subito dopo aver terminato la sincronizzazione.
Ciao, innanzitutto complimenti per il blog… poi non ho capito bene a cosa serve l’opzione –delete? e anche se rsync mi permette di fare un backup direttamente in rete del tipo :
rsync -a -v –delete 192.168.1.10/Home /backup_giornaliero
Grazie e Ciao
una domanda: e se quando crontab ha stabilito il momento del backup il pc è spento? lo esegue al primo avvio successivo?
e metti che al primo riavvio abbia necessità di spegnere il pc quasi subito…che faccio, lascio rsync a metà ?
grazie per le risposte ai dubbi
@BUcky,
sì secondo me puoi mettere uno script in avvio del pc.
se poi lo spegni e lo lasci a meta al limite la volta successiva ricomincia da dove è rimasto….
innanzitutto coomplimentoni x il blog! Dopo questa sviolinata volevo chiederti una cosa. Mailx può inviare email anche fuori dalla propria lan? Se è così hai qualche link di guide in italiano?
Grazie
se nella tuo distro è installato un server smtp come postfix puoi mandare la mail dove vuoi.
questa è la sintassi:
#echo “testo del messaggio” | mail nome@mail.com -s “soggetto”
negli esempi sopra mi mandavo lo stdout di rsync come corpo della mail.
Non mi completa il backup cone errore
rsync: file too large (27) errors.
cosa può essere?
potrebbe essere che stai facendo il backup su un disco formattato fat32 che non supporta file più grossi di 2gb?
non mi viene in mente molto altro….
cerca di capire se usando un’altro disco di destinazione di presentano gli stessi problemi…
Si in ext3 funziona, in fat32 non va oltre i 4GB
QUal’è la sintassi di un computer A che vuole fare il backup della /etc locale, su un HD di server remoto /media/hdesterno?
Il tuo lavoro mi ha risparmiato un sacco di tempo e fatica.
Grazie!
Grazie…articolo ben fatto!Ho fatto in poco tempo quello che temevo mi prendesse molto molto + tempo.
Complimenti per l’articolo semplice ed efficace. Approfitto della tua sapienza. ma se volessi trasferire il backup in un altro server diverso da quello locale per essere sicuri?
io in passato avevo usato ssh per montare una directory remota e poi con rsync avevo fatto la sinccronizzazione…
se non di sono dati “riservati” oggi provereri anche a fare qualche esperimento con le api di dropbox
diciamo che molto dipende dal tipo di macchina locale e remota…
in remoto parliamo di SAN o di server?
la macchina locale cosè ? è sempre accesa ?
come sono collegate ? c’è un vpn ?
vabbè… ho già fatto troppe domande… 😀
anche a me questo post ha fatto risparmiare tempo e fatica, grazie infinite.
Mi troverei, però, di fronte ad una seccatura da mettere a posto: il backup è davvero corposo (quasi 200 GB) ed il report è troppo lungo, impedendomi di vedere se e dove ci sono cambiamenti.
Come posso filtrare, facendo in maniera che non appaiano nel report, tutte le righe “nomefile is uptodate”, al limite contandole?
Grazie ancora
puoi filtrarlo con grep aggiungendo l’opzione -v (invert mach)
es:
rsync -a -v –delete /home /backup | grep -v “is uptodate” | mail tuamail -s “Log”
in questo modo ti vengono mandate via mail solo le righe dove non è presente “is uptodate”.
fammi sapere se funziona…
è perfetto!!! grazie infinite!!!
come posso rigraziare?
@stef@no,
..bene sono contento 😉
per ringraziarmi puoi aggiungere questo sito ai tuoi preferiti e fami un po’ di pubblicità , oppure se proprio non riesci a farne a meno c’è l’opzione caffè
fatte entrambe le cose.
Grazie ancora a te!!! 🙂
non ricordavo bene la sintassi di crontab 🙂
anch’io sono un “maniaco” dei backup e la sicurezza dei dati non è mai troppa 😉
grazie
Pol
[…] backup file e database (WordPress Backup / WordPress database […]
utilizzo con molta soddisfazione rsync e crontab.
ho capito a mie spese (con delete) il significato dello slash della directory origine.
non ho capito la differenza dello slash nella direcytory di destinazione.
grazie
mario del pia
Una domanda…o forse due…
Una volta inserito il comando di backup nel file crontab quando viene il momento di effettuare il backup il boot rimane bloccato finché non finisce ? In tal caso, quanto dura tale processo ?
Perché invece di farci mandare una mail non reindirizziamo l’output in un file di log ?
La domanda più scontata: Come si fa a sostituire i file del sistema con quelli di backup in caso di problemi ? Sono salvati in archivi speciali o semplicemente hanno l’estensione .back o simili ?
Salve sono ancora poco pratico di programmazione ma vorrei il backup mensile salvare le ultime 3 copie, a rotazione ogni volta che si aggiunge una nuova l’ultima più vecchia si cancelli automaticamente come potrebbe essere la stringa?