rsync bağlantı kesilmeye devam ediyor: kırık boru


14

Giriş rsyncdizinimi yedeklemek için kullanıyorum . Bu uzun zamandır iyi çalışıyor. İşte kullanıyorum komut:

rsync \
    -pavz \
    --delete \
    --exclude 'mnt/' \
    --exclude '.cache/' \
    --exclude 'Videos/' \
    --exclude 'Music/' \
    --exclude 'Documents/virtualbox' \
    /home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"

Ancak, yedekleme yaptığım sunucuyu değiştirdim ve şimdi rsyncbirkaç saniye (birkaç dakikaya kadar) başlayıp çalışıyor, ancak hata mesajı ile duruyor

packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]

Diğer sunucularda çalıştığından, sorunun bağlantı veya sunucunun kendisinden kaynaklandığından şüpheleniyorum. Bağlantı sağlam görünüyor. Kablo ile bağlandım ve herhangi bir kesinti görmüyorum. Yedekleme yaparken sunucuya ping göndermeyi de denedim. Yedekleme kesilse bile ping% 100 yanıt oranına sahiptir.

kerberosUzak sunucuda kimlik doğrulaması yapmak için kullanıyorum .

Ben birkaç kombinasyonları denedi ServerAliveInterval, ServerAliveCountMaxya ClientAliveIntervalbenim, ~/.ssh/configama boşuna.

Herhangi bir rsyncnedenle komutu öldüren sunucuda çalışan bir şey olabilir , ancak bunu nasıl araştıracağımı bilmiyorum. Herhangi bir fikir?


Belki kerberosde uzak sunucuda kimlik doğrulaması yapmak için kullandığımı eklemeliyim .
pfnuesel

Bu potansiyel olarak çok önemli. Lütfen bu bilgileri içerecek şekilde sorunuzu düzenleyin
roaima

Bu sunucuda, rsync çağrısı her seferinde mi, yoksa bazen mi başarısız oluyor? Ayrıca, başarısız olma süresini tekrar tekrar ölçüyorsanız, herhangi bir desen ortaya çıkıyor mu? Kerberos kimlik doğrulama zaman aşımını veya benzer bir şeyi düşünüyorum.
dhag

io hatası görmek uzak tarafın dosya sisteminin dolu olup olmadığını merak etmemi sağlıyor?
Jeff Schaller

1
@rubynorails İlginç. Bu sorunsuz çalışıyor gibi görünüyor.
pfnuesel

Yanıtlar:


6

Sorununuz (yetersiz) bellek olabilir. Bir sunucu için 1GB büyük olduğunda, rsync büyük veri kümeleri için başarısız olur. Belki de algoritma hafıza kapasitelerini artırdı, ama 8 yıldır bu problemi görmedim. Gerçekten, bu bir dış çekim, ama keşfetmeye değer. Önce daha küçük veri kümelerini deneyin. Ayrıca - akıl sağlığı kontrolünde bir form olarak - bir tar-tar yapmayı deneyebilirsiniz:

tar cf - $HOME | ssh ${server} tar xf -

Bu da birkaç dakika sonra başarısız olursa, bellek değildir.


4

Bu rsyncgeçmişte de karşılaştım. Benim için düzelten çözüm screen, uzak sunucuya bağlantının korunmasına yardımcı olabilecek bir oturumda çalıştırıyordu .

screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session

Durumu çalıştırarak kontrol edebilirsiniz screen -x rsync(ya da oturuma ad vermeye karar verdiğiniz herhangi bir ad verirseniz, bu gerekli değildir). Bu işlem geçerli kabuğunuzu o oturuma yeniden ekleyecektir. Durumu kontrol ettikten sonra arka planda çalışmaya devam etmesi için tekrar ayırmayı unutmayın.

screen[Arıza yanılıyorsam lütfen biri beni düzeltin] yaparak arızalı bir swoop'ta arka planda çalıştırılacak komutu da çalıştırabilirsiniz screen -dm 'command'. man screenSonuncusunu denemeden önce isteyebilirsiniz .

DÜZENLE:

Cevabımı düzenliyorum çünkü screenbu senaryoda hiçbir yardım sağlamadığını onayladınız , ancak scpne tür sonuçlar aldığınızı ve ne kadar garip bir şekilde cevap verdiğinizi görmek için yorumuma cevap verdiniz, gayet iyi çalıştı.

: Yani benim yeni cevap şudur kullanımı scp- ya ssh(ile tar) - yerinersync

Kabul, scpgibi özellikleri büyük sayıda desteklemez rsync, ama aslında o sadece kaç özelliklerini keşfetmek için şaşıracaksınız yapar neredeyse olan desteğini özdeş o kadar rsync.

