Backup incrementali su un VPS tramite rsync e cron | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

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:

  1. Sincronizzazione dei soli file modificati
  2. 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

Warning

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:

  1. Ruotare i backup esistenti
  2. Creare un nuovo backup incrementale
  3. 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.

CloudBox profile settings

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

CloudBox public SSH key section

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.

  1. Esegui lo script manualmente: sudo /usr/local/bin/backup_daily.sh
  2. Verifica le dimensioni: du -sh /backups/*. Deve esserci un solo backup di grandi dimensioni.
  3. 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/ /

Warning

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.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA