• seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Effettuare il backup di un server Linux utilizzando rsync

di :: 15 agosto 2018
Effettuare il backup di un server Linux utilizzando rsync

Se avete l'esigenza di effettuare un backup periodico del vostro server, in questo articolo vediamo come implementare rsync, probabilmente il più diffuso strumento di backup utilizzato nei sistemi linux.

Con rsync potrai effettuare un backup di una o più directory (o di tutto il filesystem) del tuo server linux, su un dispositivo dedicato al backup, ad esempio su un secondo HD, o su un altro server connesso in rete.

Il grosso vantaggio di rsync è che non vengono copiati ogni volta tutti i files, ma solo i files modificati tra il backup precedente e quello in corso.

In questo articolo vediamo come effettuare un backup utilizzando come destinazione un HD esterno usb. In un articolo successivo vedremo invece come effettuare un backup su un server presente in rete.

Backup e sincronizzazione in questo articolo sono sinonimi, in quanto andremo a "sincronizzare" cioè a copiare il contenuto dell'hd sorgente sul dispositivo esterno usb.

Installazione di rsync

Iniziamo con la sua installazione. In questo articolo utilizziamo un sistema CentOS (quanto segue è applicabile a tutte le derivate RedHat): utilizziamo yum per installarlo.

yum install rsync

Utilizzo di rsync

Lanciare rsync è molto semplice:

rsync opzioni sorgente destinazione

Vediamo nel dettaglio cosa abbiamo indicato

  • rsync è il comando per lanciare rsync
  • le opzioni consentono di effettuare il backup seguendo certe regole che tra poco vedremo (ad esempio: "-avz")
  • sorgente: è la directory di cui vogliamo effettuare il backup
  • destinazione: è dove vogliamo salvare il nostro backup

Vediamo un esempio reale: salviamo il contenuto della directory "/var/www/html" presente sul nostro server, su un HD usb presente nello stesso server.

La cartella html conterrà alcune sottodirectories (sitoA, sitoB, demo, log) e files.

/var/www/html
/var/www/html/sitoA
/var/www/html/sitoA/index.php
/var/www/html/sitoB
/var/www/html/sitoB/index.php
/var/www/html/sitoB/test.php
/var/www/html/demo
/var/www/html/demo/sitoC
/var/www/html/demo/sitoD
/var/www/html/log
/var/www/html/test.php

Innanzitutto montiamo l'HD usb "/dev/sdb1" creando la directory "disk1" nella root del nostro server

mount /dev/sdb1 /disk1

Montato l'HD usb, all'interno creiamo, solo per il primo utilizzo, una directory "bkp" all'interno della qualche salveremo il nostro backup

mkdir /disk1/bkp

Bene, adesso che abbiamo creato la destinazione del nostro backup possiamo procedere con rsync in questo modo

rsync -avz /var/www/html/ /disk1/bkp/

Provate ad accedere alla directory "bkp" e vedrete salvato il contenuto di "/var/www/html"

Nota: come origine abbiamo indicato "/var/www/html/" con la slash finale. Se avessimo omesso la slash finale, sul disco di destinazione si sarebbe creata anche la cartella "html", mentre con la slash finale abbiamo copiato il solo contenuto della cartella www! In pratica la slash finale indica di considerare il solo contenuto del path indicato.

Al primo utilizzo, rsync dovrà effettuare il backup di tutti i files della cartella "html" e quindi il tempo di esecuzione potrebbe durare molti secondi. Ma dalla volta successiva rsync trasferirà solo i files modificati dall'ultimo backup per cui sarà velocissimo!

Opzioni di rsync

Nel nostro esempio abbiamo utilizzato le opzioni "avz": vediamo a cosa servono.

  • -a: indica a rsync di utilizzare la modalità "archivio", cioè di copiare ricorsivamente tutti i file, directory e sottodirectories, preservando permessi, timestamp, link simbolici, owner e gruppi. In alternativa potremmo usare -r, ma questa opzione non preserva permessi, timestamp...
  • -v: indica a rsync di utilizzare una modalità "verbose", cioè di stampare a video un output del risultato dell'elaborazione. Possiamo in aggiunta usare l'opzione -h per rendere l'output in un formato più leggibile (human-readable)
  • -z: serve a comprimere i dati utilizzando l'algoritmo gzip, ed è molto utile se i dati da salvare sono molti e se il backup avviene da remoto e vogliamo preservare la banda del server

Per la lista completa delle opzioni, si rimanda all'help di rsync

rsync -h

Copia speculare con rsync

