💾 Soluții complete de backup automat pentru Linux

Protejează-ți datele cu strategii profesionale 3-2-1

📖 1. Introducere - De ce backup?

În 2025, datele sunt cel mai valoros activ al oricărei afaceri. Pierderea lor poate însemna falimentul. Iată câteva statistici șocante:

  • 60% dintre companiile care își pierd datele se închid în 6 luni
  • 30% dintre utilizatori nu fac niciodată backup la datele importante
  • Ransomware-ul a crescut cu 150% în ultimii 2 ani
  • Costul mediu al unui atac ransomware este de $1.85 milioane
⚠️ Avertisment: Dacă nu ai backup, ești la un pas distanță de dezastru. RAID nu este backup. Snapshot-uri nu sunt backup.

📐 2. Strategia 3-2-1 de backup

Strategia 3-2-1 este standardul de aur în industria backup-urilor:

  • 3 copii ale datelor tale (original + 2 backup-uri)
  • 2 medii de stocare diferite (ex: hard disk + cloud)
  • 1 copie offsite (în altă locație geografică)
💡 Implementare practică 3-2-1 pentru un server:
  • Copy 1: Datele originale pe server
  • Copy 2: Backup local pe hard disk extern sau NAS
  • Copy 3: Backup în cloud (AWS S3, Backblaze B2, Google Cloud Storage)

📁 3. Backup cu rsync

rsync este cel mai popular tool pentru backup incremental. Este rapid, eficient și disponibil pe orice sistem Linux.

Backup local cu rsync

# Backup simplu
rsync -av --delete /sursa/ /destinatie/backup/

# Backup cu excluderi
rsync -av --delete --exclude='*.log' --exclude='cache/' /var/www/ /backup/www/

# Backup cu timestamp
rsync -av /sursa/ /backup/$(date +%Y-%m-%d)/

# Backup peste rețea (SSH)
rsync -avz -e ssh /sursa/ user@backup-server:/backup/

Backup cu rotire (retention policy)

#!/bin/bash
# /usr/local/bin/backup-rotation.sh

SOURCE="/var/www"
BASE_DIR="/backup"
DAYS_TO_KEEP=7

# Crează backup cu data curentă
DATE=$(date +%Y-%m-%d)
rsync -av --delete "$SOURCE/" "$BASE_DIR/backup-$DATE/"

# Șterge backup-urile mai vechi de 7 zile
find "$BASE_DIR" -type d -name "backup-*" -mtime +$DAYS_TO_KEEP -exec rm -rf {} \;

Backup incremental cu rsync + hardlinks

#!/bin/bash
# Backup incremental similar cu Time Machine

BACKUP_DIR="/backup"
LATEST="$BACKUP_DIR/latest"

# Crează backup incremental folosind hardlink-uri
rsync -av --delete --link-dest="$LATEST" /sursa/ "$BACKUP_DIR/backup-$(date +%Y-%m-%d)/"

# Actualizează symlink-ul "latest"
rm -f "$LATEST"
ln -s "$BACKUP_DIR/backup-$(date +%Y-%m-%d)" "$LATEST"

🗜️ 4. Backup cu BorgBackup

BorgBackup este un tool modern de backup care oferă deduplicare, compresie și criptare. Este ideal pentru backup-uri mari și frecvente.

Instalare Borg

# Ubuntu/Debian
sudo apt install borgbackup -y

# RHEL/CentOS/AlmaLinux
sudo dnf install borgbackup -y

Inițializare repository și backup

# Inițializează repository (cu criptare)
borg init --encryption=repokey /backup/borg-repo

# Crează primul backup
borg create --stats --progress /backup/borg-repo::backup-{now:%Y-%m-%d} /var/www /etc /home

# Backup cu excluderi
borg create --exclude '*.log' --exclude '*.tmp' /backup/borg-repo::backup-{now:%Y-%m-%d} /sursa

# Listează backup-urile
borg list /backup/borg-repo

# Montează un backup pentru a vedea fișierele
mkdir /tmp/restore
borg mount /backup/borg-repo::backup-2025-04-01 /tmp/restore

Script automatizat Borg

#!/bin/bash
# /usr/local/bin/borg-backup.sh

REPOSITORY="/backup/borg-repo"
export BORG_PASSPHRASE="parola-ta-criptare"

