Backup-strategier som Faktiskt Fungerar – Mer än 3-2-1
En praktisk guide till backup-strategier som håller i verkligheten. Automatisering, testning, offsite-lagring och katastrofåterställning.
Backuper som aldrig testats är värdelösa
Den hårda sanningen: en backup du aldrig har testat att återställa är inte en backup — det är ett antagande. Jag har sett organisationer förlora veckor av data för att de litade på backup-jobb som tyst hade slutat fungera månader tidigare.
En fungerande backup-strategi har tre delar: automatiserad säkerhetskopiering, offsite-lagring och regelbundna restore-tester. Missar du en av dem har du en sårbarhet.
3-2-1-regeln — och varför den inte räcker
3-2-1 är grunden: 3 kopior, 2 olika media, 1 offsite. Men den säger ingenting om hur ofta du backupar, hur snabbt du kan återställa eller om backupen faktiskt går att använda.
En modernare approach: 3-2-1-1-0.
- 3 kopior av data
- 2 olika lagringstyper
- 1 offsite
- 1 offline (air-gapped — immun mot ransomware)
- 0 verifierade fel i senaste restore-testet
Automatisera med BorgBackup
BorgBackup är det bästa verktyget för Linux-serverbackuper. Det deduplicerar data (identiska block sparas bara en gång), komprimerar och krypterar — allt automatiskt.
# Installera
sudo apt install borgbackup -y
# Initiera repository (lokalt eller remote)
borg init --encryption=repokey /backup/borg-repo
# Skapa backup
borg create --stats --progress \
/backup/borg-repo::srv-{now:%Y%m%d-%H%M%S} \
/var/www \
/etc \
/home \
--exclude '*.log' \
--exclude '*.tmp' \
--exclude 'node_modules' \
--exclude '__pycache__'
# Output:
# Original size: 12.5 GB
# Deduplicated size: 340 MB ← Bara ändrade data sparas!
# Rensa gamla arkiv
borg prune \
--keep-daily=7 \
--keep-weekly=4 \
--keep-monthly=6 \
/backup/borg-repoDatabasbackup — gör det rätt
Kopiera aldrig databasfiler direkt. Databaser som MySQL och PostgreSQL skriver kontinuerligt till disk — en filkopia kan ge en korrupt backup. Använd alltid databasverktygets egna dumpverktyg.
#!/bin/bash
# db-backup.sh — Daglig databasbackup
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/databases"
# MySQL/MariaDB
mysqldump --single-transaction --routines --triggers \
--all-databases | gzip > "$BACKUP_DIR/mysql_$TIMESTAMP.sql.gz"
# PostgreSQL
pg_dumpall | gzip > "$BACKUP_DIR/postgres_$TIMESTAMP.sql.gz"
# Kontrollera att backupen inte är tom
MIN_SIZE=1000 # Minst 1 KB
for file in "$BACKUP_DIR"/*_$TIMESTAMP.sql.gz; do
size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file")
if [ "$size" -lt "$MIN_SIZE" ]; then
echo "VARNING: $file är misstänkt liten ($size bytes)"
# Skicka alert
fi
done
# Rensa äldre än 30 dagar
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -deleteOffsite med rclone
rclone synkar dina backuper till S3-kompatibel lagring (Backblaze B2, Wasabi, AWS S3). Det är som rsync för molnlagring.
# Installera
curl https://rclone.org/install.sh | sudo bash
# Konfigurera (interaktivt)
rclone config
# Välj provider, ange API-nycklar
# Synka backuper till molnet
rclone sync /backup/borg-repo remote:server-backups/borg \
--transfers 4 \
--progress
# Schemalägg i crontab
# 03:30 varje dag — efter att lokala backuper kört kl 03:00
30 3 * * * rclone sync /backup/borg-repo remote:server-backups/borg --log-file /var/log/rclone.logAutomatisk restore-test
Backuper som aldrig testats ger en falsk trygghet. Automatisera restore-tester månatligen.
#!/bin/bash
# test-restore.sh — Månatlig verifiering
RESTORE_DIR="/tmp/restore-test"
mkdir -p "$RESTORE_DIR"
# Återställ senaste Borg-arkivet
LATEST=$(borg list /backup/borg-repo --last 1 --short)
borg extract /backup/borg-repo::$LATEST --target "$RESTORE_DIR"
# Verifiera filintegritet
ORIGINAL_COUNT=$(find /var/www -type f | wc -l)
RESTORED_COUNT=$(find "$RESTORE_DIR/var/www" -type f | wc -l)
if [ "$ORIGINAL_COUNT" -eq "$RESTORED_COUNT" ]; then
echo "OK: Filantal matchar ($ORIGINAL_COUNT filer)"
else
echo "FEL: Original=$ORIGINAL_COUNT, Restored=$RESTORED_COUNT"
# Skicka alert
fi
# Testa databasåterställning
gunzip -c /backup/databases/mysql_latest.sql.gz | \
mysql --defaults-file=/root/.my.cnf test_restore_db
TABLES=$(mysql test_restore_db -e "SHOW TABLES" | wc -l)
echo "Databasåterställning: $TABLES tabeller"
# Rensa
rm -rf "$RESTORE_DIR"
mysql -e "DROP DATABASE IF EXISTS test_restore_db"Sammanfattning
En backup-strategi som fungerar kräver automatisering, redundans och testning. Använd BorgBackup för effektiva lokala backuper, rclone för offsite-synk, och automatiserade restore-tester för verifiering. Det tar en eftermiddag att sätta upp — och kan spara veckor av arbete vid en incident.
Säkra din server ytterligare med vår guide om Linux serversäkerhet och skydda mot DDoS med vår DDoS-skyddsguide.