Backup incrementali su un VPS tramite rsync e cron
Introduzione
I backup sono fondamentali per qualsiasi VPS. Ti proteggono da cancellazioni accidentali, errori di configurazione, danneggiamento dei dati o compromissione del server.
Questo manuale spiega come configurare i backup incrementali utilizzando:
- rsync — uno strumento efficiente per la copia dei file
- collegamenti fisici — per evitare la duplicazione dei dati in ogni backup
- cron — per pianificare i backup automatici
Risultato: ogni snapshot appare come un backup completo, ma solo i file modificati occupano spazio aggiuntivo. Questo approccio è semplice, affidabile e adatto alla maggior parte delle configurazioni VPS comuni.
Come funzionano i backup incrementali con rsync
rsync offre due funzionalità chiave:
- Sincronizzazione dei soli file modificati
- Opzione
--link-dest: crea collegamenti fisici per i file invariati, consentendo di avere più directory di backup “completi” senza occupare spazio aggiuntivo.
Esempio di struttura delle directory:
/backups/ daily.0/ - today's backup daily.1/ - yesterday's backup daily.2/ - backup from 2 days ago
Ogni cartella appare come un backup completo, ma solo le differenze occupano spazio.
Prerequisiti
Sul VPS:
- Installazione di Linux
- Accesso come root o utente con sudo
- Spazio su disco sufficiente per le istantanee di backup
- Opzionale: spazio di archiviazione remoto se si esegue il backup su un altro server
Installare rsync se necessario:
sudo apt update sudo apt install rsync
Arrestare i server di database oppure escludere le relative directory dei dati dal backup. Il backup online dei database tramite rsync potrebbe causare il danneggiamento del backup stesso.
Creazione delle directory di backup
Scegliere una posizione per i backup. Di solito:
- File system locale:
/backups/ - Disco esterno:
/mnt/storage/backups/ - Server remoto tramite SSH:
user@backup-server:/data/backups/
Esempio (locale):
sudo mkdir -p /backups sudo chmod 700 /backups
Comando rsync di base per i backup incrementali
Di seguito è riportato il comando rsync principale:
rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/
Spiegazione:
-a— modalità archivio (mantiene permessi, proprietari, timestamp e collegamenti simbolici)--delete— rimuove i file eliminati nella sorgente--link-dest— crea collegamenti fisici ai file rimasti invariati nell'istantanea precedente/source/data/— directory di cui si desidera eseguire il backup/backups/daily.0/— snapshot di oggi
Script di rotazione per le istantanee giornaliere
Creare uno script per:
- Ruotare i backup esistenti
- Creare un nuovo backup incrementale
- Conservare N giorni (esempio: 7)
Crea un file:
sudo nano /usr/local/bin/backup_daily.sh
Incolla:
#!/bin/bash BACKUP_DIR="/backups/" SOURCE="/" EXCLUDE="/etc/backup-exclude.txt" DAYS="7" #REMOTE_USER="<YOUR_REMOTE_USER>" #REMOTE_SERVER="<YOUR_REMOTE_SERVER>" REMOTE_DIR="/backups/" # Rotate for ((i=DAYS-1; i>=0; i--)); do if [ -d "$BACKUP_DIR/daily.$i" ]; then rm -rf "$BACKUP_DIR/daily.$((i+1))" mv "$BACKUP_DIR/daily.$i" "$BACKUP_DIR/daily.$((i+1))" fi done # Prepare backup directories mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Perform incremental backup rsync -a --delete \ --link-dest="$BACKUP_DIR/daily.1" \ --exclude-from="$EXCLUDE" \ "$SOURCE" "$BACKUP_DIR/daily.0" if [ -n "$REMOTE_USER" ] && [ -n "$REMOTE_SERVER" ] && [ -n "$REMOTE_DIR" ]; then rsync -azv --delete "$BACKUP_DIR" "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR" fi
Salva ed esci. Rendilo eseguibile:
sudo chmod +x /usr/local/bin/backup_daily.sh
È possibile modificare le variabili all'inizio dello script per adattarlo alle proprie esigenze. Ad esempio, se non è necessario un backup completo del filesystem di root, modificare SOURCE con una directory specifica.
Esclusione delle directory non necessarie
Creare un file di esclusione:
sudo nano /etc/backup-exclude.txt
Esclusioni tipiche:
/proc/sys/tmp/run/dev/mnt/media/var/cache/backup
Pianificazione dei backup con cron
Modifica crontab:
sudo crontab -e
Aggiungere (backup alle 03:00 ogni giorno):
0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1
Questo garantisce il salvataggio automatico e regolare delle istantanee.
Backup su un server remoto (opzionale)
Se si desidera eseguire un backup fuori sede, seguire i passaggi seguenti. Creare una cartella di destinazione sul server di destinazione:
mkdir -p /backups
Assicurati che le chiavi SSH siano configurate. Esegui il comando seguente per generare la tua chiave SSH:
ssh-keygen
Sostituisci <YOUR_REMOTE_USER> con il tuo nome utente sul server remoto, <YOUR_REMOTE_SERVER> con il nome di dominio del tuo server remoto ed esegui il comando seguente per copiare la tua chiave SSH sul server remoto:
ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>
Rimuovere il commento dalle variabili REMOTE_USER e REMOTE_SERVER all’inizio del file backup_daily.sh, sostituire <YOUR_REMOTE_USER> con il proprio nome utente sul server remoto e <YOUR_REMOTE_SERVER> con il nome di dominio del server remoto, quindi salvare backup_daily.sh per abilitare il backup remoto.
Caricamento dei backup su INTROSERV CloudBox
INTROSERV offre uno spazio di archiviazione online che consente di salvare, in modo automatico o manuale, copie sicure dei propri file e dati importanti su server remoti. Per utilizzarlo come spazio di archiviazione per il backup remoto, accedi all’interfaccia web di CloudBox e aggiungi la tua chiave SSH pubblica al profilo. Le impostazioni del profilo si trovano nell’angolo in alto a destra.

