Назад | Перейти на главную страницу

Является ли rsync более надежным, чем scp для сброса соединения?

В большой корпоративной сети, защищенной брандмауэром, мы традиционно использовали scp для копирования нескольких новых файлов с одного компьютера на другой в рамках процедуры ротации и анализа файлов журнала.

Однако недавно было замечено, что scp кажется, что случайно выходит из строя, с Connection reset by peer сообщение об ошибке, и наши процедуры ломаются.

Было бы неплохо переключиться на rsync на месте scp, или есть способ сделать scp более настойчивым при копировании файлов?

«Сброс соединения одноранговым узлом» означает, что удаленный конец потока TCP (а не конец, зарегистрировавший ошибку) неожиданно закрыл поток TCP. Это может произойти, например, если программа на удаленном конце потерпела крах или была убита. Ошибка также может быть вызвана некоторыми сетевыми устройствами, такими как межсетевые экраны с отслеживанием состояния или устройства NAT, которые мешают потоку TCP.

В лучшем случае все, что вызывает ошибку, может быть связано с scp программа. Rsync не использует scp так что это может не затронуть. С другой стороны, проблема может быть общей для ssh-соединений между двумя серверами или даже для любого TCP-потока между двумя серверами. Вы, вероятно, запускаете rsync через ssh, поэтому у вас может возникнуть та же проблема, что и с scp.

Одна из главных особенностей rsync заключается в том, что, когда целевой файл уже существует, но имеет другое содержимое, чем исходный, rsync не нуждается в повторной передаче всего файла - ему просто нужно передать дополнительные данные, чтобы назначение соответствовало источнику. Когда вы запускаете rsync и он терпит неудачу до завершения, вы можете перезапустить rsync, и он продолжит работу с того места, на котором остановился, а не начнется заново. Если вы обнаружите, что rsync дает сбой, как scp, тогда эта функция rsync будет чрезвычайно полезной.

На самом деле Rsync не будет пытаться повторно подключиться самостоятельно, но вы можете продолжать запускать rsync, пока он не сообщит об успехе. Например, это bash Команда оболочки сделает это:

until rsync ...
do
    echo Retrying rsync
done