# Backup cu rotire automată (păstrează ultimele 7 zile, 4 săptămâni, 6 luni)
borg create --stats --compression lz4 \
  $REPOSITORY::backup-{now:%Y-%m-%d_%H:%M:%S} \
  /var/www /etc /home /root

# Șterge backup-uri vechi conform politicii
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 $REPOSITORY

# Verifică integritatea repository-ului
borg check --verify-data $REPOSITORY
📊 Performanță Borg: Deduplicarea reduce spațiul necesar cu 70-90% pentru backup-uri multiple. Compresia lz4 este extrem de rapidă.

☁️ 5. Backup cu Duplicity

Duplicity folosește librsync pentru backup-uri incrementale criptate și suportă numeroși provideri cloud.

# Instalare
sudo apt install duplicity -y

# Backup la AWS S3
export AWS_ACCESS_KEY_ID="cheia"
export AWS_SECRET_ACCESS_KEY="secret"
duplicity /var/www s3://s3.amazonaws.com/bucket-name/backup

# Backup la Google Cloud Storage
duplicity /var/www gs://bucket-name/backup

# Backup la Backblaze B2
duplicity /var/www b2://account-id:bucket-name/backup

# Backup la server SFTP
duplicity /var/www scp://user@backup-server//backup

# Restaurare
duplicity restore s3://bucket-name/backup /restored-files

# Listează backup-uri
duplicity collection-status s3://bucket-name/backup

⚡ 6. Backup cu Restic

Restic este un tool modern scris în Go, rapid și cu suport multi-cloud.

# Instalare
sudo apt install restic -y

# Inițializare repository pe Backblaze B2
restic -r b2:bucket-name:backup init

# Backup
restic -r b2:bucket-name:backup backup /var/www

# Backup cu excluderi
restic -r b2:bucket-name:backup backup --exclude="*.log" /var/www

# Restaurare
restic -r b2:bucket-name:backup restore latest --target /restore

# Ștergere backup-uri vechi (păstrează ultimele 7)
restic -r b2:bucket-name:backup forget --keep-last 7 --prune

# Automatizare
#!/bin/bash
export RESTIC_REPOSITORY="b2:bucket-name:backup"
export RESTIC_PASSWORD="parola"
export B2_ACCOUNT_ID="id"
export B2_ACCOUNT_KEY="key"

restic backup /var/www /etc /home
restic forget --keep-daily 7 --keep-weekly 4 --prune

🗄️ 7. Backup baze de date

Backup MySQL/MariaDB

#!/bin/bash
# /usr/local/bin/backup-mysql.sh

BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y-%m-%d)

# Backup toate bazele de date
mysqldump --all-databases --single-transaction --routines --triggers > "$BACKUP_DIR/all-databases-$DATE.sql"

# Backup bază specifică
mysqldump --databases nume_baza > "$BACKUP_DIR/nume_baza-$DATE.sql"

# Comprimat
mysqldump --all-databases | gzip > "$BACKUP_DIR/all-databases-$DATE.sql.gz"

# Backup cu timestamp în nume
mysqldump --all-databases > "$BACKUP_DIR/backup-$(date +%Y%m%d_%H%M%S).sql"

# Șterge backup-uri mai vechi de 30 zile
find $BACKUP_DIR -name "*.sql*" -mtime +30 -delete

Backup PostgreSQL

#!/bin/bash
# Backup PostgreSQL

export PGPASSWORD="parola"
BACKUP_DIR="/backup/postgres"

# Backup toate bazele
pg_dumpall -U postgres > "$BACKUP_DIR/all-databases.sql"

# Backup bază specifică
pg_dump -U postgres nume_baza > "$BACKUP_DIR/nume_baza.sql"

# Backup comprimat
pg_dump -U postgres nume_baza | gzip > "$BACKUP_DIR/nume_baza.sql.gz"

# Format personalizat (permite restaurare paralelă)
pg_dump -Fc -U postgres nume_baza > "$BACKUP_DIR/nume_baza.dump"
💡 Best practice: Pentru baze de date mari, folosește mydumper (MySQL) sau pg_basebackup (PostgreSQL) pentru backup-uri mai rapide.

⏰ 8. Automatizare cu cron

