Чтобы синхронизировать огромные файлы или блочные устройства с низкой или средней разницей, вы можете либо сделать простое копирование, либо использовать bdsync , rsync совершенно не подходит для этого конкретного случая *.
bdsync
работал для меня, кажется достаточно зрелым, его история ошибок внушает оптимизм (небольшие проблемы, быстрое решение). В моих тестах скорость была близка к теоретическому максимуму, который вы могли получить ** (то есть вы можете синхронизировать время, необходимое для чтения файла). Наконец, это с открытым исходным кодом и ничего не стоит.
bdsync
читает файлы с хостов и обменивается контрольными суммами, чтобы сравнить их и обнаружить различия. Все это одновременно . Наконец, он создает сжатый файл патча на исходном хосте. Затем вы перемещаете этот файл на хост назначения и запускаете bdsync второй раз, чтобы исправить файл назначения.
При использовании его по довольно быстрой ссылке (например, 100 Мбит Ethernet) и для файлов с небольшими различиями (как это чаще всего имеет место на дисках ВМ) это сокращает время синхронизации до времени, необходимого для чтения файла. По медленной ссылке вам нужно немного больше времени, потому что вам нужно скопировать сжатые изменения с одного хоста на другой (кажется, вы можете сэкономить время, используя хороший трюк, но не протестировали).
*: rsync очень неэффективен с огромными файлами. Даже с параметром --inplace он сначала прочитает весь файл на целевом хосте, ПОСЛЕ ТОГО, КАК он начинает читать файл на исходном хосте и, наконец, передает различия (просто запустите dstat или аналогичный при запуске rsync и наблюдайте). В результате даже для файлов с небольшими различиями требуется примерно вдвое больше времени, чтобы прочитать файл для его синхронизации.
**: при условии, что у вас нет другого способа узнать, какие части файлов изменились. Снимки LVM используют растровые изображения для записи измененных блоков, поэтому они могут быть чрезвычайно быстрыми (readme из lvmsync содержит больше информации).