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

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Backup incrementali su un VPS utilizzando rsync e cron.

Introduzione

I backup sono essenziali per qualsiasi VPS. Ti proteggono da cancellazioni accidentali, errori di configurazione, corruzione dei dati o compromissione del server.

Questo manuale spiega come impostare i backup incrementali utilizzando:

  • rsync — strumento efficiente per la copia di file
  • hard link — per evitare dati duplicati in ogni backup
  • cron — per programmare backup automatici

Risultato: ogni snapshot sembra un backup completo, ma solo i file modificati occupano spazio extra. Questo approccio è semplice, affidabile e adatto alla maggior parte delle configurazioni VPS comuni.

Come funzionano i backup incrementali con rsync

rsync offre due caratteristiche chiave:

  1. Sincronizzazione solo dei file modificati
  2. Opzione --link-dest: crea hard link per i file non modificati, permettendo più directory di backup "complete" senza consumare spazio extra.

Esempio di struttura delle directory:

/backups/ daily.0/ - backup di oggi daily.1/ - backup di ieri daily.2/ - backup di 2 giorni fa

Ogni cartella appare come un backup completo, ma solo le differenze occupano spazio.

Prerequisiti

Sul VPS:

  • Installazione Linux
  • Accesso come root o utente con sudo
  • Spazio su disco sufficiente per gli snapshot di backup
  • Opzionale: archiviazione remota se si esegue il backup su un altro server

Installa rsync se necessario:

sudo apt update

sudo apt install rsync

Info

Avviso: Arresta i server di database o escludi le loro directory di dati dal backup. Il backup online del database tramite rsync può causare un backup del database corrotto.

Creazione delle directory di backup

Scegli una posizione per i backup. Di solito:

  • File system locale: /backups/
  • Disco esterno: /mnt/storage/backups/
  • Server remoto via SSH: user@backup-server:/data/backups/

Esempio (locale):

sudo mkdir -p /backups

sudo chmod 700 /backups

Comando rsync di base per backup incrementali

Di seguito il comando chiave di rsync:

rsync -a --delete \ --link-dest=/backups/daily.1 \ /source/data/ \ /backups/daily.0/

Spiegazione:

  • -a — modalità archivio (preserva permessi, proprietari, timestamp, symlink)
  • --delete — rimuove i file cancellati sulla sorgente
  • --link-dest — crea hard link ai file non modificati nello snapshot precedente
  • /source/data/ — directory che vuoi eseguire il backup
  • /backups/daily.0/ — snapshot di oggi

Script di rotazione per snapshot giornalieri

Crea uno script per:

  1. Ruotare i backup esistenti
  2. Creare un nuovo backup incrementale
  3. Mantenere N giorni (esempio: 7)

Crea 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/" # Ruota 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 # Prepara le directory di backup mkdir -p "$BACKUP_DIR/daily.0" if [ ! -d "$BACKUP_DIR/daily.1" ]; then mkdir -p "$BACKUP_DIR/daily.1" fi # Esegui backup incrementale 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

Puoi modificare le variabili in cima allo script per adattarlo alle tue esigenze. Cambia SOURCE in una directory specifica se non hai bisogno del backup completo del file system root, per esempio.

Escludere directory non necessarie

Crea un file di esclusione:

sudo nano /etc/backup-exclude.txt

Esclusioni tipiche:

  • /proc
  • /sys
  • /tmp
  • /run
  • /dev
  • /mnt
  • /media
  • /var/cache
  • /backups

Programmare i backup con cron

Modifica crontab:

sudo crontab -e

Aggiungi (backup alle 03:00 giornaliero):

0 3 * * * /usr/local/bin/backup_daily.sh >/var/log/backup.log 2>&1

Questo assicura snapshot automatici regolari.

Eseguire il backup su un server remoto (opzionale)

Se desideri un backup fuori sede, segui i passaggi successivi. Crea la cartella di destinazione sul server di destinazione:

mkdir -p /backups

Assicurati che le chiavi SSH siano configurate. Esegui il comando successivo 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 del dominio del tuo server remoto ed esegui il seguente comando per copiare la tua chiave SSH sul server remoto:

ssh-copy-id <YOUR_REMOTE_USER>@<YOUR_REMOTE_SERVER>

Decommenta le variabili REMOTE_USER, REMOTE_SERVER in cima al tuo backup_daily.sh, sostituisci <YOUR_REMOTE_USER> con il tuo nome utente sul server remoto, <YOUR_REMOTE_SERVER> con il nome del dominio del tuo server remoto e salva backup_daily.sh per abilitare il backup remoto.

Caricare i backup su INTROSERV CloudBox

INTROSERV fornisce uno storage online che ti consente di salvare automaticamente o manualmente copie sicure dei tuoi file e dati importanti su server remoti. Per utilizzarlo come tuo storage di 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.

Impostazioni del profilo CloudBox

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

Sezione chiave SSH pubblica di CloudBox

Decommenta le variabili REMOTE_USER, REMOTE_SERVER in cima al tuo backup_daily.sh, sostituisci <YOUR_REMOTE_USER> con il tuo nome utente sul server CloudBox, <YOUR_REMOTE_SERVER> con il nome del dominio del tuo server CloudBox e salva backup_daily.sh per abilitare il backup remoto.

Testare i backup

Prima di fare affidamento sul tuo sistema, testa i backup.

  1. Esegui lo script manualmente: sudo /usr/local/bin/backup_daily.sh
  2. Controlla le dimensioni: du -sh /backups/*. Ci deve essere solo un grande backup.
  3. Verifica l'integrità dei file: ls -l /backups/daily.0/etc/

Ripristinare i dati

Puoi ripristinare qualsiasi file individuale:

cp /backups/daily.2/etc/nginx/nginx.conf /etc/nginx/

Oppure ripristinare tutto:

sudo rsync -a /backups/daily.0/ /

Info

Avviso: Il ripristino delle directory di sistema sovrascrive i file correnti.

Considerazioni sulla sicurezza

  • Usa permessi rigorosi sulle directory di backup (chmod 700).
  • Se usi SSH, disabilita il login con password, usa solo chiavi.
  • Non memorizzare i backup sullo stesso disco del server se possibile.
  • Cifra i backup remoti usando LUKS o storage cifrato se necessario.

Monitoraggio e registrazione

La registrazione è già aggiunta in cron: /var/log/backup.log

Controlla regolarmente:

tail -f /var/log/backup.log

Conclusione

Usare rsync con cron offre:

  • Backup incrementali veloci
  • Uso efficiente del disco tramite hard link
  • Processo di ripristino semplice
  • Pianificazione completamente automatizzata

Questo metodo è affidabile e facile per amministratori principianti 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