Sincronizzare files tra due server e schedulare i backup

Nuovo capitolo delle mie avventure lavorative... Ieri ho impiegato la mia giornata nel configurare una nuova macchina come server di backup di un file server già presente nel nostro ufficio.

All'inizio di aprile avevo già provato l'ebrezza di installare un file server, con 4 dischi da 1 TB ciascuno in RAID 5. Ora quel server, usato soprattutto per backup di progetti adobe premiere, quindi file di grandi dimensioni, è quasi pieno (93% di spazio occupato, su 2 TB). La settimana scorsa così, è partito l'ordine per la nuova macchina, che dovrà eseguire il backup dei dati presenti su quel server. Un hp con 4 dischi da 1,5 TB.

Ho così scaricato la nuova versione di ubuntu server (9.10) e avviato l'installazione, partizionando il disco con volumi per il raid e installando il raid 5 software. Il multidevice RAID è stato configurato in modo da usare tutti i 4 dischi, senza prevedere un disco di spare (quindi bisogna ricordarsi di rivolgere qualche preghiera ogni tanto :P), per un totale di 4,5TB disponibili.
A questo punto dopo aver installato l'ssh :

... e la condivisione samba (maggiori informazioni qui) ho googleggiato un po' per scoprire come configurare rsync e schedulare un backup da un server ad un'ora prestabilita della notte.

rsync è un ottimo programma per il backup da linea di comando e usa l'ssh per eseguire una copia tra due macchine in rete.

Le cose però si fanno più complicate quando bisogna schedulare il backup... Quando si stabilisce una connessione ssh infatti, il server destinazione richiede l'autenticazione (nome utente e password), e se si vuole eseguire un backup notturno, inserire nome utente e password non è possibile. Esiste quindi un modo per bypassare l'autenticazione ssh creando una chiave rsa e condividendola tra i due nodi (sorgente e destinazione).

Il primo passo è quello di abilitare l'autenticazione con chiave rsa sul server destinazione:

...e assicurarsi che siano presenti le tre linee seguenti:

RSAAuthentication yes  PubkeyAuthentication yes  AuthorizedKeysFile .ssh/authorized_keys

...e riavviare il server ssh:

Bene ora spostiamoci sul server sorgente e creiamo la chiave rsa (consiglio, autenticatevi come root per non avere problemi di permessi):

A questo punto andiamo nella cartella .ssh nella home (se avete ascoltato il consiglio sarà /root/.ssh) e troverete due file: id_rsa e id_rsa.pub (chiave privata e chiave pubblica). Aprite il file contenente la chiave pubblica, e copiate il suo contenuto per intero.

A questo punto torniamo sul server destinazione e creiamo la cartella .ssh nella home del profilo con il quale si vorrà connettersi via ssh. Qui creiamo il file authorized_keys e copiamoci dentro la chiave pubblica del server. Bene (assicuratevi di assegnare i giusti permessi, in genere 600 al file e 700 alla cartella se non volete che qualcuno si impossessi della chiave rsa) a questo punto dovreste testare la connessione ssh dal server sorgente a quello di destinazione. Vi chiede la password? allora avete sbagliato qualcosa, o avete avuto sfortuna :-P cancellate i file creati e ripartite dalla creazione della chiave.

Se invece tutto sembra andare per il meglio non vi resta che schedulare lo script di rsync.

Per schedulare un job, su linux è buona prassi usare crontab.

Prima di tutto andate nella cartella /root e create un file rsync.sh. Il suo contenuto potrebbe essere una cosa del tipo:

#!/bin/bash    SOURCEPATH=’/source/directory’  DESTPATH=’/destination’  DESTHOST=’123.123.123.123′  DESTUSER=’destuser’  LOGFILE=’rsync.log’    echo $’\n\n’ >> $LOGFILE  rsync -av –rsh=ssh $SOURCEPATH $DESTUSER@$DESTHOST:$DESTPATH 2>&1 >> $LOGFILE  echo “Completed at: `/bin/date`” >> $LOGFILE  

...salvate ed è tutto (quasi) a posto.

Non rimane che editare il file di crontab e aggiungere l'istruzione per lanciare ad un'ora prestabilita il file .sh appena creato:

Qui dentro dovrete inserire una linea del tipo:

0 4 * * * /root/rsync.sh

Salvate ed uscite.

Ora il vostro lavoro partirà alle ore 4.00 di tutti i giorni, di tutti i mesi [,di tutti i giorni della settimana])

Bene, ora avete un backup giornaliero dei vostri dati, su un altra macchina. figo no? ;-)

ps: la maggior parte di questa guida, si basa su quest'altra guida, davvero ottima, anche se in anglais...
[ad]