Gerçek dünya senaryoları scpve diğer alternatifler rsync:

Geriye dönersek, geliştiricilerin sorun giderme amacıyla erişebilmeleri için günlükleri üretim sunucularımızdan alıp yerel olarak bir web sunucusunda depolayacak bir kabuk komut dosyası oluşturmakla görevlendirildim. Unix ekibinin rsyncsunucularımıza yüklenmesini başarısızlıkla denedikten sonra, aynı şekilde çalışan bir geçici çözüm buldum scp.

Varlık kullandığı tüm böylece Geçenlerde senaryoyu modifiye dedi sshve tar- GNU tar/ gtar, tam olarak. GNU taraslında içinde bulacaksınız seçeneklerin çoğunu destekler rsyncgibi --include, --excludevb izni / nitelik korunması, sıkıştırma,

Şimdi bunu başarmanın yolu ssh, uzak sunucuya (pubkey auth üzerinden) geçerek ve kullanmaktır gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]- bu, tüm bilgileri yazar stdout, bu daha sonra [yerel olarak] 'a aktarılır , tar -xzfböylece uzak üretim sunucusunda hiçbir değişiklik yapılmaz ve olduğu gibi çekilen tüm dosyalar yerel sunucuya. rsyncBu durumda harika bir alternatif . Ne önemli ne tarde scpdestek olan tek şey , artımlı yedeklemeler ve bu rsyncözellikleri kontrol eden blok düzeyinde hata düzeyidir .

Kullanırken bahsettiğim tam komut sshve tarböyle bir şey olurdu (remote Solaris 10; yerel Debian, ne için değer):

cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz

Senaryonuzda bunun tam tersi olacaktır - tar -cf -yerel olarak ve uzak sunucuya aktarım yoluyla ssh user@remotehost "tar -xf -"- bu tür davranışlara atıfta bulunan ancak çok fazla ayrıntıya girmeyen başka bir cevap var.

İşleri hızlandırmak için eklediğim birkaç seçenek daha var. Yürütme süresini mümkün olduğunca düşük hale getirmek için her şeyi acımasızca zamanladım. tarİle sıkıştırma kullanmanın anlamsız olacağını düşünürsünüz , ancak aslında sıkıştırmayı etkinleştirmek için -Cbayrağını kullanırken olduğu gibi işleri biraz hızlandırır . Bu yazıyı, kullandığım (yayınladığımla çok benzer) tam komutu içerecek şekilde daha sonraki bir tarihte güncelleyebilirim, ancak bu hafta tatildeyken şu anda VPN'e girmek istemiyorum.sshssh

Solaris 10'da da kullanıyorum -c blowfish, çünkü kimlik doğrulaması yapmak için en hızlı şifre ve aynı zamanda işleri biraz hızlandırmaya yardımcı oluyor, ancak Solaris 11'imiz ya desteklemiyor ya da bu şifre paketini devre dışı bırakıyor.

Ayrıca, ssh/ tarseçeneğiyle gitmeyi seçerseniz, screenbiraz zaman alacak bir yedekleme yapıyorsanız , orijinal çözümümü uygulamak iyi bir fikir olacaktır. Değilse, ssh_configcihazınızdaki tutma / zaman aşımı ayarlarınızın doğru ayarlandığından emin olun , aksi takdirde bu yöntemin de kırık bir boruya neden olması muhtemeldir.

Birlikte olsanız bile scp, her zaman kullanmak için en iyi uygulama olduğunu screenveya tmuxbu tür bir işlemi yaparken, her ihtimale karşı bulurum . Birçok kez kendi tavsiyemi takip etmiyorum ve bunu yapamıyorum, ancak aktif kabuk oturumunuzun bir şekilde bağlantısının kesilmesi nedeniyle uzak işin yorulmamasını sağlamak için bu araçlardan birini kullanmak gerçekten iyi bir uygulamadır.

rsyncSorunun temel nedenini bulmak istediğini biliyorum . Ancak, bu gerçekten önemliyse, bu arada deneyebileceğiniz iki harika geçici çözümdür.


1
Ben denedim screen, sonuç aynı.
pfnuesel

@pfnuesel - en azından ekarte edebileceğinizi bilmek güzel.
rubynorails

3

OSX El Capitan'da da aynı sorunu yaşıyordum ve rsync v3.11'e yükselterek bunu düzelttim. Sorun benim için v2.6.9'da oluyordu.


Koşuyorum rsync 3.1.1.
pfnuesel

Yönlendiricinizde paket taşma koruması (veya benzeri bir koruma) etkin olup olmadığını kontrol etmek isteyebilirsiniz. Herhangi bir VPN üzerinden mi bağlanıyorsunuz?
Bruno

