«

»

Lug 09 2015

Stampa Articolo

Backup automatici locali e remoti con rsnapshot

rsnapshot-backuprsnapshot è un programma di utilità di backup incrementale e questo tutorial illustrerà come è possibile creare diversi backup a rotazione con rsnapshot, creando un primo backup completo e backup successivi dei soli i file modificati.

Il vero potere di rsnapshot è la sua capacità di utilizzare hard link tra ogni backup: ogni backup sembrerà essere un backup completo, in realtà ogni nuovo backup è costituito dai soli file appena creati o aggiornati.

rsnapshot può essere utilizzato in locale, su una rete LAN o anche su server remoti e può essere eseguito da cron.

Procedura per installare e configurare rsnapshot:

1) Installare rbackup dal repository EPEL

2) Installare perl-Lchown dal repository rpmforge

3) editare il file /etc/rsnapshot.conf e decommentare alcuni comandi come da esempio e indicando i propri percorsi di backup.
Per rendere più agevole la comprensione delle varie sezioni sono state aggiunte alcune  traduzioni.

Attenzione a non sbagliare la sintassi: tra un parametro è l’altro deve esserci un TAB e non uno spazio, altrimenti rsnapshot non funzionerà. In ogni caso è meglio testare la configurazione con:

che in caso positivo ci restituire il messaggio Syntax OK e con il comando:

che restituirà l’elenco delle operazioni che verrebbero eseguite senza eseguirle realmente (dry run).

4) Pianificare i backup giornalieri, settimanali e mensili

Sistemata la configurazione, si può pensare alla schedulazione dei backup servendoci di cron.
Digitando il comando crontab -e ed inserendo le righe desiderate, come ad esempio per programmare l’esecuzione del backup giornaliero tutti i giorni dal lunedì al sabato alle ore 20.30:

per programmare l’esecuzione del backup settimanale tutte le domeniche alle ore 20.30:

per programmare l’esecuzione del backup mensile nel primo giorno del mese alle ore 20.30:

ATTENZIONE: nel caso si decommenti # sync_first (da fare solo dopo il primo backup) è necessario far precedere il comando rsnapshot sync && 

Creare un Report delle operazioni di backup:

E' possibile generare un report riassuntivo del backup con invio ad una email, per questo utilizzeremo un file il perl che andrà corretto in quanto quello di default è adatto per una versione di rsnapshot obsoleta.

1) Ricopiare il file rsnapreport.pl che si trova nella cartella /usr/share/doc/ nella cartella /usr/local/bin/ e configurare i permessi di esecuzione:

editare il file /usr/local/bin/rsnapreport.pl e sostituire le righe indicate con - con quelle contrassegnate con +:

In questo caso l'evento pianificato dovrà essere il seguente (esempio per backup giornaliero):

ATTENZIONE: utilizzando la funzione rsnapreport.pl bisogna assicurarsi che nel file di configurazione /etc/rsnapshot.conf sia presente il parametro --stats nella riga:

ATTENZIONE: dopo il tag rsync_long_args è necessario che il primo parametro sia staccato con un TAB (non con uno spazio)  e i successivi con uno spazio (e non con una TAB):

rsync_long_args<TAB>--stats<SPAZIO>--delete<SPAZIO>--numeric-ids<SPAZIO>--relative<SPAZIO>--delete-excluded

Purtroppo la documentazione di rsnapshot in questo caso è molto lacunosa...

Backup rsnapshot remoti

E' possibile eseguire backup di server remoti su un PC (o un server) destinato a conservare i backup. Per questo è necessario configurare dapprima il server remoto e successivamente il PC locale come da procedura indicata di seguito:

A) Operazioni da eseguirsi sul server remoto (quello dove si trovano le cartelle e i file di produzione)

1) Creare un utente di backup, ad esempio xxxbackup (o altro nome utente che non sia di facile individuazione) e creando la home directory e assegnandogli /bin/bash come shell:

2) Creare un wrapper /usr/local/bin/rsync_wrapper.sh con all'interno:

e impostiamo i permessi:

3) Creare il file /home/xxxbackup/validate-rsync.sh con al suo interno uno script per limitare l’uso di ssh:

e impostiamo anche permessi e owner dello script:

