Rsync, tam yeniden iletim olmadan yalnızca kısmen değişen büyük bir dosyayı güncelleyebilir mi?


15

Ağ üzerinden aktarım için uzun zaman alan çok büyük bir dosya görüntü dosyasına (sadece birkaç piksel farkı) küçük bir değişiklik yapıyorum.

Rsync'in dosyadaki farkı tespit etmesinin ve ağ üzerinden yalnızca küçük farkı göndermesinin bir yolu var mı?


3
Bir ağ üzerinden kopyalama yaparken, rsyncvarsayılan olarak bu şekilde davranır. Küçük değişiklik dosyada küçük bir değişiklik olduğu ve dosya neredeyse aynı sürümlerde bağlantının her iki tarafında zaten mevcut olduğu sürece, aktarılan veriler toplam dosya boyutundan çok daha az olmalıdır. Kılavuz sayfasındaki ilk paragraftan: "Yalnızca kaynak dosyalar ve hedefteki mevcut dosyalar arasındaki farkları göndererek ağ üzerinden gönderilen veri miktarını azaltan delta-transfer algoritması ile ünlüdür."
user4556274

Ah, tamam, bunu bir yorumdan çok cevap olarak göndermelisin. Rsync'in bu şekilde davrandığı açık değildi, ama bu beklentiyle, dosyamın beklediğimden daha fazla değiştiğini varsayacağım ve nedenine bakacağım. Görüntü sıkıştırma işlemi büyük olasılıkla dosyadaki ham bayt değerlerini değiştirir.
David Parks

Yanıtlar:


11

rsyncdelta-transfer algoritması bunu varsayılan olarak yapar. Alıntı rsync manpage :

AÇIKLAMA

Rsync hızlı ve olağanüstü çok yönlü bir dosya kopyalama aracıdır. Yerel olarak, herhangi bir uzak kabuk üzerinde başka bir ana makineye / bilgisayardan veya uzak bir rsync arka plan programına / bilgisayardan kopyalayabilir. Davranışının her yönünü kontrol eden ve kopyalanacak dosya kümesinin çok esnek özelliklerine izin veren çok sayıda seçenek sunar. Yalnızca kaynak dosyalar ve hedefteki mevcut dosyalar arasındaki farkları göndererek ağ üzerinden gönderilen veri miktarını azaltan delta-transfer algoritması ile ünlüdür . Rsync, yedekleme ve yansıtma için ve günlük kullanım için geliştirilmiş bir kopyalama komutu olarak yaygın olarak kullanılır.

Devre dışı bırakmak istiyorsanız, -Wveya --whole-fileseçeneğini kullanmanız gerekir .

-W, --whole-file

Bu seçenek rsync'in delta-transfer algoritmasını devre dışı bırakır, bu da aktarılan tüm dosyaların bir bütün olarak gönderilmesine neden olur. Kaynak ve hedef makineler arasındaki bant genişliği diske bant genişliğinden daha yüksek olduğunda (özellikle "disk" aslında ağa bağlı bir dosya sistemi olduğunda) bu seçenek kullanılırsa aktarım daha hızlı olabilir. Bu, hem kaynak hem de hedef yerel yollar olarak belirtildiğinde, ancak yalnızca toplu yazma seçeneği etkin olmadığında varsayılan değerdir.

Dosyanızın ne kadar değiştiğini gerçekten biliyorsanız, delta blok boyutunuzu ayarlayarak bu delta aktarım davranışını bile optimize edebilirsiniz:

-B, --block-size = BLOK

Bu, rsync'in delta-transfer algoritmasında kullanılan blok boyutunu sabit bir değere zorlar. Normalde güncellenen her dosyanın boyutuna göre seçilir. Ayrıntılar için teknik rapora bakınız.

Ve algoritmanın kendisi hakkında daha fazla bilgi istiyorsanız, burada bulabilirsiniz: Rsync algoritması


Dürüst olmak gerekirse, manpagedeki çoğul "dosyalar" belirsizdir: "yalnızca kaynak dosyalar ve varolan dosyalar arasındaki farkları göndererek ..." Tek tek dosyaların toplanması anlamına gelen "dosyaları" aldım ve rsync farklı (bütün) dosyalar gönderir. Bu açıklığa kavuşturulmalıdır.
Russ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.