Во втором примере пакетные данные считываются через стандартный ввод, поэтому нет необходимости сначала копировать пакетный файл на удаленный компьютер. В этом примере не используется сценарий foo.sh, так как ему нужно было использовать измененную опцию --read-batch, но вы можете отредактировать файл сценария, если хотите использовать его (просто убедитесь, что никакой другой параметр не пытается использовать стандартный ввод, такой как опция "--exclude-from = -").
Предостережения:
Опция read-batch ожидает, что дерево назначения, которое оно обновляет, будет идентичным дереву назначения, которое использовалось для создания набора файлов пакетного обновления. При обнаружении различий между деревьями назначения обновление может быть сброшено с предупреждением (если файл, по-видимому, уже обновлен), или может быть предпринята попытка обновления файла, а затем, если файл не удается проверить , обновление отменено с ошибкой. Это означает, что было бы безопасно перезапустить операцию чтения пакета, если команда была прервана. Если вы хотите, чтобы пакетное обновление всегда выполнялось независимо от размера и даты файла, используйте параметр -I (при чтении пакета). Если произойдет ошибка, дерево назначения, вероятно, будет в частично обновленном состоянии. В таком случае,
Версия rsync, используемая во всех местах назначения, должна быть как минимум такой же новой, как та, которая использовалась для создания командного файла. Rsync умрет с ошибкой, если версия протокола в пакетном файле слишком новая для обработки пакетного чтения rsync. Смотрите также параметр --protocol, чтобы способ создания rsync генерировал пакетный файл, который может понять более старый rsync. (Обратите внимание, что пакетные файлы изменились в версии 2.6.3, поэтому смешивание версий более старых, чем с более новыми версиями, не будет работать.)
При чтении пакетного файла rsync принудительно заставит значения определенных опций соответствовать данным в пакетном файле, если вы не установили их так же, как команда пакетной записи. Другие параметры могут (и должны) быть изменены. Например, --write-batch меняет на --read-batch, --files-from удаляется, а параметры --filter / - include / - exclude не нужны, если не указан один из параметров --delete. ,
Код, который создает файл BATCH.sh, преобразует все параметры фильтра / включения / исключения в единый список, который добавляется в виде документа «здесь» в файл сценария оболочки. Опытный пользователь может использовать это для изменения списка исключений, если необходимо изменить то, что удаляется с помощью --delete. Обычный пользователь может игнорировать эту деталь и просто использовать сценарий оболочки как простой способ запустить соответствующую команду --read-batch для пакетных данных.
Исходный пакетный режим в rsync был основан на «rsync +», но в последней версии используется новая реализация.
remote destination is not allowed with --read-batch
-
имя файла означает чтение из стандартного ввода, а STDIN также читается изfoo
локального файла.Вы можете попробовать использовать унисон . Это должно быть намного быстрее при создании списка файлов, потому что он хранит кэш файлов.
источник
Поддержка
rsync
--batch-mode
многоадресной рассылки. Если это возможно в вашей сети, возможно, стоит изучить это.источник
как насчет смены файловых систем?
Некоторое время назад я переключил мульти-терабайтную FS с ext3 на XFS. Время сканирования каталогов (около 600 000 файлов в прошлый раз, когда я проверял) увеличилось с 15-17 минут до менее 30 секунд!
источник
Не прямой ответ, но если вы используете rsync версии 3+, он начнет передачу до того, как сгенерирует весь список файлов.
Другой вариант, все еще не очень эффективный, состоит в том, чтобы запускать их как задания, так что несколько запускаются одновременно.
Кроме того, я подумал об этой странности, если вы не возражаете против использования tar:
Конечно, где каждый локальный хост - это разные серверы (предполагается, что для входа используется ключ). Никогда не использовал выше, хотя.
источник
Как насчет запуска заданий rsync из host1, host2 и host3? Или запустите задание для копирования на host1, а затем запустите его на host2 и host3, чтобы получить его с host1.
источник
Лучшим решением было бы создать репозиторий с git и просто отправить 3 хостам. Быстрее вам не понадобится часть списка файлов, и она потребляет меньше ресурсов.
Удачи,
Жоао Мигель Невес
источник
.git/
хотя отправка на удаленные узлы, которые уже имеют большую часть данных, будет быстрее. Git не является заменой Rsync.http
,nfs
иafp
. GitHub - это веб-сайт, который заботится о создании и поддержке git-репозиториев для вас и делает их общедоступными (если вы не платите).В поисках этого ответа я думаю, что вам нужно сначала создать пакет, используя rsync, а затем отправить его всем им, что приведет к тому, что список файлов будет сжат только один раз, а затем вы можете просто фон все три rsyncs, чтобы запустить их параллельно.
источник
Другое возможное решение - просто запустить столько процессов rsync параллельно, сколько у вас есть хостов, то есть fork.
источник