Pertemuan 4

Backup dan Restore Data

Strategi backup efektif dan implementasi menggunakan tools Linux

Tujuan Pembelajaran

Setelah menyelesaikan praktikum ini, mahasiswa mampu:

  • Memahami konsep dan strategi backup data yang efektif
  • Menggunakan tools backup seperti tar, rsync, dan dd
  • Melakukan backup dan restore data dengan berbagai metode
  • Mengimplementasikan jadwal backup otomatis menggunakan cron

Teori Pendukung

Jenis-Jenis Backup
Full Backup

Menyalin semua data yang ditentukan

Keuntungan Restore cepat dan sederhana Kerugian Waktu lama, storage besar
Incremental Backup

Hanya menyalin data yang berubah sejak backup terakhir

Keuntungan Cepat, storage kecil Kerugian Restore kompleks
Differential Backup

Menyalin data yang berubah sejak full backup terakhir

Keuntungan Restore lebih sederhana Kerugian Storage lebih besar
Tools Backup Populer
Tool Fungsi Keunggulan Penggunaan
tar Mengarsipkan file dan direktori Standard, kompresi baik Full backup, archiving
rsync Sinkronisasi file dan backup incremental Efisien, hanya perubahan Incremental backup, sync
dd Backup pada level block device Bit-by-bit copy Disk cloning, MBR backup
dump/restore Filesystem backup Filesystem aware Ext filesystem backup
Strategi Backup 3-2-1
3 Salinan Data

Original + 2 backup copies

2 Media Berbeda

HDD, Tape, Cloud, etc.

1 Salinan Off-site

Lokasi fisik berbeda

Tools dan Perintah Backup

1. tar (Tape Archive)
tar [options] archive_name files/directories

# Opsi penting:
-c # Create archive
-x # Extract archive
-v # Verbose output
-f # File archive
-z # gzip compression
-j # bzip2 compression
-J # xz compression

# Contoh:
tar -czvf backup.tar.gz /home /etc
tar -xzvf backup.tar.gz
2. rsync (Remote Sync)
rsync [options] source destination

# Opsi penting:
-a # Archive mode (recursive, preserve permissions)
-v # Verbose
-z # Compress during transfer
--delete # Delete extraneous files
--progress # Show progress
--link-dest # Hardlink to previous backup

# Contoh:
rsync -avz /data/ backup-server:/backups/
rsync -av --link-dest=/backup/previous /data/ /backup/new/
3. dd (Disk Duplicate)
PERHATIAN: dd sangat powerful dan bisa menghapus data jika digunakan salah!
dd if=input_file of=output_file [options]

# Opsi penting:
bs=bytes # Block size
count=blocks # Number of blocks to copy
status=progress # Show progress

# Contoh:
dd if=/dev/sda of=/backup/disk.img bs=4M status=progress
dd if=/dev/sda of=/dev/sdb bs=4M status=progress # Disk cloning
4. Compression Tools
# gzip
gzip filename # Compress (menghasilkan .gz)
gunzip filename.gz # Decompress

# bzip2
bzip2 filename # Compress (menghasilkan .bz2)
bunzip2 filename.bz2 # Decompress

# xz
xz filename # Compress (menghasilkan .xz)
unxz filename.xz # Decompress

Langkah-langkah Praktikum

A. Persiapan Environment
# Login sebagai root
sudo -i

# Buat struktur direktori dan file contoh
mkdir -p /data/{website,db,config}
echo "Website content" > /data/website/index.html
echo "Database dump" > /data/db/database.sql
echo "Config files" > /data/config/app.conf

# Buat direktori untuk menyimpan backup
mkdir -p /backup/{full,incremental,disk}
B. Menggunakan tar untuk Full Backup
# Backup direktori /data dengan tar
tar -czvf /backup/full/data_backup_$(date +%Y%m%d).tar.gz /data/

