Мой сценарий - распределить несколько файлов ГБ с промежуточного сервера на десятки идентичных конечных серверов. Поскольку rsync может выполнять дельта-передачу или инкрементное копирование, мне было интересно, когда файл rsync отправляется на 1-й целевой сервер, может ли rsync экспортировать результат дельта-передачи? И используйте импорт этого результата для синхронизации с остальными серверами dest. В этом случае промежуточный сервер может сэкономить процессорное время на пересчете дельта-передачи. Это возможно?
Number of files: 160
Number of files transferred: 49
Total file size: 2993222827 bytes = 2854 MB
Total transferred file size: 1847285024 bytes =1761 MB
Literal data: 69543644 bytes = 66 MB
Matched data: 1777741380 bytes = 1695 MB
File list size: 3088
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1256178
Total bytes received: 70240527 = 67 MB
sent 1256178 bytes received 70240527 bytes 182157.21 bytes/sec =
0.17 MB/s total size is 2993222827 speedup is 41.87
Да. Для этого и предназначен пакетный режим rsync. На странице руководства:
Пакетный режим можно использовать для применения одного и того же набора обновлений ко многим идентичным системам. Предположим, у вас есть дерево, которое реплицируется на нескольких хостах. Теперь предположим, что в это исходное дерево были внесены некоторые изменения, и эти изменения необходимо распространить на другие хосты. Чтобы сделать это в пакетном режиме, rsync запускается с параметром write-batch, чтобы применить изменения, внесенные в исходное дерево, к одному из целевых деревьев. Параметр write-batch заставляет клиента rsync сохранять в «пакетном файле» всю информацию, необходимую для повторения этой операции с другими идентичными деревьями назначения.
Однократное генерирование пакетного файла избавляет от необходимости повторять создание состояния файла, контрольной суммы и блока данных более одного раза при обновлении нескольких целевых деревьев. Протоколы многоадресной передачи могут использоваться для передачи файлов пакетных обновлений одновременно на множество хостов, вместо того, чтобы отправлять одни и те же данные на каждый хост по отдельности.
Чтобы применить записанные изменения к другому целевому дереву, запустите rsync с параметром read-batch, указав имя того же пакетного файла и целевое дерево. Rsync обновляет дерево назначения, используя информацию, хранящуюся в пакетном файле.
Пример:
$ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/
$ scp foo* remote:
$ ssh remote ./foo.sh /bdest/dir/