Bu sorun olabilir. Ne yazık ki, ağ cihazlarına erişimim yok. Yine de, diğer sunucularda iyi çalışıyor, bu yüzden bu belirli sunucunun paket sel koruma bir tür olduğunu tahmin ediyorum.
pfnuesel

2

Kerberos yalnızca kimlik doğrulaması içindir, bu başarılı bir bağlantı oluşturduktan sonra herhangi bir soruna neden olmamalıdır.

Rsync arka plan programını da kullanmayı denediniz mi?

Sunucularınız aynı ağda mı veya arasında bir güvenlik duvarınız / yönlendiriciniz mi var?

Sunucular arasında bir netcat oturumu kurmayı deneyebilirsiniz; bu, sunucular arasında herhangi bir bağlantı sorununuz varsa denemenin basit bir yoludur.

İlk sunucuda:

nc -lk <port-number>

Ve müşteri üzerinde

nc <server> <port-number>

Bağlantıyı açık bırakabilir ve bağlantının devam edip etmediğini veya bağlantıyı kaybedip kaybetmediğinizi görebilirsiniz. Ayrıca istemciye bir şeyler yazmayı deneyebilirsiniz, diğer tarafta sona erdiğini görün.


Ne yazık ki, sunucuda root erişimim yok. Bu, bir rsync arka plan programı veya netcat oturumu çalıştıramayacağım anlamına gelir.
pfnuesel

@pfnusel netcatroot ayrıcalıklarına gerek kalmadan herhangi bir bağlantı noktasından>
1024'te çalışabilirsiniz

1

Uzak sunucuda stdout'a yazan bir şey var . Bu senin içinde olabilir .profileveya .bash_profile. sttyVeya gibi daha az belirgin bir şey olabilir mesg. Şüpheniz varsa, sunucuya giriş yaptığınız soruya bir konuşma metni kopyalayın (ana bilgisayar adını elbette yeniden düzenleyin).


Anlamıyorum. Ne ters gidiyor, ne de stdout'ta ne yazdığını bulmak için ne yapmam gerekiyor.
pfnuesel

@pfnuesel giriş yaptığınız transkripti kopyalar ve buraya gönderirseniz, birisi ne olduğunu görebilir. Daha iyi, senin gönderebilir .profileveya .bash_profileinceleme için. Sen gibi şeyler arıyoruz mesgveyastty
roaima

Dotfiles dosyamda hiç mesgveya hiç yok stty.
pfnuesel

@pfnuesel giriş sırasında terminale yazan başka bir şey var mı?
roaima

Hayır, ama stdout'a yazan bir şey eklesem bile. Hiçbir şeyi değiştirmez.
pfnuesel

1

rsync ile böyle bir sorun yaşadığım tek sefer, hedef sunucumla aynı IP adresine sahip başka bir makinede yedek bir ethernet portuna kadar izledim. Rsync kesintili ise, neredeyse kesinlikle bir ağ güvenilirliği veya (benim durumumda) yapılandırma sorunudur.


1

Çalıştırırken Ben de benzer bir sorunla karşılaştı rsyncveya manuel (biriyle cp, scpya Gnome Nautilus olarak) Linux NAS bir gigabit kablolu ağ üzerinden (hayır bazlı düşük enerjili ARM için Linux masaüstü büyük dosyaları kopyalama kerberosbenim kurulumunda). NAS sürücüler kullanılarak paylaşılır sambave kullanılarak istemciye bağlanır cifs. Benim için çözüm, NAS dosya sistemini istemciden önbelleğe almadan monte etmekti (ayrıca bkz. Mount.cifs man sayfaları):

sudo mount -t cifs //server.lan/somedir /mnt/somedir/ -o cache=none

Alternatif olarak, kullanarak istemci üzerinde NAS sürücü montaj sırasında gvfsiçinde nautilusbüyük dosyaları kopyalarken devam olmaz bu soruna (ama bu birlikte çalışır değil rsyncgerçi).

Yerel dosya okumalarıyla eşzamanlı olarak Linux'un ağ dosya sistemine yazılmasını sağlayın, bu sorunun neden ortaya çıkabileceği konusunda daha ayrıntılı bilgi edinin.


0

Hem gönderen hem de alan bilgisayarlarda tamamen aynı olduklarından emin olmak için rsync sürümlerinizi yükseltin . Cevabımı buraya bakın: /server/883487/unable-to-rsync-due-to-broken-pipe/988794#988794 .


1
Neden inişli çıkışlı? Bu bir cevap değil, bir yorum olmalı, belki? Kimse? Kimse?
Gabriel Staples

1
Artık bu sunucuya erişimim olmadığından sorunu yeniden oluşturamıyorum. Ancak bu makul bir cevaptır ve aşağı oyu hak etmiyor.
pfnuesel
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.