Если :
- Время модификации ваших файлов правильное
- Файлы не очень большие
- Невозможно пропустить push (или есть какая-то обработка невыполненных заданий)
Вы можете использовать find -ctime
или, file -cnewer
чтобы составить список измененных файлов с момента последнего выполнения, и копировать только измененные файлы (просто прославленное дифференциальное нажатие).
Это довольно неплохо получилось для нескольких хостов: просто сделайте разностную tar на источнике и распакуйте его на всех хостах.
Это дает вам что-то вроде этого:
find -type f -cnewer /tmp/files_to_send.tar.gz > /tmp/files_to_send.txt
tar zcf /tmp/files_to_send.tar.gz --files-from /tmp/files_to_send.txt
for HOST in host1 host2 host3 ...
do
cat /tmp/files_to_send.tar.gz | ssh $HOST "tar xpf -"
done
Сценарий должен быть доработан, но вы поняли идею.
Предполагая, что данные, которые вы запрашиваете, еще не сжаты, включение сжатия (-z), вероятно, поможет повысить скорость передачи, за счет некоторого ЦП на любом конце.
источник
Если вы передаете очень большие файлы с большим количеством изменений, используйте опции --inplace и --whole-file, я использую их для своих образов виртуальной машины 2 Гб, и это очень помогло (главным образом, из-за того, что протокол rsync мало что сделал с передачей дополнительных данных с этими файлами). Я не рекомендую эти варианты для большинства случаев, хотя.
используйте --stats, чтобы увидеть, насколько хорошо ваши файлы передаются по инкрементному протоколу rsync.
источник
Другая стратегия - сделать ssh и rsync быстрее. Если вы используете доверенную сеть (читай: частную), то шифрование фактической полезной нагрузки не требуется. Вы можете использовать HPN SSH . Эта версия SSH только шифрует аутентификацию. Кроме того, rsync версии 3 начинает передачу файлов при создании списка файлов. Это, конечно, огромная экономия времени по сравнению с Rsync версии 2. Я не знаю, если это то, что вы искали, но я надеюсь, что это поможет. Кроме того, rsync каким-то образом поддерживает многоадресную передачу, хотя я не буду притворяться, что понимаю, как это сделать.
источник
Когда вы выполняете rsyncing в качестве метода резервного копирования, самая большая проблема, с которой вы столкнетесь, - это наличие большого количества файлов, для которых вы выполняете резервное копирование. Rsync может обрабатывать большие файлы без проблем, но если число файлов, для которых вы создаете резервную копию, становится слишком большим, вы заметите, что rsync не завершится за разумное время. Если это произойдет, вам нужно будет разбить резервную копию на более мелкие части, а затем перебрать эти части, например:
или зарезервировать набор файлов, чтобы уменьшить количество файлов.
Что касается того, как десятки машин получают зеркало этих изменений, это зависит от того, насколько свежей должна быть резервная копия. Один из подходов состоит в том, чтобы отразить изменения с основного сервера на сервер резервного копирования, а затем заставить другие серверы извлекать свои изменения с сервера резервного копирования либо с помощью демона rsync на исходном сервере резервного копирования, а затем либо планировать, чтобы другие серверы выполняли небольшую работу. в другое время или с помощью сценария используйте ssh без пароля для подключения к каждому из серверов и попросите их извлечь свежую копию резервной копии, которая поможет предотвратить перегрузку вашего первоначального сервера резервного копирования - но от того, насколько много вы столкнетесь, будет зависеть на скольких других машинах у вас тянет копию бэкапа.
источник
find /Backup/ -name '*.bak' -print0 | xargs -0 -n 1 rsync -e ssh
?У rsync есть способ делать отключенные копии. Другими словами, rsync может (концептуально) различать дерево каталогов и создавать файл исправлений, который затем можно применить к любому количеству файлов, идентичных исходному источнику.
Это требует, чтобы вы вызвали rsync с мастером и зеркало с
--write-batch
; это производит файл. Затем вы передаете этот файл любому количеству других целей, а затем применяете пакет к каждой из этих целей, используя--read-batch
.Если вы храните локальную копию последнего состояния rsynced (то есть копию того, как зеркала выглядят прямо сейчас) на той же машине, что и мастер, вы можете сгенерировать этот «патч» на мастере, даже не связываясь ни с одним зеркалом:
По мастеру:
Добавьте любые другие варианты, которые вы хотите. Это сделает две вещи:
/current/mirror
изменения, чтобы отразить/master/data
my-batch.rsync
для последующего использования.Перенесите
my-batch.rsync
файл с мастера на все ваши зеркала, а затем на зеркала примените патч так сказать:Преимущества такого подхода:
--read-batch
на самом зеркале интенсивно работает только процессор)источник