Novità
Come fare un backup del tuo VPS Linux

Guida Verificata Come fare un backup del tuo VPS Linux

Una guida verificata è stata controllata dallo staff punto per punto e se ne attesta la sua validità.

Introduzione​

Se hai un VPS, o comunque amministri un server linux, almeno una volta ti sarai chiesto come effettuare dei backup, magari automatizzati, dei tuoi dati, in caso di problemi o attacchi.

Per molti utenti i backup sono una vera e propria paranoia, non sapendo come dimenarsi fra le centinaia di soluzioni diverse possibili, tra software o infrastrutture a pagamento, open-source o altro. Quasi tutti i fornitori di servizi Cloud offrono un proprio piano di backup o snapshot del sistema, talvolta a pagamento. Ma se volessimo effettuare un backup o snapshot noi stessi? Magari in locale o su un altro servizio Cloud per aumentare la ridondanza?

Beh, semplicemente pensarci troppo non serve, la soluzione è rsync, potente software disponibile in quasi tutte le repository linux!

Molti utenti stanno alla larga dalle soluzioni a riga di comando, quando invece risultano molto semplici ed efficaci. Possiamo in questo modo effettuare backup incrementali, conservare snapshot ed automatizzare il tutto con l'aiuto dei cron!

Vediamo tutto in questa guida!

Prerequisiti​

  • 2 Server Linux, ovvero uno di sorgente e uno di destinazione. Possono essere qualsiasi tipo di macchina: VPS, PC locale, istanza aws etc..
  • Accesso ssh su entrambi i server
  • Nessuna fobia verso i software a riga di comando!
I comandi che seguiranno, prenderanno in esempio un sistema basato su Debian. Chiaramente con piccole correzioni possono essere eseguiti anche su sistemi rpm-based.

Come installare rsync​

Questo software è preinstallato su molte distro. Verifichiamo se è già presente su entrambi i server con
Bash:
Accedi o Registrati per vedere questo contenuto.
Nel caso, la risposta sarà la versione di rsync. Diversamente, installiamolo con
Bash:
Accedi o Registrati per vedere questo contenuto.

Casi d'uso​

Prima di procedere, dobbiamo aver chiaro come (e dove) vogliamo effettuare i backup. Se i nostri backup andranno su un server remoto, useremo il protocollo SSH. In questo caso, di seguito creeremo una chiave pubblica e privata per automatizzare la connessione senza che ci venga richiesto l'inserimento di password (necessario in seguito per i cron).
Se invece intendete effettuare il backup su un dispositivo locale (un hard disk locale o un'altra cartella dell'OS), non sarà necessario.

Di seguito, nel caso "remoto", chiameremo
  • ServerA - Il server sorgente, ovvero quello da copiare (interamente o solo determinate directory)
  • ServerB - Il server destinazione, dove saranno conservati i backup.
I comandi possono essere eseguiti sia sul ServerA che sul ServerB, ovvero possiamo scegliere noi su quale macchina operare. Per evitare di confondere le idee, eseguiremo i comandi sul ServerA (quindi sarà la sorgente che farà un push dei dati verso la destinazione). Sarà chiaro nella guida in che modo effettuare il contrario (ovvero la destinazione che fa un pull dei dati dalla sorgente).

Creazione chiave pubblica e privata​

TIP: Questo argomento è molto complesso, per approfondimenti consiglio una lettura della nostra guida

Colleghiamoci in SSH al nostro ServerA e creiamo una coppia di chiavi con
Bash:
Accedi o Registrati per vedere questo contenuto.
La chiave NON dovrà essere protetta da password.

Copiamo ora la chiave sul ServerB
Bash:
Accedi o Registrati per vedere questo contenuto.
Dove sostituiamo server-B-IP con l'IP corretto. Solo questa volta dovremmo inserire la password root del ServerB, successivamente non sarà più richiesta.

Effettuare il Backup​

Vogliamo che i backup vadano a finire ad esempio nella directory /root/backup/ del ServerB

Caso 1: Backup directory specifiche (ad esempio di un sito web)​

Se vogliamo copiare solo delle directory specifiche, ad esempio /var/www/html il comando da eseguire sul ServerA è
Bash:
Accedi o Registrati per vedere questo contenuto.

Caso 2: Backup intero sistema​

Per fare il backup dell'intero sistema operativo, usiamo invece (sempre sul ServerA) il comando
Bash:
Accedi o Registrati per vedere questo contenuto.
Da notare l'uso dello slash / per includere tutte le directory del sistema operativo eccetto le indicate dal parametro --exclude

