Il backup dei dati del proprio computer è un’operazione che andrebbe eseguita con regolarità, perché non c’è niente di peggio che perdere il lavoro di giorni o settimane, o magari anche di mesi.
Ubuntu mette a disposizione diversi tool per eseguire i backup su unità locali o remote, ma ci fornisce anche dei mezzi di base con i quali possiamo provvedere alle nostre esigenze in modo un po’ più diretto.
Diciamo che abbiamo a disposizione un pc locale sul quale lavoriamo giornalmente, e un server remoto su cui vogliamo riversare periodicamente la nostra directory home, senza che ci si debba ricordare di farlo. Esistono diverse soluzioni per portare a compimento questa operazione come, ad esempio, scegliere tra avere un backup compresso (per risparmiare spazio sul server e ridurre i tempi di trasferimento) o normale (dove anche i file remoti sono accessibili senza conversioni), oppure trasferire tutta una directory o soltanto i file modificati/aggiunti, e così via
Qui vi illustro un backup incrementale, non compresso, da eseguire automaticamente ogni ora. Questa scelta consente di avere sempre a disposizione i file di backup sul server remoto, senza necessità di decompressione, ed utilizza la banda in maniera piuttosto economica.
In termini pratici, il backup incrementale si svolge in due fasi. Nella prima viene eseguito un confronto tra i file locali ed i file remoti, e ciò richiede poche decine di kB di colloquio, variabile a seconda del numero totale di file del backup. Nella seconda viene eseguito il trasferimento dei file che risultano modificati o di quelli che non sono presenti sul server remoto. In occasione della prima esecuzione della procedura verranno ovviamente trasferiti tutti i file previsti.
In questo esempio utilizziamo i seguenti dati:
IP server remoto: | 1.2.3.4 |
Utente server remoto: | jameswhite |
Password utente remoto: | PwJam |
Path di destinazione: | /home/backups/Documenti/ |
Path da backuppare: | /home/giacomo/Documenti/ |
Il comando che usiamo per questa procedura è
rsync e fa parte di tutte distribuzioni Linux.
Poiché rsync usa il protocollo SSH per il trasferimento sicuro dei dati, richiederà Utente e Password autorizzati ad accedere al server remoto. Sebbene sia possibile definire lo username nel comando, non è possibile farlo per la password, che verrà richiesta e digitata per poter proseguire l’esecuzione del comando.
Dunque, la nostra riga di comando da terminale sarà:
rsync -a /home/giacomo/Documenti/ jameswhite@1.2.3.4:/home/backups/Documenti/
Una volta premuto Invio, verrà chiesta la password, e dovremo digitare
PwJam
e premere Invio per avviare il backup immediatamente.
L’opzione
-a significa “archivio”: la copia riguarderà tutti i file e cartelle in modo ricorsivo, che è il modo più semplice e normale di fare un backup.
Occorre tenere presenti due aspetti, ovvero (1) se vengono rinominati dei file dal computer locale, sul server remoto avremo sia i file con i vecchi nomi che quelli con i nuovi nomi; e (2) i file cancellati dal computer locale, rimangono inalterati sul server remoto. Se desideriamo che il nostro backup sia invece una copia fedele del computer locale, occorre aggiungere l’opzione
--delete che modifica il comportamento di
rsync così che rispetto al computer locale (1) i nuovi file rinominati vengono trasferiti e quelli vecchi vengono cancellati dal server remoto e (2) i file cancellati vengono cancellati anche dal server remoto.
Dunque, la nostra riga di comando diventa:
rsync -a –-delete /home/giacomo/Documenti/ jameswhite@1.2.3.4:/home/backups/Documenti/
A questo punto dobbiamo fare in modo che questo comando venga eseguito automaticamente, ma abbiamo il problema della password. Come detto prima, non è possibile memorizzare la password all’interno della riga di comando, e questo è vero per motivi di sicurezza. Se includiamo la riga di comando in
/etc/crontab senza fare altro, il comando fallirà quando il server remoto chiederà la password, perché nessuno ha la possibilità di digitarla. Fortunatamente ci sono un paio di sistemi per risolvere questo problema, e noi vediamo il più semplice.
La soluzione è di importare le vostre chiavi locali nel computer remoto, così che sia poi possibile eseguire
rsync con la password. Il primo passo è di creare le vostre chiavi:
ssh-keygen
Potete premere Invio ed accettare tutti i valori di default.
Il secondo passo è di comunicare il vostro ID al computer remoto:
ssh-copy-id jameswhite@1.2.3.4
Digitate la password
PwJam e il gioco è fatto.
Provate adesso ad eseguire ancora il comando
rsync e vedrete che il login verrà fatto automaticamente.
In alcuni casi accade che venga ancora richiesta la password perché il comando ssh-copy-id non ha comunicato a ssh-agent l'esistenza della nuova chiave. Se questo succede, dovete semplicemente comunicarlo voi con il comando:
ssh-add
Questa procedura va eseguita soltanto la prima volta, perché da ora in poi i comandi
ssh e
rsync di jameswhite@1.2.3.4 verranno eseguiti sul server remoto senza chiedere più la password.
Per automatizzare il backup non resta che aggiungere la nostra riga di comando a
/etc/crontab . Ad esempio, per eseguire l’aggiornamento ogni ora occorre aggiungere a
/etc/crontab la seguente riga:
0 * * * * root rsync -a –-delete /home/giacomo/Documenti/ jameswhite@1.2.3.4:/home/backups/Documenti/
A questo punto, buon backup a tutti!