Automatizzare i backup settimanali: un tutorial semplice su Cron Job di Linux

Automatizza i backup settimanali Linux con cron, rsync e tar, inclusi script sicuri, esempi di pianificazione e controlli di ripristino.

Automazione dei Backup Settimanali: Una Semplice Guida ai Cron Job Linux

I backup regolari sono un pilastro fondamentale di una solida amministrazione di sistema. Perdere dati critici a causa di guasti hardware, cancellazioni accidentali o incidenti di sicurezza può essere catastrofico. Fortunatamente, Linux fornisce potenti strumenti integrati che, combinati con lo scheduler cron, consentono di eseguire backup settimanali affidabili e automatizzati. Questa guida ti accompagnerà nella configurazione di un sistema di backup settimanale semplice ma efficace utilizzando utility Linux standard come rsync e tar, gestite da cron.

Questa guida è pensata per utenti Linux e amministratori di sistema che desiderano implementare una strategia di backup automatizzata. Alla fine di questo tutorial, capirai come configurare un cron job per eseguire backup settimanali di directory importanti, garantendo che i tuoi dati siano al sicuro e recuperabili.

Perché Automatizzare i Backup?

I backup manuali sono soggetti a errori umani e spesso vengono trascurati, specialmente con orari impegnativi. L'automazione elimina questi rischi. Configurare un cron job per i backup settimanali garantisce:

  • Coerenza: I backup vengono eseguiti puntualmente senza falli.
  • Affidabilità: Riduce la possibilità di sviste o dimenticanze umane.
  • Efficienza: Libera tempo prezioso per gli amministratori di sistema che possono concentrarsi su altre attività critiche.
  • Recupero Dati: Fornisce una rete di sicurezza contro la perdita di dati, cruciale per la continuità aziendale.

Scegliere il Tuo Strumento di Backup: rsync vs. tar

Linux offre diversi strumenti per creare backup. In questo tutorial, ci concentreremo su due utility comuni e potenti: rsync e tar.

rsync

rsync (sincronizzazione remota) è eccellente per i backup incrementali. Sincronizza in modo efficiente file e directory tra due posizioni, trasferendo solo le differenze. Questo lo rende molto veloce ed efficiente in termini di larghezza di banda, specialmente per i backup successivi.

Vantaggi Principali:

  • Efficiente per backup incrementali.
  • Può sincronizzare posizioni locali e remote.
  • Preserva permessi dei file, proprietà e timestamp.

tar

tar (tape archive) è un'utility di archiviazione versatile. Può raggruppare più file e directory in un unico file di archivio, spesso compresso. È ideale per creare snapshot completi dei tuoi dati.

Vantaggi Principali:

  • Crea un unico file di archivio, semplificando la gestione.
  • Supporta vari metodi di compressione (gzip, bzip2, xz).
  • Preserva permessi dei file e proprietà.

Configurare la Directory di Backup

Prima di iniziare, è buona pratica designare una directory specifica per archiviare i tuoi backup. Questo mantiene i backup organizzati e separati dai dati live. Per questo esempio, supponiamo che i tuoi backup siano archiviati in /mnt/backups/weekly/.

Assicurati che questa directory esista e abbia i permessi appropriati. Potresti anche considerare di archiviare i backup su un disco fisico separato o su un NAS (Network-Attached Storage) per un migliore disaster recovery.

sudo mkdir -p /mnt/backups/weekly
sudo chown root:root /mnt/backups/weekly # O un utente backup dedicato

Metodo 1: Utilizzare rsync per Backup Incrementali

rsync è fantastico per eseguire il backup di directory in cui desideri mantenere una cronologia delle modifiche in modo efficiente. Per un backup settimanale, potresti eseguire il backup dell'intera directory e rsync gestirà solo i file modificati.

Supponiamo di voler eseguire il backup della directory /home e della directory /etc.

1. Creare uno Script di Backup:

Prima, crea uno script shell che esegua il backup. Questo rende la gestione del comando più semplice e consente logiche più complesse se necessario.

Crea un file chiamato weekly_backup.sh in una posizione come /usr/local/bin/.

#!/bin/bash

# --- Configurazione ---
SOURCE_DIRS=("/home" "/etc")
BACKUP_DEST="/mnt/backups/weekly/"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="${BACKUP_DEST}backup_log_${TIMESTAMP}.log"

# --- Assicurarsi che la destinazione esista ---
mkdir -p "${BACKUP_DEST}"

# --- Inizio Registrazione ---
echo "Avvio backup settimanale alle $(date)" >> "${LOG_FILE}"

# --- Eseguire rsync ---
for dir in "${SOURCE_DIRS[@]}"; do
    echo "Backup di ${dir} in corso..." >> "${LOG_FILE}"
    rsync -a --delete "${dir}/" "${BACKUP_DEST}${dir##*/}/" >> "${LOG_FILE}" 2>&1
    if [ $? -eq 0 ]; then
        echo "Backup di ${dir} completato con successo." >> "${LOG_FILE}"
    else
        echo "Errore durante il backup di ${dir}." >> "${LOG_FILE}"
    fi
done

# --- Fine Registrazione ---
echo "Backup settimanale terminato alle $(date)" >> "${LOG_FILE}"
echo "---------------------------" >> "${LOG_FILE}"

exit 0

