Używam rsync
do wykonania kopii zapasowej mojego katalogu domowego. Od dawna działa dobrze. Oto polecenie, którego używam:
rsync \
-pavz \
--delete \
--exclude 'mnt/' \
--exclude '.cache/' \
--exclude 'Videos/' \
--exclude 'Music/' \
--exclude 'Documents/virtualbox' \
/home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"
Jednak przełączyłem serwer, na którym tworzę kopię zapasową, a teraz się rsync
uruchamia i działa przez kilka sekund (do kilku minut), ale potem zatrzymuje się z komunikatem o błędzie
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]
Ponieważ działa na innych serwerach, podejrzewam, że problemem jest połączenie lub sam serwer. Połączenie wydaje się być stabilne. Jestem połączony kablem i nie widzę żadnych zakłóceń. Próbowałem również pingować serwer podczas tworzenia kopii zapasowej. Ping ma wskaźnik odpowiedzi 100%, nawet gdy kopia zapasowa się rozpada.
Używam kerberos
do uwierzytelnienia na zdalnym serwerze.
Próbowałem kilka kombinacji z ServerAliveInterval
, ServerAliveCountMax
lub ClientAliveInterval
w moim ~/.ssh/config
, ale bezskutecznie.
Możliwe, że rsync
z jakiegoś powodu na serwerze działa coś, co zabija polecenie, ale nie wiem, jak to zbadać. Jakieś pomysły?
źródło
kerberos
do uwierzytelnienia na zdalnym serwerze.Odpowiedzi:
Twoim problemem może być (brak) pamięci. Kiedy 1 GB był duży dla serwera, rsync nie działał na mnie w przypadku dużych zestawów danych. Być może algorytm poprawił pojemność pamięci, ale nie widziałem tego problemu od około 8 lat. Tak naprawdę to jest strzał z zewnątrz, ale warto go zbadać. Najpierw wypróbuj mniejsze zestawy danych. Możesz także spróbować - jako formularz kontroli poczytalności - wykonać tar-tar:
Jeśli to również zawiedzie po kilku minutach, to nie jest pamięć.
źródło
Spotkałem się z tym również
rsync
w przeszłości. Rozwiązaniem, które go naprawiło, było uruchomienie go zscreen
sesji, co pomogło utrzymać połączenie ze zdalnym serwerem.Możesz sprawdzić status, uruchamiając
screen -x rsync
(lub cokolwiek zdecydujesz nazwać sesję, jeśli nadasz jej nazwę, która nie jest wymagana). Spowoduje to ponowne dołączenie bieżącej powłoki do tej sesji. Pamiętaj tylko, aby odłączyć go ponownie po sprawdzeniu stanu, aby działał w tle.Możesz także wykonać polecenie uruchomienia
screen
w tle za jednym zamachem, wykonując [ktoś, proszę, popraw mnie, jeśli się mylę]screen -dm 'command'
. Możeszman screen
spróbować przed tym ostatnim.EDYTOWAĆ:
Edytuję moją odpowiedź, ponieważ potwierdziłeś, że
screen
nie ma żadnej pomocy w tym scenariuszu, ale odpowiedziałeś na mój komentarz sugerując, aby spróbowaćscp
zobaczyć, jakie wyniki uzyskasz, na co odpowiedziałeś, że dość dziwnie, zadziałało dobrze.Więc moja nowa odpowiedź brzmi: użyj
scp
- lubssh
(ztar
) - zamiastrsync
To prawda,
scp
nie obsługuje ogromną liczbę funkcji, jakrsync
, ale trzeba faktycznie być zaskoczony, aby dowiedzieć się, jak wiele możliwości, że ma wsparcie, które są niemal identyczne do tego zrsync
.Prawdziwe scenariusze
scp
i inne alternatywy dlarsync
:Jakiś czas temu miałem za zadanie utworzyć skrypt powłoki, który pobierał dzienniki z naszych serwerów produkcyjnych i przechowywał je lokalnie na serwerze WWW, aby programiści mieli do nich dostęp w celu rozwiązywania problemów. Po bezskutecznych próbach zmuszenia zespołu Unixa do zainstalowania
rsync
na naszych serwerach, wymyśliłem obejście,scp
które działa równie dobrze.To powiedziawszy, niedawno zmodyfikowałem skrypt, tak aby wszystko, czego używa, to
ssh
itar
-GNU tar
/gtar
, a dokładnie. GNUtar
obsługuje wiele opcji, które można odnaleźć w rzeczywistościrsync
, takich jak--include
,--exclude
zezwolenie / konserwatorskich atrybut, kompresja itpSposób, w jaki teraz to
ssh
osiągam, to połączenie z serwerem zdalnym (za pomocą uwierzytelniania pubkey) i użyciegtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
- zapisuje wszystkie informacjestdout
, które są następnie przekazywane lokalnie, abytar -xzf
żadne zmiany nie były dokonywane na zdalnym serwerze produkcyjnym , i wszystkie pliki ściągnięte na serwer lokalny w stanie, w jakim się znajdują. To świetna alternatywa dlarsync
tego przypadku. Jedyną ważną rzeczą,tar
aniscp
wsparcie, ani wsparcie nie są przyrostowe kopie zapasowe i poziom kontroli błędów na poziomie bloku, którersync
funkcje.Pełne polecenie, o którym mówię podczas używania
ssh
itar
byłoby coś takiego (zdalne to Solaris 10; lokalne to Debian, za ile jest warte):W twoim scenariuszu byłoby odwrotnie -
tar -cf -
lokalnie i potokowo do zdalnego serwera przezssh user@remotehost "tar -xf -"
- istnieje inna odpowiedź, która odwołuje się do tego rodzaju zachowania, ale nie zawiera zbyt wielu szczegółów.Jest kilka innych opcji, które podałem, aby przyspieszyć. Nieustannie mierzyłem wszystko, aby czas wykonania był jak najkrótszy. Można by pomyśleć, że użycie kompresji
tar
byłoby bezcelowe, ale tak naprawdę przyspiesza to trochę, podobnie jak użycie-C
flagi z,ssh
aby włączyćssh
kompresję. Mogę zaktualizować ten post w późniejszym terminie, aby zawierał dokładne polecenie, którego używam (co jest bardzo podobne do tego, co zamieściłem), ale nie mam teraz ochoty korzystać z VPN, ponieważ jestem w tym tygodniu na wakacjach.W Solarisie 10 również używam
-c blowfish
, ponieważ jest to najszybszy szyfr do uwierzytelnienia, a także pomaga przyspieszyć działanie, ale nasz Solaris 11 albo go nie obsługuje, albo wyłącza ten zestaw szyfrów.Dodatkowo, jeśli wybierzesz opcję
ssh
/tar
, dobrym pomysłem byłoby zaimplementowanie mojego oryginalnego rozwiązania polegającego na korzystaniuscreen
z kopii zapasowej, która może chwilę potrwać. Jeśli nie, upewnij się, że twoje ustawienia podtrzymania / limitu czasussh_config
są odpowiednio poprawione, w przeciwnym razie istnieje duże prawdopodobieństwo, że ta metoda spowoduje uszkodzenie rury.Nawet jeśli zdecydujesz się na to
scp
, zawsze uważam, że najlepszą praktyką jest używaniescreen
lubtmux
podczas wykonywania operacji tego rodzaju, na wszelki wypadek . Wiele razy nie postępuję zgodnie z własnymi radami i nie robię tego, ale rzeczywiście dobrą praktyką jest używanie jednego z tych narzędzi, aby upewnić się, że zdalne zadanie nie zepsuje się z powodu rozłączenia aktywnej sesji powłoki.Wiem, że chcesz znaleźć podstawową przyczynę swojego
rsync
problemu. Jeśli jednak jest to naprawdę ważne, są to dwa świetne obejścia, z którymi można w międzyczasie eksperymentować.źródło
screen
, wynik jest taki sam.Miałem ten sam problem na OSX El Capitan i naprawiłem to poprzez uaktualnienie do rsync v3.11. Problem występował dla mnie w wersji 2.6.9.
źródło
rsync 3.1.1
.Kerberos służy tylko do uwierzytelniania, co nie powinno powodować żadnych problemów po utworzeniu udanego połączenia.
Czy próbowałeś również użyć demona rsync?
Czy Twoje serwery są w tej samej sieci, czy masz między nimi zaporę ogniową / router?
Możesz spróbować skonfigurować sesję netcat między serwerami. Jest to prosty sposób na sprawdzenie, czy występują problemy z połączeniem między serwerami.
Na pierwszym serwerze:
I na kliencie
Możesz pozostawić połączenie otwarte i sprawdzić, czy połączenie je utrzymuje, czy też utracisz połączenie. Możesz także spróbować napisać coś na kliencie, a zobaczysz, że kończy się on na drugiej stronie.
źródło
netcat
na dowolnym porcie> 1024 bez konieczności posiadania uprawnień rootaNa zdalnym serwerze masz coś, co zapisuje na standardowe wyjście . To może być w twoim
.profile
lub.bash_profile
. Może to być coś mniej oczywistego jakstty
lubmesg
. W razie wątpliwości skopiuj transkrypcję na swoje pytanie dotyczące logowania na serwerze (zredaguj nazwę hosta za wszelką cenę).źródło
.profile
lub.bash_profile
do recenzji. Szukasz rzeczy takich jakmesg
lubstty
mesg
anistty
w żadnym z moich dotfiles.jedyny raz, gdy miałem taki problem z rsync, wyśledziłem go do wolnego portu Ethernet na innym komputerze, który miał ten sam adres IP, co mój serwer docelowy. Jeśli rsync jest niestabilny, prawie na pewno jest to problem z niezawodnością sieci lub (w moim przypadku) konfiguracją.
źródło
I napotkał podobny problem podczas uruchamiania
rsync
lub ręcznie (albo zcp
,scp
lub w Gnome Nautilus) kopiowania dużych plików z Linuksa do niskiego zasilanego ARM Linux Gigabit NAS nad okablowaniem sieci (brakkerberos
w mojej konfiguracji). Dyski NAS są współużytkowanesamba
i są montowane na kliencie za pomocącifs
. Rozwiązaniem było dla mnie zamontowanie systemu plików NAS z poziomu klienta bez buforowania (zobacz także strony podręcznika montowania.cifs ):Alternatywnie, w przypadku montażu napędu NAS na kliencie za pomocą
gvfs
wnautilus
ten problem nie utrzymują się przy kopiowaniu dużych plików (ale to nie działa w połączeniu zrsync
chociaż).Spraw, aby Linux zapisywał do sieciowego systemu plików jednocześnie z odczytami z dysku lokalnego, a następnie wyjaśnia, dlaczego ten problem może występować.
źródło
Po prostu zaktualizuj wersje rsync, aby upewnić się, że są dokładnie takie same na komputerach wysyłających i odbierających. Zobacz moją odpowiedź tutaj: /server/883487/unable-to-rsync-due-to-broken-pipe/988794#988794 .
źródło