Hızlı tek seferlik bir kopyadan büyük her iş için rsync, dosyayı şu anda öbür makinede istiyorsanız scp kullanın. Temel fark: scp her seferinde dosyanın tamamını yeniden akıtır ve kopan bağlantıya dair hiçbir şey hatırlamaz; rsync kaynakla hedefi karşılaştırır, yalnızca değişen blokları aktarır ve yarıda kesilen kopyayı kaldığı yerden sürdürür. Kararsız bir hat üzerindeki büyük yedeklemede bu, iki dakika ile baştan başlama arasındaki farktır. İkisi de fiilen her Linux dağıtımında OpenSSH ile gelir; yani bu bir kurulum değil, alışkanlık seçimidir — ve alışkanlığın varsayılanı rsync olmalı. Aşağıda: dürüst bir karşılaştırma tablosu, gerçek hız farkları, scp’nin yapamadığı sürdürme numarası ve scp’nin hâlâ doğru cevap olduğu durumlar.
rsync ile scp arasındaki fark nedir?
scp tek iş yapar: SSH kanalı aç, baytları akıt, kapat. Çalıştırmalar arasında durumu yoktur; transfer %90’da ölürse sıfırdan başlarsınız.
rsync, taşıma olarak SSH’ı kullanan bir senkronizasyon aracıdır. Göndermeden önce hedef dosyanın sağlama toplamı listesini çıkarır (rolling-checksum delta algoritması) ve yalnızca farklı olan blokları iletir. Aynı komutu iki kez çalıştırın, ikinci geçiş neredeyse hiçbir şey taşımaz. Bu, rsync’i iki dizini eşit tutmanın da doğal aracı yapar — zamanlayın, her çalıştırma yalnızca deltaları kopyalar.
Pratikteki sonuçları:
- Kopmalar: rsync sürdürür; scp dosyayı baştan başlatır.
- İkinci kopyalar: rsync yalnızca değişeni gönderir; scp her şeyi yeniden gönderir.
- Silme: rsync
--deleteile silmeleri de yansıtır; scp yapamaz. - Filtreleme: rsync’te
--excludedesenleri var; scp işaret ettiğiniz her şeyi kopyalar. - Prova çalıştırması: rsync
--dry-runile ne yapacağını gösterir; scp hiçbir şey sunmaz.
rsync, scp’den daha hızlı mı?
Hızlı bir hat üzerinden tek büyük dosyanın ilk kopyasında yakındırlar — ikisi de SSH’ı doyurur ve sağlama toplamı geçişi küçük bir ek yük getirir. Fark üç yerde açılır:
- Toplu küçük dosyalar. rsync dizin gezinmelerini hattara koyar ve tek bağlantıyı yeniden kullanabilir; eski scp kurulumları dosya başına iş açıyordu. Binlerce küçük dosya (bir
node_modules, bir WordPress kurulumu) rsync ile bariz biçimde daha çabuk biter. - Yeniden çalıştırmalar. 50 MB’ı değişmiş 4 GB’lık bir dosyada rsync kabaca 50 MB taşır; scp yine 4 GB taşır.
- Sıkıştırma.
-zaktarım sırasında sıkıştırır; yavaş WAN hatlarında işe yarar.
İkisini de kendiniz zamanlayabilirsiniz — komutlar şekil olarak aynı:
# aynı dosya, aynı sunucu, ikisi de SSH üzerinden
time scp bigfile.tar.gz user@server:/tmp/
time rsync -avh --progress bigfile.tar.gz user@server:/tmp/
# ikisini de yeniden çalıştırın: scp yeniden kopyalar, rsync doğrular ve ~hiçbir şey göndermez
time scp bigfile.tar.gz user@server:/tmp/
time rsync -avh --progress bigfile.tar.gz user@server:/tmp/ Gününüzü sunucularda geçiriyorsanız aktarım hızı, bir kez ölçmeye değer şeylerden biridir — tıpkı meşgul host’larda ss‘in netstat‘ı geçmesi gibi (bkz. ss vs netstat: hangi Linux port komutu).
scp kesilen transferi sürdürebilir mi?
Hayır. scp’nin sürdürme yeteneği yoktur; bağlantı 1 GB’ın 900 MB’ında düşerse baştan başlarsınız. Her rsync-vs-scp tartışmasında en çok alıntılanan sebep budur ve gerçektir.
rsync’in tüm tasarımı, transferin bazen kesileceğini varsayar. Kanonik sürdürme buyruğu:
rsync -avh --partial --append-verify --progress bigfile.tar.gz user@server:/srv/backup/ --partialyarım yazılan dosyayı silmek yerine saklar.--append-verifyekleyerek sürdürür, sonra eklenen bölgeyi sağlama toplamıyla doğrular — bozuk bir yarım dosyaya karşı güvenlidir; eski çıplak--appendöyle değildi.--progressnereden devam ettiğinizi gösterir.
Bir yeniden deneme döngüsüne sarılırsa, düşmanca bir bağlantıda bile kur-unut yedek olur:
until rsync -avh --partial --append-verify --progress
./bigfile.tar.gz user@server:/srv/backup/; do
sleep 5
done scp’yi rsync yerine ne zaman kullanmalısınız?
scp, bir avuç durumda hâlâ doğru araçtır:
- Küçük tek dosya, tek sefer.
scp app.conf user@host:/etc/myapp/yazmak herhangi bir rsync çağrısından kısadır ve sürdürülecek bir şey yoktur. - rsync karşı uçta yok. rsync, ikili dosyasının iki uçta da olmasını ister. Pek çok minimal container ve cihaz, scp’nin SFTP sunucusunu taşır ama rsync’i taşımaz.
- Bir rsync sunucusunun açık olmasını istemiyorsunuz. Nadir, ama bazı ortamlar rsync daemon’unu özellikle kilitler.
Bilmeye değer bir incelik: OpenSSH projesi scp’nin özgün protokolünü yıllar önce kullanımdan kaldırdı ve modern scp aslında altta SFTP konuşur. Bu, bir yol kaçışı (path-escaping) tuhaflığını düzeltti ama burada önemli olan iki sınırlamayı değiştirmedi — sürdürme yok, delta aktarımı yok. Protokol değişikliği, scp’yi rsync yapmaz.
Ayrıca ilgili: sorunuz gerçekten “rsync vs cp” ise cevap bunun aynasıdır — cp, scp’nin yalnızca-yerel karşılığıdır (sürdürme yok, delta yok, flag eklemeden öznitelik yok), rsync ise hem yerelde hem uzakta çalışır. Yerel tek seferlik işler için cp gayet yeter.
Hangi rsync flag’leri en çok önemli?
Çoğu insanın yalnızca tek satıra ihtiyacı olur:
rsync -avh --partial --progress src/ user@server:/srv/dest/ | Flag | Ne yapar |
|---|---|
-a (archive) | Özyinelemeli + izinleri, zamanları, grubu, symlink’leri, aygıtları korur |
-v (verbose) | Neyi aktardığını listeler |
-h (human) | İnsan okur boyutlar |
--partial | Yarım aktarılan dosyaları saklar, böylece yeniden çalıştırma sürdürür |
--progress | Dosya başına ilerleme — scp’nin hiç sahip olmadığı şey |
-z | Aktarım sırasında sıkıştırır (hızlı LAN’da yavaş CPU: atlayın) |
--delete | Silmeleri de yansıtır — tehlikeli, her zaman dry run ile eşleştirin |
--dry-run (-n) | Ne olacağını gösterir, hiçbir şeyi değiştirmez |
Benimsenmeye değer iki alışkanlık. Birincisi, --delete içeren her şeyi önce dry-run edin:
rsync -avh --delete --dry-run src/ user@server:/srv/dest/ # gözden geçir
rsync -avh --delete src/ user@server:/srv/dest/ # sonra uygula İkincisi, sondaki eğik çizgiye dikkat — /srv/src, dizinin kendisini hedefe kopyalar; /srv/src/ ise içeriğini. Bu, herkesi bir kez düşürür; öbür formu kastettiğinizde rsync sizi “no bytes transferred” uyarısıyla bile haberdar eder.
Günlük ya da haftalık senkron için rsync’i bir systemd timer’a bırakın, yalnızca deltaları kopyalasın — zamanlamanın journalctl tarafı journalctl cheat sheet‘te.
Rsync vs scp: hüküm
| scp | rsync | |
|---|---|---|
| OpenSSH ile gelir | Evet | Evet (iki uç gerekli) |
| Kesilen transferi sürdürme | Hayır | Evet (--partial) |
| Yeniden çalıştırmada delta aktarımı | Hayır | Evet |
| İzin/symlink koruma | Kısmen | Tam (-a) |
| Exclude desenleri | Hayır | --exclude |
| Dry run | Hayır | --dry-run |
| Silmeleri yansıtma | Hayır | --delete |
| En iyi olduğu iş | Hızlı tek seferlik kopyalar | Yedekler, senkronlar, büyük ağaçlar |
Yedekler, büyük ağaçlar, kopabilen bir hattın ötesindeki her şey ve bir kezden fazla çalıştıracağınız her şey için varsayılan rsync olsun. Komut, düşünceyi kısalttığında scp. Tek bir flag alacaksanız --partial alın — gelecekteki her kopan bağlantıyı, yeniden başlangıçtan bir duraklamaya çevirir.
— mrsaynothing
Get the next one by email
One email per post. No spam, no algorithms.
what is this?GGUF Modelleri Nasıl Çalıştırılır: Ollama, llama.cpp
Yazıları beğendiniz mi? Ben geçim için böyle inşa ederim. beni işe al