📖 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
📐 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ă)
- 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
☁️ 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"
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"
✅ 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
- Pentru servere mici: rsync + backup extern (hard disk)
- Pentru servere medii: BorgBackup + Backblaze B2
- Pentru enterprise: Restic + AWS S3 (cu versiuni) + backup local