Мониторинг прогресса Rsync - PullRequest
17 голосов
/ 23 августа 2011

Я пытаюсь написать скрипт Python, который будет отслеживать передачу rsync и предоставлять (приблизительную) оценку процентного прогресса.Для моей первой попытки я посмотрел на команду rsync --progress и увидел, что она печатает такие сообщения:

1614 100%    1.54MB/s    0:00:00 (xfer#5, to-check=4/10)

Я написал парсер для таких сообщений и использовал часть для проверки, чтобы получить процентпрогресс, здесь это будет выполнено на 60%.

Однако в этом есть два недостатка:

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

I 'Мы рассмотрели другие варианты использования сообщений, но не смогли ничего найти.У кого-нибудь есть идеи?

Заранее спасибо!

Ответы [ 4 ]

28 голосов
/ 01 сентября 2011

Текущая версия rsync (на момент редактирования 3.1.2) имеет опцию --info=progress2, которая покажет вам весь процесс передачи вместо отдельных файлов.

С человекомстраница :

Существует также опция --info = progress2, которая выводит статистику на основе всей передачи, а не отдельных файлов.Используйте этот флаг без вывода имени файла (например, избегайте -v или укажите --info = name0, если вы хотите увидеть, как происходит передача без прокрутки экрана с большим количеством имен. (Вам не нужно указывать -Параметр progress для использования --info = progress2.)

Поэтому, если возможно, в вашей системе вы можете обновить rsync до текущей версии, содержащей эту опцию.

8 голосов
/ 16 октября 2011

Вы можете отключить инкрементную рекурсию с помощью аргумента --no-inc-recursive. rsync выполнит предварительную проверку всей структуры каталогов, поэтому он знает общее количество файлов, которые он должен проверить.

Это на самом деле старый способ, которым он повторялся. Добавленная рекурсия, текущее значение по умолчанию, была добавлена ​​для скорости.

5 голосов
/ 25 февраля 2014

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

Один из способов гарантировать, что --info=progress2 не не отскочит назад в индикаторе хода выполнения, состоит в том, чтобы заставить rsync рекурсивно сканировать все каталоги перед запуском синхронизации (вместо того, чтобы по умолчанию выполнять рекурсивное сканирование), также предоставив опцию --no-inc-recursive. Однако обратите внимание, что эта опция также увеличит использование памяти rsync и время выполнения.

0 голосов
/ 30 августа 2011

Для полного контроля над передачей вы должны использовать более низкоуровневый инструмент сравнения и управлять списком каталогов и передачей данных самостоятельно.

На основе librsync есть либо командная строка rdiff , либо модуль python pysync

...