Ci troviamo in questa situazione: nel path sorgente che stiamo copiando esistono files/directories già copiati sul dispositivo di backup. Successivamente questi files vengono cancellati dal path sorgente. Se vogliamo cancellare questi elementi anche dal disco usb di destinazione del backup, al fine di avere una copia di backup fedele all'originale (speculare), utilizziamo l'opzione "--delete".

L'opzione --delete indica a rsync di cancellare, dalla destinazione, files e directory non più presenti nel path sorgente.

Utilizzando questa opzione avremo quindi una copia speculare della directory sorgente che vogliamo copiare.

rsync -avhz --delete /var/www/html/ /disk1/bkp​/

Esclusione di files e directories

L'opzione --exclude indica a rsync di escludere dal backup una o più directory

Se ad esempio, all'interno della directory "/var/www/html", tra le varie directory e files in essa contenute, ci fossero alcune directories ("log" e "tmp") o files ("test.php" contenuto in "sitoB") che non vogliamo sincronizzare, utilizzeremo exclude in questo modo:

rsync -avz --delete --exclude='/log' --exclude='/demo' --exclude='/sitoB/test.php' /var/www/html/ /disk1/bkp​​/

Oppure più semplicemente, usando le parentesi graffe:

rsync -avz --delete --exclude={"/log","/demo","/sitoB/test.php"} /var/www/html/ /disk1/bkp​​/

NOTA: le directory e i files da escludere vanno indicati con i loro path relativi a partire dalla directory che vogliamo copiare, nel nostro caso "/var/www/html/". Per cui, ad esempio, non indicheremo "/var/www/html/log", ma solo "/log"

NOTA: se invece di "/sitoB/test.php" avessimo indicato semplicemente "test.php" non sarebbero stati copiati tutti i files con il nome test.php all'interno della directory che stiamo copiando, quindi sia quello presente nella directory "sitoB" sia quello localizzato nella "www". Quindi prestate attenzione e cercate sempre di indicare il path relativo.

Esclusione utilizzando il carattere *

Se volessimo escludere dalla sincronizzazione tutti i files con una particolare estensione, ad esempio i ".jpg", in exclude utilizziamo "*.jpg" come in questo esempio

rsync -avz --delete --exclude="*.jpg" /var/www/html/ /disk1/bkp​​/

Così facendo andiamo ad escludere i file che terminano con ".jpg" ovunque si trovino, quindi in qualche directory o sottodirectory del www.

Se volessimo escludere dalla sincronizzazioni tutte le directories che iniziano per una particolare stringa, ad esempio "sito" (nel nostro caso le directories "sitoA" "sitoB" "sitoC" e "sitoD") utilizziamo l'asterisco così:

rsync -avz --delete --exclude="sito*" /var/www/html/ /disk1/bkp​​/

NOTA: avendo indicato "sito*" senza un percorso relativo, non verranno sincronizzate tutte le directory che iniziano per "sito" in qualunque posizione esse si trovino. Se invece non volessi sincronizzare le sole directory "sito" presenti sotto la cartella "demo" dovrò indicarne il percorso relativo:

rsync -avz --delete --exclude="/demo/sito*" /var/www/html/ /disk1/bkp​​/

Esclusione utilizzando una lista caricata da file

Quando la lista delle esclusioni è notevole, potremmo agevolarci la vita indicando una lista di files e directory da escludere all'interno di un file, ad esempio chiamato "lista-esclusioni.txt", che carichiamo utilizzando l'opzione "--exclude-from"

rsync -avz --delete --exclude-from 'lista-esclusioni.txt'​ /var/www/html /disk1/bkp​​

Nel file "lista-esclusioni.txt" indichiamo, uno per riga, files e directory da escludere dal backup

/log
/tmp
/sitoB/test.php
*.jpg

Backup periodico

Se vogliamo che rsync effettui periodicamente il backup, senza alcun intervento manuale, andiamo ad utilizzare cron per schedulare una attività di backup. In questo esempio alle 23.45 di ogni giorno verrà effettuato il backup.

45 23 * * * rsync -av --delete /var/www/html/ /disk1/bkp/

Rsync e supporti FAT32

Utilizzando rsync su dispositivi rimovibili formattati in FAT32, può capitare, una volta che il dispositivo viene smontato e rimontato, che la copia creata non sia più sincronizzata. Per ovviare a questo problema basta utilizzare l'opzione --modify-window=1 come di seguito:

rsync -av --delete --modify-window=1 /var/www/html/ /disk1/bkp/

A breve pubblicherò un articolo relativo all'utilizzo di rsync tra due server remoti.

Stay tuned!

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE