Я использую такой сценарий:
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] с Generator [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-прокси
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
и я не могу понять почему.
Я думаю, что это король физической сетевой ошибки (не на моих машинах), но я не знаю, смогу ли я найти, изолировать и воспроизвести эту ошибку.
Спасибо за вашу помощь!
Похоже, вам сложно определить проблему, но нет проблем с ее воспроизведением. В этом случае может помочь устранение неполадок самого 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
может записывать в кеш диска быстрее, чем диск на сервере может за ним успевать, см. например https://unix.stackexchange.com/a/331189/163108 для более подробного объяснения, и https://unix.stackexchange.com/a/523896/163108 для аналогичной проблемы, но в другом случае при использовании rsync
через samba
/cifs
навесной привод.
Возможное решение - дросселировать rsync
используя --bwlimit=
вариант. В зависимости от производительности сети / диска сервера, я бы рекомендовал попробовать значения в диапазоне 2000-10000 (в кбит / с).