rsync - необъяснимая ошибка
Я использую такой скрипт:
rsync -avu --delete --progress user@host:~/backup .
и каждый раз, через некоторое время, получаю эту ошибку:
rsync: connection unexpectedly closed (10251754 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.0]
rsync: connection unexpectedly closed (45482 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.0]
# generator = Debian 5, rsync version 3.0.3 protocol version 30 (Generator[A])
# receiver = Ubuntu 14.04, rsync version 3.1.0 protocol version 31 (Receiver[A])
У меня более десяти лет опыта в rsync
Я попробовал все, но я не могу понять, почему это происходит.
С обеих сторон: у меня нет ошибок в логах, нет странных вещей в tcpdump, нет проблем с подключением, нет брандмауэров. Передача просто внезапно останавливается через некоторое время.
Проблема не ограничивается одним сервером.
Я думал, что это может быть какой-то король несовместимости между версиями rsync, поэтому я переключаю генератор со свежим новым сервером (Debian 8) на совершенно другую ферму серверов, и я получаю обновление rsync на приемнике, но я получаю эту ошибку:
rsync: connection unexpectedly closed (31931964 bytes received so far) [receiver]
rsync: [generator] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [generator=3.1.2]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.2]
# generator = Debian 8, rsync version 3.1.1 protocol version 31 (Generator[B])
# receiver = Ubuntu 14.04, rsync version 3.1.2 protocol version 31 (Receiver[B])
Затем я попытался синхронизировать Receiver[A] с генератором [B] через прокси, и это работает
Receiver[A](Italy) <=> HTTP Proxy(Paris) <=> Generator[B](Strasbourg)
Так что теперь у меня есть
Receiver[A] <=> Generator[A] // ERROR
Receiver[A] <=> Generator[B] // ERROR
Receiver[B] <=> Generator[B] // ERROR
Receiver[A] <=> HTTP Proxy <=> Generator[A] // OK
Receiver[A] <=> HTTP Proxy <=> Generator[B] // OK
Я тоже пробовал без HTTP Proxy
Receiver[A] <=> Generator[C] // OK
Receiver[A] <=> Generator[D] // OK
Receiver[A] <=> Generator[E] // ERROR
где генераторы [C]
, [D]
а также [E]
серверы в Париже (это же серверная ферма моего HTTP Proxy
) с rsync 3.0.9, prot. v. 30
,
Итак, суть здесь такова: у меня есть несколько серверов в разных местах. На Receiver[A]
У меня нет брандмауэра, и все работает хорошо с несколько дней назад. Сейчас rsync
вернуть unexplained error
и я не могу понять, почему.
Я думаю, что это какой-то король физических сетевых ошибок (не на моих машинах), но я не знаю, смогу ли я найти, изолировать и воспроизвести эту ошибку.
Спасибо за вашу помощь!
1 ответ
Похоже, вам трудно определить проблему, но нет проблем с ее воспроизведением. В этом случае может помочь, если вы устраните неполадки самого соединения SSH, а также данных, которые вы получаете по нему.
Вы можете запустить свой rsync
Команда, как показано ниже, выдаст некоторые данные du:
rsync -e 'bash -x -c "ssh -vvvv $0 $@ 2>/tmp/rsync-ssh.stderr | tee /tmp/rsync.stdout"' -avu --delete --progress user@host:~/backup .
Просмотр в конце этих файлов может быть чем-то полезным. Например, если соединения SSH были прерваны, что-то должно отображаться в /tmp/rsync-ssh.stderr
, И если это на самом деле проблема с другой стороны, фактический дамп протокола rsync в /tmp/rsync.stdout
может иметь некоторую строковую подсказку (strings /tmp/rsync.stdout
).
Если бы мне пришлось угадывать, это либо неприятный брандмауэр, либо физическая проблема, повреждающая пакеты и вызывающая разрыв соединения SSH.
Возможно, что rsync
Возможно, запись в кэш диска выполняется быстрее, чем диск на сервере, с которым он может справиться, см., например, /questions/288162/udalennyij-obmennyij-schet-po-prezhnemu-predlagaetsya-avtomaticheski/288173#288173 для более подробного объяснения, и /questions/708588/ping-otvet-ne-popadaet-na-kompyuteryi-s-lokalnoj-setyu-a-podklyuchaetsya-k-marsh/708596#708596 для аналогичной проблемы, но другой случай при использовании rsync
через samba
/cifs
навесной привод.
Возможное решение может быть для газа rsync
с помощью --bwlimit=
вариант. В зависимости от производительности сервера / сети на диске, я бы порекомендовал попробовать значения в диапазоне 2000-10000 (в кбит / с).