Linux Üzerinde Otomatik Yedekleme Rehberi: Restic ve Cron ile Güvenli ve Sürekli Yedekleme
Linux sunucularda Restic ve Cron kullanarak veri kaybını önleyecek, şifreli ve otomatik yedekleme sistemini adım adım kurun.
Caner Serbest
Sistem ve Altyapı
5 dk okuma
Linux Üzerinde Otomatik Yedekleme Rehberi
Giriş
Veri kaybı, özellikle üretim ortamlarında kritik bir sorundur. Donanım arızaları, insan hataları ya da kötü amaçlı saldırılar sonucu silinen dosyalar, geri getirilemez bir durum oluşturabilir. Otomatik yedekleme, bu riskleri en aza indirmek için en temel uygulamalardan biridir. Bu makalede, Linux tabanlı bir sunucuda Restic ve Cron kullanarak şifreli, sürüm kontrollü ve zamanlanmış yedekleme sistemini nasıl kuracağınızı detaylarıyla anlatacağız.
Neden Restic?
Restic, modern bir komut satırı yedekleme aracıdır ve aşağıdaki özellikleri sayesinde tercih edilir:
- Şifreleme: Tüm veriler AES‑256 ile yerel olarak şifrelenir; sunucu tarafında şifreleme anahtarı tutulmaz.
- Deduplication: Aynı veri blokları bir kez saklanır, bu da depolama maliyetini azaltır.
- Desteklenen Depolama Hedefleri: Yerel dosya sistemi, SFTP, Amazon S3, Backblaze B2, Google Cloud Storage vb.
- Konsolide Restorasyon: Tek bir komutla belirli bir tarihe ait dosyaları geri yükleyebilirsiniz.
Bu özellikler, özellikle otomasyon ve güvenlik odaklı bir yedekleme senaryosunda Restic’i ideal kılar.
Gereksinimler
- Linux dağıtımı (Ubuntu 22.04, Debian 11, CentOS 8 vb.)
- Root ya da sudo yetkisi
- İnternet bağlantısı (paket indirmek ve uzak depolama hedefi kullanmak için)
- Yedeklenecek veri dizinleri (örnek:
/var/www,/etc,/home) - Depolama hedefi – bu rehberde yerel bir dizin ve SFTP üzerinden bir uzak sunucu örneği kullanılacak.
1. Restic Kurulumu
Ubuntu / Debian
sudo apt update && sudo apt install -y restic
CentOS / RHEL (yum/dnf)
sudo dnf install -y epel-release
sudo dnf install -y restic
Kurulumdan sonra restic version komutu ile kurulumun başarılı olduğunu doğrulayabilirsiniz.
2. Şifreleme Anahtarını Hazırlama
Restic, RESTIC_PASSWORD ortam değişkeni ya da bir password‑file aracılığıyla şifreleme anahtarını alır. Çevresel değişkeni kullanmak basit fakat güvenli bir yol değildir; bu yüzden bir dosya oluşturup sadece root’un okuyabileceği izinlerle koruyacağız.
sudo mkdir -p /etc/restic
sudo nano /etc/restic/password.txt
password.txt dosyasına güçlü bir parola girin (örnek: K0tR$3cR3t!2026). Dosyayı kaydedip kapattıktan sonra:
sudo chmod 600 /etc/restic/password.txt
3. Depolama Hedefini Tanımlama
3.1 Yerel Depolama
Yerel bir dizin oluşturup Restic repository’si olarak başlatacağız.
sudo mkdir -p /srv/restic-repo
sudo chown $USER:$USER /srv/restic-repo
export RESTIC_PASSWORD=$(cat /etc/restic/password.txt)
restic -r /srv/restic-repo init
3.2 SFTP Üzerinden Uzak Depolama
Uzak bir sunucuya (örnek: backup.example.com) SFTP üzerinden bağlanmak için SSH anahtarları oluşturup sunucuya ekleyin.
ssh-keygen -t ed25519 -f ~/.ssh/restic_key -N ""
ssh-copy-id -i ~/.ssh/restic_key.pub [email protected]
Uzak repository’i başlatmak:
export RESTIC_PASSWORD=$(cat /etc/restic/password.txt)
restic -r sftp:[email protected]:/remote/restic-repo init
Not:
-rparametresindekisftp:kısmı Restic’e SFTP protokolünü kullanacağını bildirir.
4. Yedekleme Scripti Oluşturma
Yedekleme işlemlerini bir Bash scriptine koyarak hem okunabilirliği artıracağız hem de Cron’a kolayca ekleyebileceğiz.
#!/bin/bash
# -------------------------------------------------
# Restic Otomatik Yedekleme Scripti
# Yazar: Caner Serbest
# -------------------------------------------------
# Ortam değişkenlerini yükle
export RESTIC_PASSWORD=$(cat /etc/restic/password.txt)
export RESTIC_REPOSITORY="/srv/restic-repo" # Yerel repo; uzak repo ise sftp:... şeklinde
# Yedeklenecek dizinler (space‑separated)
BACKUP_PATHS="/etc /home /var/www"
# Log dosyası
LOGFILE="/var/log/restic-backup.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') - Yedekleme başlatıldı" >> "$LOGFILE"
# Restic backup komutu
restic backup $BACKUP_PATHS \
--exclude="/home/*/.cache" \
--exclude="/var/www/tmp" \
--tag "daily" \
>> "$LOGFILE" 2>&1
# Snapshot temizleme (keep last 7 daily, 4 weekly, 12 monthly)
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune \
>> "$LOGFILE" 2>&1
# Sonuç kontrolü
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Yedekleme başarılı" >> "$LOGFILE"
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Yedekleme HATASI" >> "$LOGFILE"
fi
Scripti /usr/local/bin/restic-backup.sh konumuna kaydedip çalıştırılabilir hâle getirin:
sudo mv restic-backup.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/restic-backup.sh
5. Cron ile Zamanlama
Günlük yedekleme ihtiyacını karşılamak için Cron tablosuna bir satır ekleyeceğiz. Bu örnek, her gün 02:30’da scripti çalıştırır.
sudo crontab -e
Aşağıdaki satırı ekleyin:
30 2 * * * /usr/local/bin/restic-backup.sh
Cron, root kullanıcısı altında çalıştığı için RESTIC_PASSWORD dosyasına erişim problemi yaşamaz.
6. Yedekleme Geri Yükleme (Restore)
Belirli bir tarih ya da etiket üzerinden dosya geri yüklemek oldukça basittir.
6.1 Snapshot Listesi
export RESTIC_PASSWORD=$(cat /etc/restic/password.txt)
restic snapshots
6.2 Belirli Bir Snapshot’ı Geri Yükleme
# Son snapshot’ı /tmp/restore dizinine geri yükle
export RESTIC_PASSWORD=$(cat /etc/restic/password.txt)
restic restore latest --target /tmp/restore
6.3 Tek Dosya Geri Yükleme
restic restore latest --target /tmp/restore --include /etc/ssh/sshd_config
7. Log ve İzleme
Yedekleme süreci /var/log/restic-backup.log dosyasına yazılır. Bu logları logrotate ile periyodik olarak döndürmek, disk dolmasını önler.
sudo nano /etc/logrotate.d/restic
Aşağıdaki içeriği ekleyin:
/var/log/restic-backup.log {
weekly
rotate 4
compress
missingok
notifempty
create 640 root adm
}
Bu ayar, log dosyasını haftalık olarak döndürür, 4 haftaya kadar tutar ve sıkıştırır.
8. En İyi Uygulamalar (Best Practices)
| Uygulama | Açıklama |
|---|---|
| Şifreleme Anahtarını Ayrı Tutun | password.txt sadece root tarafından okunabilir olmalı. |
| Depolama Hedefini Çeşitlendirin | Tek bir lokasyon yerine yerel + uzak (SFTP, S3 vb.) kombinasyonu riskleri azaltır. |
| Snapshot Tutma Stratejisi | restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 gibi bir politika, gereksiz veri birikimini önler. |
| Testli Geri Yükleme | En az ayda bir geri yükleme testi yapın; yedekleme başarılı olsa bile geri getirme süreci hatalı olabilir. |
| Cron Çıktılarını İzleyin | Logrotate ve sistem monitörleri (örnek: systemd-journald) ile Cron çıktısını gözlemleyin. |
| İzin Kontrolleri | Yedekleme sırasında dosya izinleri korunur; --chmod gibi opsiyonlarla gerektiğinde yeniden ayarlama yapılabilir. |
9. Sorun Giderme
- “repository does not exist” hatası: Repository yolu (
RESTIC_REPOSITORY) doğru mu?restic snapshotskomutuyla erişim testi yapın. - Şifreleme hatası:
RESTIC_PASSWORDdoğru okunamıyorsa, dosya izinlerini (600) ve içeriğini kontrol edin. - Disk doluluğu:
restic statskomutu depolama kullanımını gösterir;restic pruneile gereksiz blokları temizleyebilirsiniz. - Ağ bağlantısı hatası (SFTP): SSH anahtarının sunucuya ekli olduğundan ve
ssh -i ~/.ssh/restic_key [email protected]komutunun sorunsuz çalıştığından emin olun.
10. Sonuç
Bu rehberde, Linux ortamında Restic ve Cron kullanarak tam otomatik, şifreli ve sürüm kontrollü bir yedekleme altyapısı kurduk. Kurulum, yapılandırma, zamanlama, geri yükleme ve bakım adımlarını uyguladığınız sürece veri kaybı riskiniz büyük ölçüde azalacaktır. Unutmayın, yedekleme sadece bir kez kurulan bir şey değildir; periyodik test, izleme ve politikaların güncellenmesi uzun vadeli başarının anahtarıdır.
“Veri kaybı bir felaket değildir, yedekleme yapmamak felakettir.” – Caner Serbest
Bu yazı Groq ile otomatik oluşturulmuştur.