Inserisci la tua chiave SSH pubblica nella sezione "Chiavi pubbliche" per caricare la chiave sul server.

Rimuovi il commento dalle variabili REMOTE_USER e REMOTE_SERVER nella parte superiore del file backup_daily.sh, sostituisci <YOUR_REMOTE_USER> con il tuo nome utente sul server CloudBox, <YOUR_REMOTE_SERVER> con il nome di dominio del tuo server CloudBox e salva il file backup_daily.sh per abilitare il backup remoto.
Verifica dei backup
Prima di affidarti al sistema, verifica i backup.
- Esegui lo script manualmente:
sudo /usr/local/bin/backup_daily.sh - Verifica le dimensioni:
du -sh /backups/*.Deve esserci un solo backup di grandi dimensioni. - Verifica l'integrità dei file:
ls -l /backups/daily.0/etc/
Ripristino dei dati
È possibile ripristinare un singolo file:
cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/
Oppure ripristinare tutto:
sudo rsync -a /backups/daily.0/ /
Il ripristino delle directory di sistema sovrascrive i file attuali.
Considerazioni sulla sicurezza
- Utilizzare permessi rigorosi sulle directory di backup (
chmod 700). - Se si utilizza SSH, disabilitare l'accesso tramite password e utilizzare esclusivamente le chiavi.
- Se possibile, non archiviare i backup sullo stesso disco del server.
- Crittografare i backup remoti utilizzando LUKS o un sistema di archiviazione crittografato, se necessario.
Monitoraggio e registrazione
La registrazione è già stata aggiunta in cron: /var/log/backup.log
Controllare regolarmente:
tail -f /var/log/backup.log
Conclusione
L'utilizzo di rsync con cron offre:
- Backup incrementali veloci
- Un uso efficiente dello spazio su disco tramite collegamenti fisici
- Processo di ripristino semplice
- Pianificazione completamente automatizzata
Questo metodo è affidabile e facile da usare per gli amministratori alle prime armi e funziona perfettamente su configurazioni VPS Linux.