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

Как ускорить rsync для небольших файлов

Я пытаюсь передать тысячи небольших файлов с одного сервера на другой, используя следующую команду:

rsync -zr --delete /home/user/ user@10.1.1.1::backup

На данный момент перевод занимает много времени (я еще не рассчитывал). Есть ли способ сделать это быстрее? Стоит ли использовать другой инструмент? Должен ли я использовать rsync вместо ssh вместо протокола rsync?

Вам необходимо определить узкое место. Это не rsync. Вероятно, дело не в пропускной способности вашей сети. Так как @Zoredache предположил, что это, скорее всего, огромное количество операций ввода-вывода в секунду, генерируемых всеми stat() звонки. Любой инструмент синхронизации должен будет статировать файлы. Во время синхронизации бега iostat проверять.

Итак, вопрос становится; как оптимизировать статистику? Два простых ответа:

  1. получить более быструю дисковую подсистему (при необходимости на обоих хостах) и
  2. настройте файловую систему (например, для монтирования ext3 с noatime и добавить dir_index).

Если по какой-то причине ограничение iops на вашем диске не является, вы можете поэкспериментировать с разделением дерева каталогов на несколько отдельных деревьев и запустить несколько rsync.

Сжатие не очень полезно для небольших файлов (скажем, менее 100 байт). Для небольших файлов иногда сжатая версия может быть даже больше оригинала. Попробуйте rsync команда без -z флаг.

ssh Это хорошо для безопасности, но не ускорит передачу. Фактически, это замедлит передачу из-за необходимости шифрования / дешифрования.

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

Если задействованы файловые системы ext3 или ext4, убедитесь, что обе имеют функция dir_index включен! В моем случае это утроило пропускную способность rsync.

Подробности см. В моем ответе по адресу: https://serverfault.com/a/759421/80414

Какую версию rsync вы используете? Все, что старше 3.0.0 (на обоих концах), не имеет функции инкрементного списка файлов, которая ускоряет большие передачи.

Добавить -v --progress в вашу командную строку rsync

rsync выполняется в 2 этапа:

  1. глубоко просмотрите все файлы на обеих платформах, чтобы сравнить их размер и дату
  2. сделать фактический перевод

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

Если время не тратится на просмотр, это время может быть просто связано с добавлением всех задержек, начиная с каждой новой передачи файла.