# Editează crontab
crontab -e

# Exemple:
# Backup zilnic la 2 AM
0 2 * * * /usr/local/bin/backup-rsync.sh >> /var/log/backup.log 2>&1

# Backup MySQL la 3 AM
0 3 * * * /usr/local/bin/backup-mysql.sh

# Backup săptămânal complet Duminică la 4 AM
0 4 * * 0 /usr/local/bin/backup-complet.sh

# Verificare backup-uri la 9 AM
0 9 * * * /usr/local/bin/check-backups.sh

# Curățenie backup-uri vechi la 1 AM în fiecare zi de 1
0 1 1 * * /usr/local/bin/cleanup-backups.sh

📧 9. Monitorizare backup-uri

#!/bin/bash
# /usr/local/bin/check-backups.sh

BACKUP_LOG="/var/log/backup.log"
EMAIL="admin@exemplu.ro"

# Verifică dacă backup-ul de ieri a fost făcut
LAST_BACKUP=$(grep "Backup completed" "$BACKUP_LOG" | tail -1 | cut -d' ' -f1-3)
YESTERDAY=$(date --date="yesterday" +%Y-%m-%d)

if [[ $LAST_BACKUP == *"$YESTERDAY"* ]]; then
    echo "✅ Backup OK - Ultimul backup: $LAST_BACKUP"
else
    echo "❌ ALERTĂ - Backup-ul nu a rulat azi!" | mail -s "Backup Alert" $EMAIL
fi

# Verifică dimensiunea backup-ului
BACKUP_SIZE=$(du -sh /backup | cut -f1)
echo "Dimensiune backup: $BACKUP_SIZE"

# Verifică spațiul liber pe disc
DISK_USAGE=$(df -h /backup | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 85 ]; then
    echo "⚠️ Atenție: Backup disk is $DISK_USAGE% full!" | mail -s "Disk Space Alert" $EMAIL
fi

🔄 10. Testare recuperare

Un backup care nu poate fi restaurat este inutil. Testează-ți backup-urile periodic!

#!/bin/bash
# /usr/local/bin/test-restore.sh

RESTORE_DIR="/tmp/test-restore-$(date +%Y%m%d)"

# Montează backup Borg
borg mount /backup/borg-repo::latest "$RESTORE_DIR"

# Verifică câteva fișiere critice
FILES_TO_CHECK=(
    "/etc/passwd"
    "/etc/shadow"
    "/var/www/index.html"
)

for file in "${FILES_TO_CHECK[@]}"; do
    if [ -f "$RESTORE_DIR$file" ]; then
        echo "✅ $file found in backup"
    else
        echo "❌ $file MISSING in backup!"
    fi
done

# Verifică integritatea bazei de date restaurată
gunzip -c /backup/mysql/all-databases-*.sql.gz | head -100 | grep -q "CREATE DATABASE"
if [ $? -eq 0 ]; then
    echo "✅ MySQL backup appears valid"
else
    echo "❌ MySQL backup may be corrupted!"
fi

# Curățenie
borg umount "$RESTORE_DIR"
rm -rf "$RESTORE_DIR"
⚠️ Regulă de aur: Rulează un test de restaurare complet cel puțin o dată pe lună. Nu ai backup până nu ai testat restaurarea!

✅ Concluzie

Ai învățat cum să implementezi o strategie completă de backup pentru serverele tale:

  • ✅ Strategia 3-2-1 pentru siguranță maximă
  • ✅ rsync pentru backup-uri simple și rapide
  • ✅ BorgBackup pentru deduplicare și compresie
  • ✅ Duplicity/Restic pentru backup în cloud
  • ✅ Backup specific pentru baze de date
  • ✅ Automatizare cu cron și monitorizare
  • ✅ Testare periodică a restaurării
🎯 Recomandarea noastră pentru 2025:
  • Pentru servere mici: rsync + backup extern (hard disk)
  • Pentru servere medii: BorgBackup + Backblaze B2
  • Pentru enterprise: Restic + AWS S3 (cu versiuni) + backup local
📌 Ai nevoie de o soluție profesională de backup? ServiciiLinux oferă implementare și monitorizare backup pentru infrastructura ta.
📞 Solicită soluție backup → ← Înapoi la blog