# Verifikasi archive
tar -tzf /backup/full/data_backup_$(date +%Y%m%d).tar.gz

# Simulasi recovery dari tar backup
rm -rf /data/website/ # Hapus data asli (simulasi kehilangan)
tar -xzvf /backup/full/data_backup_$(date +%Y%m%d).tar.gz -C / # Restore
ls -la /data/website/ # Verifikasi restore
C. Menggunakan rsync untuk Incremental Backup
# Backup awal (mirror)
rsync -av --delete /data/ /backup/incremental/backup_current/

# Buat perubahan pada data
echo "New content" > /data/website/newpage.html
echo "Additional config" >> /data/config/app.conf

# Backup incremental dengan hardlinks
rsync -av --delete --link-dest=/backup/incremental/backup_current/ \
  /data/ /backup/incremental/backup_$(date +%Y%m%d_%H%M)/

# Bandingkan backup
ls -la /backup/incremental/backup_current/website/
ls -la /backup/incremental/backup_$(date +%Y%m%d_%H%M)/website/
du -sh /backup/incremental/* # Lihat penggunaan disk
D. Menggunakan dd untuk Disk Backup
HATI-HATI: Pastikan device yang benar untuk menghindari kehilangan data!
# Backup MBR (Master Boot Record)
dd if=/dev/sda of=/backup/disk/mbr_backup.img bs=512 count=1

# Backup partition table
fdisk -l /dev/sda > /backup/disk/partition_table.txt

# Simulasi backup filesystem (menggunakan file, bukan real disk)
dd if=/dev/zero of=/test_disk.img bs=1M count=10
mkfs.ext4 /test_disk.img
mkdir /mnt/test
mount /test_disk.img /mnt/test
echo "Test data" > /mnt/test/file.txt
umount /mnt/test

# Backup image
dd if=/test_disk.img of=/backup/disk/disk_backup.img status=progress
E. Backup Otomatis dengan Cron
# Buat script backup otomatis
cat > /usr/local/bin/auto_backup.sh << 'EOF'
#!/bin/bash
# Script backup otomatis
BACKUP_DIR="/backup/auto"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/backup.log"

echo "[$DATE] Starting backup..." >> $LOG_FILE

# Backup dengan tar
tar -czf $BACKUP_DIR/full_backup_$DATE.tar.gz /data/ 2>/dev/null

if [ $? -eq 0 ]; then
  echo "[$DATE] Backup completed successfully" >> $LOG_FILE
  # Hapus backup lama (lebih dari 7 hari)
  find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
else
  echo "[$DATE] Backup failed!" >> $LOG_FILE
fi
EOF

chmod +x /usr/local/bin/auto_backup.sh

# Jadwalkan backup harian dengan cron
crontab -l > /tmp/mycron
echo "0 2 * * * /usr/local/bin/auto_backup.sh" >> /tmp/mycron # Setiap jam 2 pagi
crontab /tmp/mycron

# Verifikasi jadwal
crontab -l
F. Verifikasi dan Testing Recovery
# Verifikasi integrity backup
tar -tzf /backup/full/data_backup_*.tar.gz > /dev/null && echo "Tar backup OK"
diff -r /data/ /backup/incremental/backup_current/ && echo "Rsync backup OK"

# Simulasi disaster recovery
rm -rf /data/* # Hapus semua data
tar -xzvf /backup/full/data_backup_*.tar.gz -C / # Restore dari backup
ls -la /data/ # Verifikasi restore

Strategi Backup Lanjutan

1. Backup Script untuk Server Web
cat > /usr/local/bin/web_backup.sh << 'EOF'
#!/bin/bash
# Backup script untuk web server
BACKUP_DIR="/backup/web"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=30

# Buat direktori backup jika belum ada
mkdir -p $BACKUP_DIR

# Backup database MySQL
mysqldump -u root -p'password' web_db > $BACKUP_DIR/web_db_$DATE.sql

# Backup website files
tar -czf $BACKUP_DIR/web_files_$DATE.tar.gz /var/www/html/

# Backup configuration
tar -czf $BACKUP_DIR/config_$DATE.tar.gz /etc/apache2/ /etc/mysql/

# Cleanup old backups
find $BACKUP_DIR -name "*.sql" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
EOF

chmod +x /usr/local/bin/web_backup.sh
2. Encrypted Backup dengan GPG
# Buat backup terenkripsi
tar -cz /data/ | gpg --encrypt --recipient admin@company.com > backup_$(date +%Y%m%d).tar.gz.gpg

# Decrypt backup
gpg --decrypt backup.tar.gz.gpg | tar -xz
3. Remote Backup dengan SSH
# Backup lokal dan transfer ke remote server
tar -cz /data/ | ssh user@backup-server "cat > /backup/backup_$(date +%Y%m%d).tar.gz"

# Atau menggunakan rsync over SSH
rsync -avz -e ssh /data/ user@backup-server:/backup/
4. Backup Monitoring dan Alerting
cat > /usr/local/bin/backup_monitor.sh << 'EOF'
#!/bin/bash
# Backup monitoring script
BACKUP_DIR="/backup"
ALERT_EMAIL="admin@company.com"

# Cek apakah backup terbaru ada
LATEST_BACKUP=$(find $BACKUP_DIR -name "*.tar.gz" -type f -mtime -1)

if [ -z "$LATEST_BACKUP" ]; then
  echo "ALERT: No backup found in last 24 hours" | mail -s "Backup Failure" $ALERT_EMAIL
fi

# Cek ukuran backup
BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
echo "Backup size: $BACKUP_SIZE"
EOF

Tugas dan Evaluasi

  1. Jelaskan perbedaan antara backup incremental dan differential!
  2. Kapan sebaiknya menggunakan tar dan kapan menggunakan rsync?
  3. Apa kelebihan dan kekurangan backup level block device (dd)?
  4. Bagaimana cara memverifikasi bahwa backup yang dibuat dapat direstore dengan benar?
  5. Buat skenario: Perusahaan membutuhkan backup harian data penting dengan retention 30 hari. Tulis script lengkapnya!

Backup Best Practices

Yang Harus Dilakukan
  • Test restore procedure secara berkala
  • Implementasi retention policy
  • Monitor backup success/failure
  • Enkripsi backup yang sensitif
  • Simpan backup di media berbeda
  • Dokumentasi prosedur backup/restore
Yang Harus Dihindari
  • Jangan simpan backup di server yang sama
  • Jangan gunakan media backup yang sama terus
  • Jangan lupa test restore procedure
  • Jangan backup file yang tidak perlu
  • Jangan gunakan compression lossy untuk database
  • Jangan abaikan backup logs
Retention Policy Example
Backup Type Frequency Retention Storage
Full Backup Weekly 4 weeks Local + Cloud
Incremental Backup Daily 7 days Local
Monthly Archive Monthly 1 year Cloud + Offline
Yearly Archive Yearly 7 years Offline Storage

Troubleshooting Backup Issues

Masalah Penyebab Solusi
Backup gagal - disk full Storage tidak cukup df -h untuk cek space
Hapus backup lama
Tambah storage
Permission denied User tidak punya akses sudo atau
User yang benar
Set permission yang tepat
Backup corrupt Media rusak, transfer error Verifikasi checksum
Gunakan media berbeda
Test restore berkala
Restore tidak bekerja Backup incomplete/wrong format Test backup setelah dibuat
Dokumentasi format backup
Simpan tools restore
Verification Commands
# Cek integrity tar archive
tar -tf backup.tar.gz > /dev/null && echo "OK" || echo "CORRUPT"

# Cek checksum
md5sum backup.tar.gz
sha256sum backup.tar.gz

# Cek disk space
df -h /backup
du -sh /backup/*