Un backup valido deve essere testato. Non limitarti a verificare che il file/directory esista.
1. Cosa fare backup
/etc(configurazioni)- Dati applicativi (es.
/var/www,/srv) - Dump database (prima del rsync)
- Script custom e cron
2. Struttura consigliata
/backup/
current/
logs/
snapshots/ # opzionale
/usr/local/sbin/backup-rsync.sh
3. Script Bash base
#!/usr/bin/env bash
set -euo pipefail
DEST="/backup/current"
LOG="/backup/logs/backup-$(date +%F).log"
SRC=("/etc" "/var/www")
EXCLUDES=("/var/www/cache" "/var/www/tmp")
mkdir -p "$DEST" "$(dirname "$LOG")"
RSYNC_OPTS=(-aHAX --delete --numeric-ids)
for e in "${EXCLUDES[@]}"; do
RSYNC_OPTS+=(--exclude "$e")
done
{
echo "== Backup avvio $(date) =="
for s in "${SRC[@]}"; do
rsync "${RSYNC_OPTS[@]}" "$s" "$DEST/"
done
echo "== Backup fine $(date) =="
} | tee -a "$LOG"
Rendi eseguibile:
chmod +x /usr/local/sbin/backup-rsync.sh
4. Test manuale prima del cron
/usr/local/sbin/backup-rsync.sh
ls -lh /backup/logs
du -sh /backup/current
5. Pianificazione con cron (Slackware: rc.crond)
Assicurati che il servizio cron sia attivo:
chmod +x /etc/rc.d/rc.crond
/etc/rc.d/rc.crond start
Aggiungi il job (come root):
crontab -e
# Backup ogni notte alle 02:30
30 2 * * * /usr/local/sbin/backup-rsync.sh
6. Retention e rotazione (semplice)
Per non riempire il disco, elimina log vecchi e valuta snapshot separati.
find /backup/logs -type f -name 'backup-*.log' -mtime +30 -delete
Se vuoi versioning reale, usa snapshot con hardlink (
cp -al) o filesystem con snapshot nativi (es. btrfs/zfs se presenti nel tuo setup).7. Test restore (fondamentale)
mkdir -p /tmp/restore-test
rsync -a /backup/current/etc/ /tmp/restore-test/etc/
ls -l /tmp/restore-test/etc | head
Per dati critici, prova un ripristino su macchina di test.
8. Best practice
- Backup su disco separato o host remoto
- Usa
screen/tmuxper backup manuali lunghi via SSH - Tieni log leggibili e controllali periodicamente
- Non fare backup di cache, socket, pseudo-filesystem (
/proc,/sys,/dev)
Checklist rapida
[ ] Script rsync creato e testato
[ ] rc.crond abilitato e avviato
[ ] Cron job configurato
[ ] Exclude definiti
[ ] Log e retention configurati
[ ] Test restore eseguito