Spiegazione delle opzioni di rsync:

  • -a (modalità archivio): Una combinazione di -rlptgoD, significa che copia ricorsivamente, preserva i collegamenti simbolici, i permessi, i tempi di modifica, il gruppo, il proprietario e i file/speciali di dispositivo.
  • --delete: Elimina i file estranei dalla directory di destinazione. Questo garantisce che il backup sia una copia esatta della sorgente. Usare con cautela!
  • ${dir}/: La barra finale sulla directory sorgente è importante. Significa "copia il contenuto di questa directory". Senza di essa, copierebbe la directory stessa nella destinazione.
  • ${BACKUP_DEST}${dir##*/}/: Questo costruisce il percorso di destinazione. ${dir##*/} estrae il nome base della directory (es., 'home' da '/home').

Rendere eseguibile lo script:

sudo chmod +x /usr/local/bin/weekly_backup.sh

2. Testare lo Script:

Esegui lo script manualmente per assicurarti che funzioni come previsto.

sudo /usr/local/bin/weekly_backup.sh

Controlla la directory /mnt/backups/weekly/ e il file di log per verificare il backup.

Metodo 2: Utilizzare tar per Backup di Archivi Completi

tar è ideale per creare un unico archivio compresso dei tuoi dati. Questo metodo è utile se desideri uno snapshot completo in un momento specifico.

Supponiamo di voler eseguire il backup di /home e /etc in un tarball compresso.

1. Creare uno Script di Backup:

Crea un file chiamato weekly_tar_backup.sh in /usr/local/bin/.

#!/bin/bash

# --- Configurazione ---
SOURCE_DIRS=("/home" "/etc")
BACKUP_DEST="/mnt/backups/weekly/"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_NAME="backup_${TIMESTAMP}.tar.gz"
LOG_FILE="${BACKUP_DEST}backup_log_${TIMESTAMP}.log"

# --- Assicurarsi che la destinazione esista ---
mkdir -p "${BACKUP_DEST}"

# --- Inizio Registrazione ---
echo "Avvio backup settimanale tar alle $(date)" >> "${LOG_FILE}"

# --- Eseguire backup tar ---
echo "Creazione archivio ${ARCHIVE_NAME} in corso..." >> "${LOG_FILE}"
tar -czvf "${BACKUP_DEST}${ARCHIVE_NAME}" "${SOURCE_DIRS[@]}" >> "${LOG_FILE}" 2>&1

if [ $? -eq 0 ]; then
    echo "Archivio ${ARCHIVE_NAME} creato con successo." >> "${LOG_FILE}"
else
    echo "Errore durante la creazione dell'archivio ${ARCHIVE_NAME}." >> "${LOG_FILE}"
fi

# --- Fine Registrazione ---
echo "Backup settimanale tar terminato alle $(date)" >> "${LOG_FILE}"
echo "---------------------------" >> "${LOG_FILE}"

exit 0

Spiegazione delle opzioni di tar:

  • -c: Crea un nuovo archivio.
  • -z: Filtra l'archivio attraverso gzip per la compressione.
  • -v: Elenca in modo verboso i file elaborati.
  • -f: Usa il file o dispositivo di archivio NOMEFILE.
  • "${SOURCE_DIRS[@]}": Passa ogni directory sorgente come argomento separato.

Rendi eseguibile lo script e testalo:

sudo chmod +x /usr/local/bin/weekly_tar_backup.sh
sudo /usr/local/bin/weekly_tar_backup.sh

Pianificare il Cron Job Settimanale

Una volta che lo script funziona manualmente, pianificalo con cron. Usa il crontab di root se lo script necessita di permessi per leggere directory di sistema come /etc o le home directory di altri utenti.

sudo crontab -e

Aggiungi una di queste voci:

# Esegui il backup rsync ogni domenica alle 2:00 AM
0 2 * * 0 /usr/local/bin/weekly_backup.sh

# Oppure esegui il backup tar ogni domenica alle 2:30 AM
30 2 * * 0 /usr/local/bin/weekly_tar_backup.sh

Cron utilizza questo ordine di campi:

minuto ora giorno-del-mese mese giorno-della-settimana comando

Sulla maggior parte dei sistemi Linux, 0 o 7 indica domenica nel campo giorno-della-settimana. Se la tua distribuzione documenta solo una forma, segui il suo manuale cron.

Verificare e Mantenere i Tuoi Backup

Un backup è utile solo se puoi ripristinarlo. Aggiungi questi controlli alla tua routine:

  • Esamina l'ultimo file di log dopo la prima esecuzione pianificata.
  • Ripristina un piccolo file di test in una directory temporanea.
  • Assicurati che la destinazione del backup abbia spazio libero sufficiente.
  • Conserva almeno una copia al di fuori del server originale quando i dati sono importanti.
  • Evita di eseguire il backup della directory di backup all'interno di se stessa.

Per rsync, ricorda che --delete rispecchia le eliminazioni dalla sorgente. Questo è utile per una copia corrente pulita, ma non sostituisce i backup con versioni. Per tar, aggiungi in seguito una politica di conservazione in modo che gli archivi vecchi non riempiano il disco.

Conclusione

Inizia con il cron job settimanale più semplice che puoi testare e ripristinare. Usa rsync quando desideri un mirror corrente, usa tar quando desideri snapshot datati e conferma sempre il backup ripristinando un file di esempio prima di fare affidamento su di esso.