(Nispeten) büyük dosyalar için rsync ile bozuk paket hatası nasıl düzeltilir?


10

Bir sunucudaki dosyaları şu rsynckomutla güncellemeye çalışıyorum:

rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

corrupt packet hatalar atılmaya devam eder, özellikle:

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (11337 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [sender=3.0.9]

Büyük olasılıkla sshbüyük (r) dosyalarda olduğu gibi bu bir zaman aşımı ile ilgilidir. Ayrıca, WinSCP kullanarak zaman aşımları almaya devam ediyorum. Bu sadece benim başıma geliyor; Bu sunucuyu kullanmakla birlikte çalıştığım insanların birçoğunun aynı sorunu yok.

Kullanılması rsyncBir Centos 6.3 sunucusuna karşı, Windows 7'de bir Cygwin terminalden.

Başka hangi bilgilerin yararlı olabileceğinden veya nasıl edinileceğinden emin değilim. Soruyu güncelleyeceğim veya önerilere göre yorum ekleyeceğim.

Bunu nasıl çözmeliyim?

Çok teşekkürler!

Yanıtlar:


12

corrupt packetBağlantınızı kesen soruna neyin sebep olabileceğinden emin değilim , ancak büyük dosyaları aktarırken rsync --partialveya --partial-dirseçeneği yararlı bulabilirsiniz, böylece aktarımı yeniden başlattığınızda aktarımın üzerinden aktarmaya başlamak yerine aktarım kaldığı yerden devam eder. tüm dosya tekrar:

--partial-dir = .rsync-kısmi

Böylece orijinal komutunuzu şu şekilde değiştirebilirsiniz:

rsync -rav --progress --partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

veya

rsync -rav --progress --partial-dir=.rsync-partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

Bu örnek için -q( --quiet) seçeneğini kaldırdığımı --progressve ilk örnekte ve --partial-dir=.rsync-partialikinci örnekte seçeneği eklediğimi unutmayın .

Arasındaki fark --partialve --partial-dir=.rsync-partialdaha sonra o alıcı (sunucu) tarafında sizin için önemli ise kısmi dosyaları tam devredilen dosyalar ayrı tutan bir dizin oluşturur olmasıdır.

Rsync manpage Ben de önemli işaret edeceğiz olsa daha ayrıntılı olarak bu açıklayacağız güvenlik notu manpage dan:

ÖNEMLİ: --partial-dir diğer kullanıcılar tarafından yazılabilir olmamalıdır veya bir güvenlik riskidir. Örneğin "/ tmp" KAÇININ.


Her iki seçeneği de denedim ve ikisi de sorunu çözmedi. Yine de ipucu için teşekkürler.
Juan Carlos Coto

1

Bozulma, makinenizde bozuk bir NIC veya NIC sürücüsü olduğunu gösterir; Bu eşimin Windows kutusunda bir kez vardı: tekrar tekrar rsync yüklü almak denemek zorunda kaldı. Bu başarılı olduktan sonra, en çok güncellenen NIC sürücülerini ve bir sağlama toplamı aracını içeren gerekli diğer yazılımı aktarmak ve düzeltmek için rsync'i tekrar tekrar çağırabilirim.


0

Ulimit değeri 0 veya küçük bir sayı ise, bu hatayı vermelidir. Ulimit değerini artırmaya (such as 9999999999)çalışın ve tekrar deneyin. küçük bir kabuk komut dosyası yazabilir (a.sh)ve böyle bir şey kullanabilirsiniz:

#!/bin/sh
ulimit 99999999999

rsync -avrz --perms --delete --chmod=u+rwx,g+rx,o+x /dir1/ /dir2/

2
İlginç. Bir süredir bunun üzerinde çalışmıyorum; ancak, neden işe yaradığını açıklamak isterseniz, bu soruyu okuyanlar için gerçekten yararlı olacağını düşünüyorum. Teşekkürler!
Juan Carlos Coto

-1

sonunda aktarılana kadar döngü yap

while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ remoteuser@1.1.1.1:/dest/; do sleep 5;done
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.