TL;DR
| Konu | 2019 | 2026 |
|---|---|---|
| Sürüm | rsync 3.1.x | rsync 3.4.1 (Protocol 32) |
| Sıkıştırma | gzip (-z) | zstd (--compress-choice=zstd) |
| Checksum | MD4/MD5 | XXH3, XXH64, SHA256 |
| Güvenlik | Daemon yaygın | SSH zorunlu, 6 CVE yamalandı |
| İlerleme | Dosya bazlı (-P) | Toplam ilerleme (--info=progress2) |
| Bulut | Yok | rclone (70+ backend) |
| Çift yönlü | Yok | Mutagen, Syncthing 2.0 |
Bu yazının ilk versiyonu 2019 yılında yayınlanmıştı. O tarihten bu yana rsync’in kendisi, çevresindeki güvenlik gereksinimleri, otomasyon yaklaşımları ve tamamlayıcı araçlar ciddi bir evrim geçirdi. Bu güncelleme ile rsync’in temellerini koruyan ancak modern geliştirme iş akışlarına uyum sağlayan yeni yapısını ele alacağım.
rsync Temelleri
rsync, uzak ya da lokal olarak dosya transferi işlemlerini gerçekleştiren ve delta transfer algoritması sayesinde yalnızca değişen baytları ileten bir senkronizasyon aracıdır. Dosyaların tamamını tekrar yazmak yerine farkların uygulanması üzerine çalışmakta, bu da özellikle büyük dosya setlerinde belirgin performans artışı sağlamaktadır.
En temel kullanımı:
rsync [kaynak-dosya-ya-da-klasör] [hedef-dosya-ya-da-klasör]
Birden fazla dosyayı hedef bir dizine iletmek için dosyalar sırasıyla hedef öncesinde belirtilir:
rsync -R [kaynak-dosya-1] [kaynak-dosya-2] [hedef-klasör]
Temel Parametreler
| Parametre | Açıklama | Örnek |
|---|---|---|
-a | Arşiv modu (sembolik linkler, izinler, zaman damgaları) | rsync -a src/ dest/ |
-v | Ayrıntılı çıktı | rsync -av src/ dest/ |
-z | Sıkıştırma (gzip) | rsync -avz src/ dest/ |
-r | Özyinelemeli dizin senkronizasyonu | rsync -r src/ dest/ |
-P | İlerleme + kısmi transfer (--progress --partial) | rsync -avP src/ dest/ |
-e | Uzak kabuk belirt | rsync -avz -e ssh src/ user@host:/dest/ |
-n | Kuru çalıştırma (dry-run) | rsync -avn --delete src/ dest/ |
--delete | Kaynakta olmayan dosyaları hedeften sil | rsync -av --delete src/ dest/ |
--exclude | Belirli dosya/dizinleri hariç tut | rsync -av --exclude='*.log' src/ dest/ |
--include | Belirli dosya/dizinleri dahil et | rsync -av --include='*.php' src/ dest/ |
Lokal ve Uzak Senkronizasyon
Kaynak dizinin sonundaki slash (/) karakteri davranışı belirlemekte. /kaynak/ ifadesi dizin içeriğini aktarırken, /kaynak ifadesi dizinin kendisini hedef içine alt dizin olarak eklemektedir.
Lokal senkronizasyon:
rsync -arv /kaynak/ /hedef
Pull (uzak sunucudan lokale):
rsync -ahivz kullanici@sunucu:/kaynak/ /lokal-hedef
Push (lokalden uzak sunucuya):
rsync -ahivz /lokal-kaynak/ kullanici@sunucu:/hedef
rsync, SSH üzerinden çalışırken varsayılan olarak port 22’yi kullanır. Farklı bir port için -e "ssh -p 2222" parametresi belirtilmelidir.
Güvenlik ve Protokol Değişiklikleri
2019’dan bu yana rsync ekosistemindeki en kritik gelişme, güvenlik alanında yaşandı. Ocak 2025’te Google Cloud Vulnerability Research ekibi ve Aleksei Gorban tarafından keşfedilen 6 güvenlik açığı, rsync’in tarihindeki en kapsamlı güvenlik güncellemesini zorunlu kıldı1.
Ocak 2025 CVE’leri
| CVE | CVSS | Açıklama |
|---|---|---|
| CVE-2024-12084 | 9.8 (Kritik) | Checksum işlemede heap buffer overflow. Anonim istemcilerle uzaktan kod çalıştırma (RCE) |
| CVE-2024-12085 | 7.5 (Yüksek) | Başlatılmamış yığın bellek sızıntısı. ASLR’yi atlama |
| CVE-2024-12086 | 6.1 (Orta) | Kötü niyetli sunucu, istemci dosyalarını okuyabilme |
| CVE-2024-12087 | 6.5 (Orta) | Sembolik link ile dizin aşma (path traversal) |
| CVE-2024-12088 | 6.5 (Orta) | --safe-links korumasını atlama |
| CVE-2024-12747 | 5.6 (Orta) | Symlink yarış durumu (race condition) |
CVE-2024-12084, rsync 3.2.7’den (Ekim 2022) bu yana mevcut olan bir açıktır. Checksum uzunluğu (s2length) kontrolündeki eksiklik nedeniyle, saldırganın kontrol ettiği değerlerle 48 baytlık sınır dışı yazma işlemi gerçekleştirilebilmekte. CVE-2024-12085 ile birleştirildiğinde, salt okunur (read-only) modüllerde bile anonim uzaktan kod çalıştırma sağlanabilmekte2.
Shodan taramalarında internet üzerinde açık olan yaklaşık 660.000 rsync sunucusu (port 873) tespit edilmiştir3. Bu durum, rsync daemon kullanımının ne denli riskli olduğunu açıkça ortaya koymakta.
Protokol Değişikliği
rsync 3.4.0 ile protokol sürümü 30’dan 32’ye yükseltilmiştir. Bu sayede yöneticiler, karşı taraftaki sunucunun yamalı olup olmadığını protokol sürümünden doğrulayabilmekte:
rsync --version | head -1
# rsync version 3.4.1 protocol version 32
SSH Zorunluluğu
2019’da rsync daemon (port 873) üzerinden doğrudan bağlantı hala yaygın bir pratikti. 2026 itibarıyla bu yaklaşım terk edilmiş durumda:
# 2019: Daemon kullanımı yaygındı
rsync rsync://sunucu/modul/ /hedef/
# 2026: SSH üzerinden rsync standart
rsync -avz -e ssh kaynak/ kullanici@sunucu:/hedef/
Daemon kullanımı zorunluysa, VPN veya şifreli tünel içinde ve hosts allow kısıtlamasıyla çalıştırılmalıdır. SSH anahtarı olarak ed25519 algoritması tercih edilmelidir:
ssh-keygen -t ed25519 -C "rsync-otomasyon"
Modern Flag’ler ve Performans
rsync 3.2.0 (Haziran 2020) ve sonrasında eklenen özellikler, performans ve kullanım deneyimini belirgin şekilde iyileştirmekte.
Zstandard (zstd) Sıkıştırma
Klasik gzip (-z) yerine zstd sıkıştırma, hem daha hızlı hem de daha verimli sonuç sunmakta. rsync 3.2.0 ile eklenen bu özellik, otomatik müzakere (negotiation) ile her iki tarafın desteklediği en iyi algoritmayı seçmekte4:
# zstd sıkıştırma ile transfer
rsync -avz --compress-choice=zstd kaynak/ kullanici@sunucu:/hedef/
# Kısa form
rsync -avz --zc=zstd kaynak/ kullanici@sunucu:/hedef/
RSYNC_COMPRESS_LIST ortam değişkeni ile müzakere sırasını özelleştirebilirsiniz.
XXHash Checksum
MD4 ve MD5 yerine, modern işlemcilerdeki SIMD komut setlerinden yararlanan XXH3 ve XXH64 checksum algoritmaları eklenmiştir. Büyük dosya setlerinde doğruluk kontrolü artık eskisi kadar yavaş değil4:
# XXH3 checksum ile doğrulama
rsync -avz --checksum-choice=xxh3 kaynak/ hedef/
# Kısa form
rsync -avz --cc=xxh3 kaynak/ hedef/
Mevcut checksum algoritmaları: xxh128, xxh3, xxh64, md5, md4, sha1, none.
Toplam İlerleme Göstergesi
Dosya bazlı ilerleme yerine, toplam transfer ilerlemesini yüzde olarak gösteren --info=progress2:
rsync -avz --info=progress2 kaynak/ kullanici@sunucu:/hedef/
Diğer Modern Flag’ler
| Flag | Sürüm | Açıklama |
|---|---|---|
--mkpath | 3.2.3 | Hedef dizin yolunu otomatik oluştur |
--stop-after=N | 3.2.3 | N saniye sonra transferi durdur |
--stop-at=TIME | 3.2.3 | Belirtilen zamanda transferi durdur |
--inplace | Mevcut (3.3.0’da --sparse ile düzeltildi) | Geçici dosya yerine doğrudan üzerine yaz |
--fsync | 3.2.4 | Her dosya yazımında fsync çağır |
--copy-devices | 3.2.4 | Cihaz dosyalarını kopyala |
--inplace parametresi, devasa dosyalarda (veritabanı dump’ları, VM imajları) disk alanından tasarruf sağlamakta. Ancak transfer yarıda kalırsa dosya bozulabilir; bu nedenle kritik veriler için --backup ile birlikte kullanılması önerilmekte:
# Büyük dosya transferi (disk tasarruflu ama riskli)
rsync -avz --inplace --backup --backup-dir=/yedek buyuk-dosya.img kullanici@sunucu:/hedef/
AI/ML İş Akışlarında rsync
Yapay zeka ve makine öğrenmesi projelerinin yaygınlaşmasıyla birlikte rsync, sadece geleneksel dosya taşıma aracı olmaktan çıkıp AI pipeline’larının bir parçası haline geldi.
GPU Cluster Veri Senkronizasyonu
Geçici GPU kiralama hizmetleri (Lambda Labs, RunPod, Vast.ai) ile çalışırken rsync, kodun ve veri setlerinin GPU makinelerine aktarılmasında temel araç konumunda. Tipik bir iş akışı5:
# 1. Kodu GPU makinesine gönder
rsync -avz --exclude='.venv' --exclude='node_modules' \
kod/ kullanici@gpu-host:~/kod/
# 2. Eğitim verisini senkronize et
rsync -avz --info=progress2 --compress-choice=zstd \
veri/ kullanici@gpu-host:~/veri/
# 3. Eğitimi çalıştır (GPU üzerinde)
ssh kullanici@gpu-host "cd ~/kod && python train.py"
# 4. Sonuçları geri al
rsync -avz kullanici@gpu-host:~/veri/sonuclar/ sonuclar/
rsync’in delta transfer özelliği burada kritik avantaj sağlamakta: kod değişikliği sonrası yeniden senkronizasyonda yalnızca değişen dosyalar transfer edilmekte. Yüz megabayttan birkaç gigabayta kadar veri setlerinde bu yaklaşım verimli çalışmakta. Petabayt ölçeğinde ise Lustre, BeeGFS veya Alluxio gibi dağıtık dosya sistemleri tercih edilmekte.
rsync ve rclone: Hangi Durumda Hangisi?
| Senaryo | rsync | rclone |
|---|---|---|
| Sunucu-sunucu (SSH) | Uygun | Desteklemez |
| Delta transfer (bayt seviyesi) | Uygun | Desteklemez |
| S3, Azure, GCS | Desteklemez | Uygun (70+ backend) |
| Çok iş parçacıklı transfer | Tek iş parçacığı | Uygun (4x daha hızlı)6 |
| Unix izinleri koruma | Uygun | Desteklemez |
| Büyük veri setini buluttan indirme | Yavaş (tek iş parçacığı) | Uygun |
Bulut depolamadan (S3, GCS) GPU instance’larına veri çekmek için rclone, lokal makine ile GPU instance’ı arasında SSH üzerinden senkronizasyon için rsync tercih edilmelidir.
LLM ile Otomasyon
Karmaşık --exclude kurallarını elle yazmak yerine, LLM’lere dizin yapısını verip uygun rsync komutunun oluşturulması artık yaygın bir pratik:
# Örnek: LLM'in oluşturduğu güvenli exclude listesi
rsync -avz --compress-choice=zstd \
--exclude='.git' \
--exclude='node_modules' \
--exclude='__pycache__' \
--exclude='.venv' \
--exclude='*.pyc' \
--exclude='.env' \
--info=progress2 \
proje/ kullanici@sunucu:/hedef/
Ancak dikkat edilmesi gereken kritik nokta: --delete flag’ini içeren komutlarda, AI tarafından üretilen betiklerde bu flag bazen beklenmedik sonuçlara yol açabilmekte. Bu nedenle --delete kullanılmadan önce mutlaka --dry-run ile kontrol edilmelidir.
Modern Alternatifler ve Tamamlayıcılar
rsync yetersiz kaldığı veya farklı bir ihtiyacın ortaya çıktığı durumlarda, 2026 itibarıyla şu araçlar rsync’i tamamlamakta veya belirli senaryolarda yerini almakta.
rclone
rclone, “bulut dünyasının rsync’i” olarak konumlanan ve 70’ten fazla bulut sağlayıcısı ile çalışan bir dosya senkronizasyon aracıdır7. En güncel sürümü v1.73.0 (Ocak 2026) ile aktif geliştirmeye devam etmekte.
# S3'ten lokale senkronize et
rclone sync s3:bucket/veri/ /lokal/veri/
# Çok iş parçacıklı transfer
rclone copy --multi-thread-streams=16 kaynak/ hedef/
# Bulut depolamayı dosya sistemi olarak bağla
rclone mount s3:bucket/ /mnt/s3/
Jeff Geerling’in 2025 karşılaştırmasında, 10 Gbps ağ üzerinde yaklaşık 60 GiB veri transferinde rclone, rsync’e göre 4 kat daha hızlı sonuç vermiştir (2 dakika 15 saniye / 8 dakika 17 saniye). Bu fark, rclone’un çok iş parçacıklı transfer yapısından kaynaklanmakta6.
Ancak rclone, Unix izinlerini/özniteliklerini koruyamamakta ve dosya içi delta transfer yapamamakta. Dosya/nesne seviyesinde çalışmakta.
Syncthing 2.0
Syncthing, merkezi sunucu gerektirmeyen, eşler arası (peer-to-peer) sürekli dosya senkronizasyonu aracıdır. Ağustos 2025’te yayınlanan 2.0 sürümü önemli değişiklikler içermekte8:
- LevelDB yerine SQLite veritabanı (daha az bozulma riski)
- Çoklu bağlantı desteği (indeks meta verileri ve veri alışverişi için ayrı kanallar)
- UDP port eşleme ile QUIC desteği (güvenlik duvarı geçişi)
- Silinen öğelerin 15 ay sonra otomatik unutulması
Syncthing, kişisel çoklu cihaz senkronizasyonu ve ekip içi dosya paylaşımı için uygundur. Sunucu yönetimi gerektirmemesi avantaj sağlamakta.
Mutagen
Mutagen, uzak geliştirme ortamlarında (VS Code Remote, Docker container) çift yönlü (bidirectional) ve gerçek zamanlı dosya senkronizasyonu sağlamakta9. rsync’in aksine dosya sistemi değişikliklerini izleyerek (watch) anında senkronizasyon gerçekleştirmekte. Dört senkronizasyon modu sunmakta; varsayılan olan two-way-safe, çakışma durumunda veri kaybını önlemekte.
ZFS/Btrfs Send/Receive
Veri tutarlılığının kritik olduğu senaryolarda, dosya sistemi seviyesinde anlık görüntü (snapshot) tabanlı replikasyon, rsync’e göre daha güvenilir bir alternatif sunmakta10:
- Blok seviyesinde artımlı replikasyon (dosya sistemi taraması gerektirmez)
- Yeniden adlandırma ve taşıma işlemleri çok düşük maliyetli
- Her iki tarafın da aynı dosya sistemini (ZFS-ZFS veya Btrfs-Btrfs) kullanması zorunlu
NAS-NAS replikasyonu ve yedekleme sistemlerinde (TrueNAS vb.) ZFS replikasyonu, rsync’e göre tercih edilmekte.
Unison
Unison, OCaml dilinde yazılmış çift yönlü dosya senkronizasyon aracıdır11. rsync’ten temel farkı, çakışan güncellemeleri sessizce üzerine yazmak yerine kullanıcıya göstermesidir. Sürüm 2.52.0’dan itibaren tel protokolü (wire protocol) OCaml sürümüne bağımlı değildir; bu sayede eski versiyon uyumsuzluğu sorunu çözülmüştür.
Karşılaştırma Tablosu
| Araç | Transfer | Yön | Bulut | İzinler | Gerçek Zamanlı |
|---|---|---|---|---|---|
| rsync | Delta (bayt) | Tek yön | Yok | Korunur | Yok |
| rclone | Tam dosya | Tek yön | 70+ backend | Korunmaz | Yok |
| Syncthing | Blok tabanlı | Çift yön | Yok | Korunur | Evet |
| Mutagen | Delta | Çift yön | Yok | Korunur | Evet |
| Unison | Delta | Çift yön | Yok | Korunur | Yok |
| ZFS Send | Blok (snapshot) | Tek yön | Yok | Korunur | Yok |
2026 Best Practice Rehberi
Modern rsync Komutu
rsync -avz \
--info=progress2 \
--compress-choice=zstd \
--exclude='.git' \
--exclude='node_modules' \
--exclude='*.log' \
-e "ssh -o VisualHostKey=no" \
/kaynak/ kullanici@sunucu:/hedef/
Güvenlik Kontrol Listesi
# 1. Sürüm kontrolü (3.4.1+ olmalı, Protocol 32)
rsync --version | head -1
# 2. --delete kullanmadan önce mutlaka dry-run
rsync -avz --delete --dry-run kaynak/ hedef/
# 3. Ardından gerçek transfer
rsync -avz --delete kaynak/ hedef/
Senaryo Bazlı Komutlar
Sunucu yedeklemesi (SSH üzerinden, zstd, ilerleme):
rsync -avz --info=progress2 --compress-choice=zstd \
-e ssh kullanici@sunucu:/var/www/ /yedek/www/
Büyük dosya transferi (inplace, bant genişliği limiti):
rsync -avz --inplace --bwlimit=10M --partial --info=progress2 \
buyuk-dosya.tar.gz kullanici@sunucu:/hedef/
Mirror (silme dahil, önce dry-run):
rsync -avz --delete --dry-run kaynak/ kullanici@sunucu:/hedef/
# Çıktıyı kontrol ettikten sonra:
rsync -avz --delete --info=progress2 kaynak/ kullanici@sunucu:/hedef/
Zaman sınırlı transfer (3.2.3+):
rsync -avz --stop-after=3600 kaynak/ hedef/ # 1 saat sonra dur
Hedef dizin otomatik oluşturma (3.2.3+):
rsync -avz --mkpath kaynak/ hedef/olmayan/dizin/yolu/
Sonuç
rsync, delta transfer algoritması ve Unix felsefesine uygun tasarımıyla onlarca yıldır dosya senkronizasyonunun temel aracı konumunda. Ancak 2025 başında keşfedilen kritik güvenlik açıkları, bu aracın güncel tutulmasının ne denli önemli olduğunu bir kez daha göstermiştir. rsync 3.4.1 veya üzeri sürüm, SSH üzerinden kullanım ve zstd sıkıştırma, 2026 itibarıyla asgari gereksinimler olarak değerlendirilmekte.
Ekosistem genelinde ise rsync artık yalnız değil. Bulut senkronizasyonunda rclone, çift yönlü gerçek zamanlı senkronizasyonda Syncthing ve Mutagen, dosya sistemi seviyesinde replikasyonda ZFS send/receive gibi araçlar, farklı ihtiyaçlara yanıt vermekte. Modern geliştirme iş akışlarında bu araçların birbirini tamamlayıcı biçimde kullanılması en sağlıklı yaklaşım olarak öne çıkmakta.
rsync ile sıkça birlikte kullanılan diğer komut satırı araçları hakkında wget, grep ve crontab yazılarına da göz atabilirsiniz.
Footnotes
- CERT/CC VU#952657 - rsync Security Advisory ↩
- NVD - CVE-2024-12084 ↩
- Sysdig - Detecting and Mitigating CVE-2024-12084 ↩
- rsync 3.2.0 NEWS ↩ ↩2
- Managing GPU Rentals with rsync - Milos Svana ↩
- 4x Faster Network File Sync: rclone vs rsync - Jeff Geerling ↩ ↩2
- rclone - rsync for cloud storage ↩
- Syncthing 2.0 Release ↩
- Mutagen - Real-time file synchronization ↩
- ZFS Replication vs rsync - TrueNAS Forums ↩
- Unison File Synchronizer ↩