Ускорить / избежать расчета списков файлов rsync

12

Я использую rsync 3.1.1 для синхронизации двух дисков, один из которых находится в сети и подключен как общий ресурс samba /mnt/ROUTER_WD_2TB/. Это источник со скоростью 30-40 МБ / с из-за ограничений сети. Другой, пункт назначения, установлен локально (пик 110 МБ / с) и является /mnt/BACKUP_HITACHI_2TB/.

Я использую следующую команду rsync:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Диски содержат много файлов, большинство из них небольшие.

Проблема в том, что rsync занимает довольно много времени (10-20м), прежде чем начать перемещать какие-либо файлы, я полагаю, потому что он должен вычислять списки файлов для очень большого количества маленьких файлов. В течение этого периода загрузка нового устройства составляет 200-500 КБ / с, тогда как при передаче файлов скорость составляет около 40 МБ / с.

Обычно случается, что rsync занимает около 15 м, чтобы наконец найти то, что ему нужно скопировать, затем 5 секунд, чтобы скопировать его, затем продолжает проверку других файлов для копирования еще 5 минут. В итоге, 5-секундная копия файла длится 20 минут!

Могу ли я предпринять какие-либо меры, чтобы избежать этого длительного периода перед копированием файлов, кроме исключения папок? Любой вид «кеша», который я могу реализовать, чтобы rsync не перестраивал весь список файлов с нуля?

AF7
источник
1
Вы пробовали решение из этой темы? unix.stackexchange.com/questions/189878/...
У
@UVV Я этого не делал. я могу сделать это, однако 1) rsync, похоже, уже не использует полное ядро ​​в моем случае, по какой-то причине (= я не уверен, ограничен ли у меня процессор или лимит находится в другом месте) и 2) Это только на двухъядерном процессоре, так что даже если бы улучшение было в 2 раза, все равно был бы большой запас для улучшения.
AF7
Да, это кажется мне безумным, почему rsync так медлителен в этом? Даже с "--size-only" rsync, кажется, требуется вечно, чтобы построить свой список добавочных файлов. Почему? Я могу вручную проверить размеры файлов и определить, какие из них изменились намного быстрее! На что тратится так много времени, и как отключить эти необычные функции? РЕДАКТИРОВАТЬ: Ах, неважно, у меня был случайно установлен флаг 'c'. Без контрольных сумм это очень быстро.
Бен Фармер

Ответы:

5

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

Тем не менее, здесь есть другие варианты, чтобы рассмотреть

  1. Копирование, не беспокоясь об удалении старых файлов. Это может позволить вам выполнять более быструю передачу чаще и откладывать более медленную очистку, скажем, раз в день:

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. Используйте вариант rsyncалгоритма удаления по умолчанию, чтобы избежать создания полного списка файлов перед передачей:

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. Разделите каталоги верхнего уровня на отдельные задачи и выполняйте их параллельно. Вы можете обнаружить, что если вы привязаны к дисковым IO, то это не очень поможет, а для вращающихся дисков это почти наверняка ухудшит ситуацию.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

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

roaima
источник
--delete --delete-duringне сделал это для меня - это все еще отправляло добавочный список файлов - но --delete --delete-beforeпошло прямо к:, building file listчто кажется значительным прогрессом. Я думаю.
mlissner
Нет, боюсь, это задом наперед. Если вы используете --delete-before, то rsyncвыполняет два прохода по дереву файлов: один для удаления, а другой для копирования.
Ройма
Благодарю. В таком случае ... есть ли способ избежать создания списка добавочных файлов?
mlissner
@mlissner это зависит от нескольких факторов. Самым большим из них является то, выполняете ли вы локальное или локальное копирование.
Роайма
Это все локально для меня, хотя один из местных это USB-диск?
mlissner
-2

Вы можете использовать, -vvчтобы увидеть весь журнал rsync.

namaiiee
источник
2
Как это ответит на вопрос, то есть как это ускорит процесс?
Кусалананда
Вы можете просто просмотреть журналы, которые показывают, почему для запуска rsync потребовалось так много времени, возможно, есть файлы, которые можно пропустить из rsync, чтобы сократить время.
Namaiiee