Linux Sistem Yönetimi: Rsync ile Veri Senkronizasyonu Rehberi

Rsync (Remote Sync), Linux ve Unix sistemlerde dosya ve dizinleri verimli bir şekilde senkronize etmek için kullanılan güçlü bir araçtır. Bu doküman, temel kullanımdan profesyonel yedekleme stratejilerine kadar rsync aracını kapsamlı bir şekilde ele almaktadır.

Rsync Nedir ve Neden Kullanılır?

Rsync, geleneksel araçların aksine “Delta Transfer” algoritmasını kullanır. Bu sayede sadece dosyaların değişen kısımlarını aktararak ağ ve disk kullanımını minimize eder.

Kurulum

Ubuntu/Debian: sudo apt update && sudo apt install rsync
RHEL/CentOS: sudo dnf install rsync

Kaynak Dizindeki “/” İşareti

RSYNC kullanımı

Bu ayrım rsync kullanımındaki en yaygın hata kaynağıdır:

  • rsync -av /dizin/ hedef/ -> Dizinin İÇERİĞİNİ kopyalar.
  • rsync -av /dizin hedef/ -> Dizinin KENDİSİNİ kopyalar.

Sık Kullanılan Bayraklar

-a (archive)          İzinleri, zaman damgalarını ve linkleri korur.
-v (verbose)         Ayrıntılı çıktı verir.
-z (compress)     Sıkıştırarak aktarır.
-P (progress)      İlerleme çubuğunu gösterir.
–delete                 Kaynakta olmayan dosyaları hedeften siler.
–dry-run (-n)     Simülasyon yapar, gerçek işlem yapmaz.

SSH ile Güvenli Uzak Senkronizasyon

rsync -avze ssh /yerel/dizin/ kullanici@sunucu:/uzak/dizin/

Sorun Giderme ve İpuçları

  • Bağlantı Kopması: ~/.ssh/config dosyasına “ServerAliveInterval 60” ekleyin.
  • Türkçe Karakter: –iconv=UTF-8,UTF-8 parametresini kullanın.

Gerçek Dünya Uygulaması: Otomatik Web Sunucusu Yedekleme

Bir sistem yöneticisi olarak, /var/www/html/ dizinindeki canlı web sitenizi her gece uzak bir yedekleme sunucusuna aktarmak istediğinizi düşünelim. Rsync’in Delta Transfer Algoritması sayesinde, sadece gün içinde değişen dosyalar aktarılacak, böylece her seferinde GB’larca veriyi tekrar göndermek zorunda kalmayacaksınız

Günlük Yedekleme Script’i Örneği

Aşağıdaki script, veriyi sıkıştırarak güvenli bir şekilde aktarır ve her işlem sonunda bir log dosyası tutar.


#!/bin/bash
# Değişken Tanımlamaları
KAYNAK='/var/www/html/'  # Sondaki / işareti içeriği kopyalar 
HEDEF='yedek_kullanicisi@192.168.10.200:/yedekler/web_yedegi/'
LOG='/var/log/rsync_yedek.log'

echo "=== Yedekleme Başladı: $(date) ===" >> $LOG

# Rsync Komutu Uygulaması 
rsync -avz --delete --progress \
-e "ssh -p 22" \
$KAYNAK $HEDEF >> $LOG 2>&1

echo "=== Yedekleme Tamamlandı: $(date) ===" >> $LOG

Kullanılan Parametrelerin Analizi

Bu örnekte kullandığımız bayrakların seçilme nedenleri şunlardır:

  • -a (Archive): Dosya izinlerini, sembolik linkleri ve zaman damgalarını korur; sunucu taşıma işlemleri için kritiktir.

  • -v (Verbose): Hangi dosyanın aktarıldığını adım adım log dosyasına yazmamızı sağlar

  • -z (Compress): Veriyi ağ üzerinden göndermeden önce sıkıştırır, bu da transfer süresini kısaltır.

  • --delete: Kaynak sunucuda sildiğiniz bir dosyanın yedek sunucusunda da silinmesini sağlayarak tam bir ayna (mirror) oluşturur.

     

Akıllı Depolama: Hard Link Snapshot Tekniği

Eğer disk alanınız kısıtlıysa ama son 30 günün yedeğine ayrı ayrı klasörlerde ulaşmak istiyorsanız, --link-dest parametresini kullanabilirsiniz.

Bu yöntemle:

  • Değişmeyen dosyalar için yeni disk alanı harcanmaz; sadece önceki yedek dosyasına bir hard link (bağlantı) oluşturulur.

  • Sadece değişen veya yeni eklenen dosyalar diskte gerçek yer kaplar.

  • Sonuç olarak, 30 günlük yedek tutsanız bile disk kullanımınız neredeyse tek bir tam yedek boyutunda kalır.

Kritik Hatırlatma: --delete seçeneğini otomasyona bağlamadan önce mutlaka --dry-run (-n) parametresi ile test edin. Yanlış bir dizin hedeflemesi, yedek sunucunuzdaki verilerin temizlenmesine yol açabilir.