Мониторинг Rsync Progress

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

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

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

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

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

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

Спасибо заранее!

Ответы

Ответ 1

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

От справочная страница:

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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