4) Configurare sudo per permettere l’utilizzo di rsync (e solo rsync) con permessi di root, aggiungendo nel file  /etc/sudoers la riga:

B) Operazioni da eseguirsi sul sul PC locale (quello dove saranno riposti i backup)

1) Generare le chiavi (pubblica e privata) per l'accesso remoto:

e rinominarla per evitare che possa venire sovrascritta:

C) Copia della chiave pubblica sul server remoto, e configurazione per consentire autenticazione senza password

1) Da root, passare all'utente xxxbackup e utilizzare per la prima volta ssh, in modo che venga creata la directory .ssh con i permessi corretti:

e successivamente lanciare il comando ssh 0 e rispondere yes:

e ritornare all'utente root con exit:

2) Copiare la chiave pubblica del pc locale /root/.ssh/id_rsa_rsnapshot_server01.pub nella directory /home/xxxbackup/.ssh del server remoto, quindi inserirla inserire all'interno del file authorized_keys e successivamente rimuovere la chiave pubblica in quanto non più necessaria.

e configurare i permessi corretti:

3) Aggiungere limitazioni all'autenticazione senza password, in modo da imporre l’utilizzo del file validate_rsync.sh creato in precedenza così che non sia possibile eseguire altri comandi, quindi editare il file authorized_keys e aggiungere prima di ssh-rsa:

(per xxx.xxx.xxx.xxx indicare l'IP del server di backup)

D) Test collegamento SSH senza password

1) Per semplicità salvare i dati di connessione sul server di backup in modo da semplificare e abbreviare i comandi, creando il file (se non esiste) /root/.ssh/config inserendo all'interno del file il seguente codice:

(Sostituire xxx.xxx.xxx.xxx con l’ip del server remoto)

2) Testare la connessione:

Il wrapper funziona correttamente: siamo riusciti ad autenticarci senza password dal server di backup al server remoto ma ci viene risposto Rejected 3, come da impostato nel wrapper sul server remoto.

Se proviamo ad utilizzare rsync con autenticazione senza password, ad esempio chiedendo di trasferire un file inesistente, si dovrebbe ricevere un messaggio di errore di rsync come il seguente:

Se invece si riceve la risposta:

è necessario aggiungere all'interno del file /etc/sudoers 

E) Configurazione rsnapshot.conf per backup server remoto

1) A questo punto possiamo inserire nel file /etc/rsnapshot.conf il percorso del backup del server remoto @server01:

Ovviamente questo è solo un esempio, si dovranno indicare il proprio user@host e i percorsi di backup.

Ripristino backup

Per ripristinare i backup di cui sopra, useremo (ovviamente indicando i percorsi corretti!):

 

APPROFONDIMENTI:

1) E' possibile lanciare rsnapshot in modo che utilizzi una configurazione diversa da quella di default, così da poter avere diverse sessioni differenziate di backup. Tuttavia, se si è decommentato nel file di configurazione il parametro:

potrà essere attiva una sola sessione di rsnapshot per volta.

Per lanciare rsnapshot con una configurazione dedicata usare l'opzione -c 

(in questo caso il file di configurazione dedicato è /etc/rsnapshot/rsnapshot-web107.conf)

2) Per evitare di creare più cron per backup separati (file configurazione dedicato), così anche da evitare che il successivo sia lanciato prima che il precedente sia terminato causandone il fallimento, si possono raggruppare i comandi cron in uno solo, separandoli con il ; come ad esempio:

3) rsnapshot supporta anche backup di tipo più complessi, è infatti possibile specificare uno script da far girare prima di effettuare il backup. Tutti i file creati nella directory di lavoro dello script stesso, verranno trattati come contenuti della directory sorgente e copiati nell’opportuna directory destinazione.

Ad esempio, per backuppare uno o più database MySQL, possiamo modificare il file rsnapshot.conf inserendo in esso la stringa:

In questo modo rsnapshot eseguirà /sbin/backup_mysql.sh. Nel nostro caso, tale script contiene:

le credenziali di accesso sono state inserite nel file /root/.my.cnf come da esempio (naturalmente indicare il proprio user e password ed eventualmente dell'host):

Lanciando rsnapshot daily sarà eseguito anche il dump del database remoto e portarlo in locale.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


*