#!/bin/bash
# Skrip ini membuat arsip kompresi (clone) dari seluruh sistem file VPS.

# --- KONFIGURASI ---
# Direktori tempat backup akan disimpan. Pastikan direktori ini ada dan memiliki ruang yang cukup!
BACKUP_DIR="/root/vps_backups"

# Nama file backup. Format: vps_full_backup_YYYYMMDD_HHMM.tar.gz
BACKUP_FILE="${BACKUP_DIR}/vps_full_backup_$(date +%Y%m%d_%H%M).tar.gz"

# Direktori yang HARUS DIKECUALIKAN. Ini adalah direktori sistem virtual/sementara
# yang tidak perlu di-backup dan dapat menyebabkan masalah jika diikutsertakan.
EXCLUDE_DIRS=(
    "/proc"
    "/sys"
    "/dev"
    "/run"
    "/tmp"
    "/mnt"
    "/media"
    "/lost+found"
)

# Tambahkan direktori backup ke daftar pengecualian agar skrip tidak mencoba
# mem-backup file backup itu sendiri secara rekursif.
EXCLUDE_DIRS+=("${BACKUP_DIR}")
# --------------------

echo "=================================================="
echo "Memulai Proses Backup Penuh Sistem VPS..."
echo "Direktori Tujuan: ${BACKUP_DIR}"
echo "Nama File Backup: ${BACKUP_FILE}"
echo "=================================================="

# Cek apakah direktori backup ada, jika tidak, buat
if [ ! -d "${BACKUP_DIR}" ]; then
    echo "Membuat direktori tujuan: ${BACKUP_DIR}"
    mkdir -p "${BACKUP_DIR}"
fi

# Bangun daftar argumen --exclude untuk perintah tar
EXCLUDE_ARGS=""
for dir in "${EXCLUDE_DIRS[@]}"; do
    EXCLUDE_ARGS+=" --exclude=${dir}"
done

# Perintah utama tar:
# -c: Create (buat arsip)
# -z: Compress (kompresi dengan gzip)
# -p: Preserve permissions (pertahankan hak akses)
# -f: File (nama file arsip)
# --one-file-system: Hanya proses file pada filesystem lokal (memastikan /proc, /sys dll terlewat)
# ${EXCLUDE_ARGS}: Daftar direktori yang dikecualikan
# /: Arsipkan dari root
echo "Membuat arsip. Mohon tunggu, proses ini mungkin memakan waktu lama..."

tar -czpf "${BACKUP_FILE}" --one-file-system ${EXCLUDE_ARGS} /

# Cek kode keluar tar
if [ $? -eq 0 ]; then
    SIZE_KB=$(du -sh "${BACKUP_FILE}" | awk '{print $1}')
    echo "=================================================="
    echo "✅ Backup Selesai dengan Sukses!"
    echo "File Backup Tersimpan: ${BACKUP_FILE}"
    echo "Ukuran File: ${SIZE_KB}"
    echo "=================================================="
else
    echo "=================================================="
    echo "❌ Backup Gagal. Silakan periksa pesan kesalahan di atas."
    echo "=================================================="
    exit 1
fi

echo "Sekarang, pindahkan file ${BACKUP_FILE} ini ke VPS baru Anda."