Spiegazione​

Generalmente, un comando rsync è composto in questo modo:
rsync -opzioni sorgente destinazione
Ci sono poi svariate opzioni che possiamo applicare, tra le più comuni, troviamo
  • -a Crea un archivio dei file, includendo gli attributi.
  • -v Mostra a schermo le operazioni.
  • -z Attiva la compressione dei file.
  • --delete elimina nei successivi backup incrementali i file non più esistenti nella sorgente (in pratica le directory saranno completamente sincronizzate).
  • --exclude Esclude le directory indicate, come nel caso sopra.
  • -e Permette di inserire ulteriori istruzioni al collegamento SSH, come il percorso della chiave se non è in quello standard o una porta diversa dalla 22 (esempio: -e "ssh -i /root/pippo/chiaveprivata -p 12345").
  • --dry-run Esegue un avvio di prova.
  • -X Preserva gli attributi estesi.
  • -A Preserva l'ACLs.
Come accennato sopra, invertendo sorgente e destinazione alterniamo fra la modalità push e pull, ecco perché possiamo scegliere noi su quale server operare.

Se lanciamo il comando per una seconda volta, notiamo che ci saranno pochissimi cambiamenti, in quanto la sincronizzazione è di tipo incrementale, e solo glie effettivi file modificati, rimossi o aggiunti vengono trasferiti nuovamente.

Sincronizzazione automatica​

Per evitare di dover lanciare ogni volta il comando, possiamo avviarlo ad un ora (o un giorno) specifico grazie ai cron.

Creiamo uno script sul ServerA, ad esempio
Codice:
Accedi o Registrati per vedere questo contenuto.
e copiamo all'interno il codice usato sopra (ad esempio quello del Caso 1)
Bash:
Accedi o Registrati per vedere questo contenuto.
ora digitiamo
Bash:
Accedi o Registrati per vedere questo contenuto.
e incolliamo in fondo quanto segue
Codice:
Accedi o Registrati per vedere questo contenuto.

In questo modo, lo script verrà lanciato ogni giorno alle 20.30, mantenendo le 2 directory sui 2 server sincronizzate!

Effettuare delle Snapshots​

Quanto visto fino ad ora ci permette di avere 2 directory sincronizzate, ma non vogliamo fermarci qui! Un server in produzione, deve avere dei backup storici dei file presenti ad esempio 3 giorni fa, in modo da recuperare eventuali modifiche, file rimossi o persi. Le snapshots ci consentono di mantenere quanti più backup storici vogliamo, feature offerta dai maggiori programmi (a pagamento) di backup!

Operazione molto facile grazie agli script e i cronjob!

Creiamo un ulteriore script sul ServerA
Codice:
Accedi o Registrati per vedere questo contenuto.
e al suo interno, copiamo quanto segue con le dovute correzioni
Bash:
Accedi o Registrati per vedere questo contenuto.
Ora possiamo eseguire direttamente lo script con /root/snapshot.sh oppure inserirlo in un cronjob.

Digitando sempre
Bash:
Accedi o Registrati per vedere questo contenuto.
Un cron che esegue entrambi gli script può essere ad esempio di questo tipo (da incollare sempre in fondo al documento):
Codice:
Accedi o Registrati per vedere questo contenuto.

In questo modo, con questi script, viene fatto quanto segue:
  • Crea un'istantanea della directory sorgente e la trasferisce al server di backup nella cartella di destinazione specificata.
  • Crea un soft link "current" nella directory di destinazione all'ultima istantanea all'interno della directory.
  • Controlla le istantanee più vecchie di 30 giorni e le elimina per risparmiare spazio sul server di backup.
Per completezza, ricordo che è possibile anche esportare sempre con rsync un eventuale dump di un database, con i classici comandi come
Bash:
Accedi o Registrati per vedere questo contenuto.
a patto di esportare il file sql in una delle directory sincronizzate con rsync.

Come vedete, il risultato finale è identico a quello raggiunto con altre soluzioni che fanno uso di software con GUI o addirittura a pagamento. Il protocollo utilizzato per trasferire i file è SSH, dunque sicuro. I file nella directory di destinazione naturalmente non sono protetti di per se, ma si può facilmente ovviare alla cosa tramite altri software crittografici come Veracrypt e simili.
  • Like
Reazioni: Gzenn
Autore
Anyma
Visite
616
Primo rilascio
Ultimo aggiornamento
Valutazione
0.00 stella(e) 0 valutazioni

Più risorse di Anyma

Indietro
Alto