Skip to content
Bloga dön
Rehber Linux Otomatik Yedekleme Restic Cron Shell Backup Groq

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

  1. Linux dağıtımı (Ubuntu 22.04, Debian 11, CentOS 8 vb.)
  2. Root ya da sudo yetkisi
  3. İnternet bağlantısı (paket indirmek ve uzak depolama hedefi kullanmak için)
  4. Yedeklenecek veri dizinleri (örnek: /var/www, /etc, /home)
  5. 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: -r parametresindeki sftp: 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)

UygulamaAçıklama
Şifreleme Anahtarını Ayrı Tutunpassword.txt sadece root tarafından okunabilir olmalı.
Depolama Hedefini ÇeşitlendirinTek bir lokasyon yerine yerel + uzak (SFTP, S3 vb.) kombinasyonu riskleri azaltır.
Snapshot Tutma Stratejisirestic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 gibi bir politika, gereksiz veri birikimini önler.
Testli Geri YüklemeEn 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ı İzleyinLogrotate ve sistem monitörleri (örnek: systemd-journald) ile Cron çıktısını gözlemleyin.
İzin KontrolleriYedekleme 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 snapshots komutuyla erişim testi yapın.
  • Şifreleme hatası: RESTIC_PASSWORD doğru okunamıyorsa, dosya izinlerini (600) ve içeriğini kontrol edin.
  • Disk doluluğu: restic stats komutu depolama kullanımını gösterir; restic prune ile 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.