Почему мой rsync такой медленный по сравнению с чистым cp или даже scp?

15

Я переношу файлы из Linux в Windows 7 через смонтированный общий ресурс (общий ресурс смонтирован из Windows в Linux) .. Я копирую много данных (т.е. почти ТБ) со старого компьютера на новый в моей локальной сети , Я уже достаточно неудачен, что у меня только 100 Мбит. Естественно, я слепо использовал rsync, но уже через день удивлялся, почему это так медленно. Включение индикатора прогресса показало мою скорость передачи около 2 МБ / с.

Поэтому я взял достаточно большой файл (800 МБ) и отследил время передачи (1):

cp : 05:33
scp (2): 06:33
rsync : 21:51

1) Я удаляю файлы между каждым запуском
2) scp через localhost на одну и ту же машину Linux прямо на общий ресурс; совершенно бесполезно, но при условии, индикатор прогресса

Тесты были так же просты, как

(cp|scp|rsync) <source> <destination>

Никаких специальных аргументов, кроме хоста / порта для scp. Я даже попробовал -Wпереключиться на rsync, но отменил через десять минут. rsync 3.0.3 работает на Lenny. Возможность прерывания процесса копирования в любое время и возобновления приводит меня к rsync, но теперь я думаю, что мне действительно нужно пересмотреть это требование.

Как такая большая разница возможна?

Обновление / Решено:

Благодаря rschuler я смог решить эту проблему: использовать демон rsync вместо монтирования smb из соображений эффективности. Упомянутая DeltaCopy работает, но нужно следить за несколькими вещами

  • Это хорошая оболочка для графического интерфейса, но если что-то идет не так, полезно знать, как это исправить. Кажется, я ввел свои учетные данные пользователя, под которыми для запуска службы rsync, неправильно в первый раз, но графический интерфейс не позволил мне установить новый. Я понял, что он работает в качестве службы и смог установить правильные учетные данные
  • Необходимо вручную добавить порт в брандмауэр, чтобы разрешить подключения
  • Личный вкус: убедитесь, что акции защищены паролем или, если нет, возможно, убедитесь, что служба не запускается автоматически с Windows; так, на всякий случай
  • Обернутый бинарный файл rsync не является собственным портом Windows, но основан на cygwin. Тем не менее, содержащаяся в cygwin DLL неправильно обрабатывает UTF8 и искажает не-ascii символы. Получите исправленную библиотеку DLL по адресу http://www.okisoft.co.jp/esc/utf8-cygwin/ .

После этого скорость передачи данных возросла с 2 МБ / с до ~ 8 МБ / с; абсолютно фантастично!

отметка
источник
Вы удаляли файл назначения между каждым прогоном теста? Если файл назначения уже существует, а метаданные неверны, тогда ему потребуется проверить контрольную сумму как источника, так и пункта назначения.
Зоредаче
@Zoredache: я удалил файлы между запусками; Кроме того, -Wпереключатель должен игнорировать это
Марк

Ответы:

18

(общий ресурс монтируется из Windows на Linux)

Это твоя проблема. rsync выполняет проверку контрольных сумм по месту назначения. Окна делятся. Вы вытягиваете все данные по сети, чтобы вычислить контрольные суммы. (Возможно, более одного раза).

Вам нужно запустить rsync на обеих машинах. Таким образом, только различия (и контрольные суммы) будут передаваться по сетевому кабелю. DeltaCopy - это оконный rsync. У него достаточно хороших документов, чтобы начать работу.

Посмотрите ответ на этот вопрос, чтобы получить лучшее объяснение, почему я думаю, что вы, возможно, неправильно используете rsync.

Родни Шулер
источник
Бинго, твой ответ не может быть более конкретным. Большое спасибо, я усвоил урок.
отметка