Restic ile Modern ve Güvenli Yedekleme Stratejisi: Kurulum, Şifreleme ve Otomasyon Rehberi
Restic kullanarak Linux sistemlerde uçtan uca şifrelenmiş, artımlı ve bulut entegreli yedekleme mimarisi kurma rehberi.
Caner Serbest
Sistem ve Altyapı
4 dk okuma
Restic ile Modern ve Güvenli Yedekleme Stratejisi: Kurulum, Şifreleme ve Otomasyon Rehberi
Veri kaybı, sistem yöneticilerinin korkulu rüyasıdır. Donanım arızaları, insan hataları, kötü amaçlı yazılımlar veya mantıksal veri bozulmaları her an kapıyı çalabilir. Klasik tar ve rsync kombinasyonları küçük ölçekte iş görse de; sürüm kontrolü, şifreleme, artımlı (incremental) yapı ve veri bütünlüğü doğrulaması gibi modern gereksinimler söz konusu olduğunda yetersiz kalır.
Bu yazıda, Go diliyle yazılmış, açık kaynaklı, hızlı, güvenli ve modern bir yedekleme aracı olan Restic ile uçtan uca güvenilir bir yedekleme stratejisinin nasıl kurulacağını ele alacağız.
Restic Neden Tercih Edilmeli?
Piyasada çok sayıda yedekleme aracı bulunuyor. Restic’i öne çıkaran temel özellikler şunlardır:
- Uçtan Uca Şifreleme (End-to-End Encryption): Verileriniz yerel depolama alanını terk etmeden önce AES-256 ve Poly1305 kullanılarak şifrelenir. Bulut depolama sağlayıcınız ele geçirilse bile verileriniz okunamaz.
- Deduplication (Tekilleştirme): Restic, verileri küçük parçalara (chunk) böler. Aynı veri blokları tekrar kaydedilmez; bu sayede depolama alanından ciddi tasarruf sağlanır.
- Artımlı (Incremental) Yedekleme: İlk yedeklemeden sonra sadece değişen veriler gönderilir, bu da ağ bant genişliği ve süre maliyetini minimuma indirir.
- Snapshot Mantığı: Her yedekleme bir zaman damgasıyla (snapshot) saklanır. İstediğiniz bir tarihteki dosya durumuna kolayca dönebilirsiniz.
- Çoklu Depolama Desteği: Yerel diskler, SFTP, AWS S3, MinIO, B2, Google Cloud Storage ve Rclone üzerinden neredeyse tüm bulut sağlayıcıları destekler.
1. Kurulum ve Ortam Hazırlığı
Restic, tek bir çalıştırılabilir (binary) dosyadan ibarettir. Bağımlılık derdi yoktur. Linux sunucunuza kurmak için resmi depoları kullanabilir veya doğrudan GitHub releases sayfasından indirebilirsiniz.
# Ubuntu / Debian sistemler için doğrudan paket yöneticisi ile kurulum
sudo apt update
sudo apt install restic -y
# Sürüm kontrolü
restic version
Yedekleme işlemlerini yaparken şifreleri sürekli girmemek için çevre değişkeni (environment variable) tanımlamak en pratik yöntemdir:
export RESTIC_REPOSITORY="/mnt/backup-drive/restic-repo"
export RESTIC_PASSWORD="guclu-ve-uzun-bir-parola"
Güvenlik Notu: Bu değişkenleri doğrudan bashrc dosyasına yazmak yerine, güvenli bir dosyada saklayıp sadece çalıştırma anında dahil etmek daha güvenlidir.
2. Depo (Repository) Oluşturma
Yedeklerin tutulacağı alanı başlatmak için init komutu kullanılır. Bu işlem depoyu şifreler ve gerekli yapılandırma dosyalarını oluşturur.
restic init
Eğer işlem başarılı olursa ekrana deponun kimlik numarası (ID) gelecektir. Bu aşamadan sonra deponuz dışarıdan gelecek yetkisiz erişimlere karşı tamamen korumaltadır.
3. İlk Yedeklemeyi Almak (Backup)
Kritik verilerinizin bulunduğu bir dizini (örneğin /var/www veya /etc) yedeklemek oldukça basittir:
restic backup /var/www /etc --tag "web-server"
Bu komut çalıştırıldığında Restic:
- Dosyaları tarar,
- Değişen blokları tespit eder,
- Şifreler ve depoya gönderir,
- İşlem sonunda toplam süreyi, eklenen veri boyutunu ve snapshot ID’sini ekrana yazdırır.
Yedekleri Listeleme
Alınan yedekleri ve detaylarını görmek için snapshots komutunu kullanabilirsiniz:
restic snapshots
Çıktı size hangi tarihte, hangi etiketle ve hangi yollardan yedek alındığını gösterecektir.
4. Dosya Geri Yükleme (Restore)
Felaket senaryosunda veya yanlışlıkla silinen bir dosyayı kurtarmak, yedek almaktan çok daha önemlidir. Restic ile geri yükleme işlemi esnektir.
Belirli bir snapshot’tan tüm içeriği geri yüklemek için:
restic restore <SNAPSHOT_ID> --target /tmp/restore-dir
Eğer sadece tek bir dosyayı geri almak istiyorsanız:
restic restore <SNAPSHOT_ID> --include /etc/nginx/nginx.conf --target /tmp/restore-dir
Snapshot’ı Sanal Dosya Sistemi Olarak Bağlama (Mount)
Yedeklerin içinde gezinmek, dosyaları incelemek istiyorsanız Restic deponuzu bir dizine FUSE kullanarak bağlayabilirsiniz:
mkdir /mnt/restic-browse
restic mount /mnt/restic-browse
Başka bir terminal açarak /mnt/restic-browse/snapshots/ altında geçmiş tüm zaman dilimlerine sanki o anki disk yapısıymış gibi erişebilir, dosyalarınızı kopyalayabilirsiniz. İşiniz bittiğinde fusermount -u /mnt/restic-browse komutuyla sökebilirsiniz.
5. Depo Bakımı ve Saklama Politikası (Retention Policy)
Sürekli artımlı yedek almak bir süre sonra deponun büyümesine neden olur. Hangi yedekleri saklayıp hangilerini sileceğinizi otomatize etmek için forget komutu kullanılır.
Örnek bir saklama politikası (Pruning):
- Son 7 günün günlük yedekleri,
- Son 4 haftanın haftalık yedekleri,
- Son 12 ayın aylık yedekleri saklansın.
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
--prune parametresi, silinen snapshot’lara ait artık kullanılmayan veri bloklarının (garbage collection) depodan fiziksel olarak temizlenmesini sağlar.
6. Otomasyon: Systemd Timer ve Script Entegrasyonu
Bu süreci manuel yapmaktan kurtulmak için bir Bash betiği yazıp bunu systemd timer veya cron ile otomatize etmeliyiz.
Örnek Yedekleme Betiği (/usr/local/bin/run-backup.sh)
#!/bin/bash
set -e
export RESTIC_REPOSITORY="/mnt/backup-drive/restic-repo"
export RESTIC_PASSWORD="guclu-ve-uzun-bir-parola"
LOG_FILE="/var/log/restic-backup.log"
echo "[$(date)] Yedekleme başladı..." >> "$LOG_FILE"
# Kritik dizinleri yedekle
restic backup /etc /var/www /home --tag "otomatik-yedek" >> "$LOG_FILE" 2>&1
# Eski yedekleri temizle
restic forget --keep-daily 7 --keep-weekly 4 --prune >> "$LOG_FILE" 2>&1
# Depo bütünlüğünü kontrol et
restic check >> "$LOG_FILE" 2>&1
echo "[$(date)] Yedekleme tamamlandı." >> "$LOG_FILE"
Betike çalıştırma izni verelim:
chmod +x /usr/local/bin/run-backup.sh
Systemd Service Dosyası (/etc/systemd/system/restic-backup.service)
[Unit]
Description=Restic Otomatik Yedekleme Servisi
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/run-backup.sh
Systemd Timer Dosyası (/etc/systemd/system/restic-backup.timer)
Her gece saat 03:00’te çalışması için:
[Unit]
Description=Restic Yedekleme Zamanlayıcısı
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
Servisi aktif hale getirmek için:
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
7. Felaket Senaryosu Testi (Disaster Recovery)
Alınan yedeklerin çalışıp çalışmadığını test etmeyen bir sistem yöneticisinin yedekleri aslında yok demektir. Düzenli aralıklarla (örneğin ayda bir) yedeklerinizin bütünlüğünü doğrulamalısınız:
restic check
Bu komut, depodaki tüm dosyaların hash değerlerini kontrol eder ve bozulmuş blok olup olmadığını raporlar. Ayrıca tamamen izole bir test ortamında geri yükleme provası yapmak, kriz anında sürprizlerle karşılaşmanızı önler.
Sonuç
Restic, sadeliği ve güçlü şifreleme altyapısıyla modern sistem yönetiminin vazgeçilmez araçlarından biridir. Doğru bir saklama politikası ve otomasyon ile desteklendiğinde, veri güvenliğinizi endüstri standartlarında bir seviyeye taşımanızı sağlar. Unutmayın; yedek almak bir lüks değil, operasyonel sürekliliğin temel şartıdır.
Bu yazı Gemini ile otomatik oluşturulmuştur.