Умнее filetransfers чем rsync?

У меня есть большой файл (2-3 ГБ, двоичный, недокументированный формат), который я использую на двух разных компьютерах (обычно я использую его в настольной системе, но когда я путешествую, я кладу его на свой ноутбук). Я использую rsync для передачи этого файла взад и вперед.

Время от времени я делаю небольшие обновления в этом файле, меняя менее 100 кБ. Это происходит в обеих системах.

  • Сравнение времени rsync - какова точность сравнения Модифицированных времен
  • Сравнение массивных каталогов с отчетом о проделанной работе
  • Ускорить / избежать вычисления списков файлов rsync
  • rsync несколько файлов из нескольких каталогов в Linux
  • Перенос файла с удаленного компьютера без консоли
  • Переместить файлы и удалить каталоги с помощью rsync?
  • Проблема с rsync, насколько я понимаю, заключается в том, что если он считает, что файл изменился между исходным и конечным точками, он передает полный файл. В моей ситуации это похоже на большую трату времени, когда меняется только небольшая часть файла. Я предусмотрел протокол, в котором агенты передачи по источнику и месту назначения сначала проверяют весь файл, а затем сравнивают результат. Когда они понимают, что контрольная сумма для всего файла различна, они разбивают файл на две части: A и B и контролируют их отдельно.

    Aha, B одинаково на обеих машинах, давайте проигнорируем эту половину. Теперь он разбивает A на A1 и A2. Хорошо, только A2 изменился. Разделите A2 на A2I и A2II и сравните и т. Д. Сделайте это рекурсивно, пока не найдете, например, три части, каждая по 1 МБ, которая отличается между исходным и конечным точками, а затем передает только эти части и вставляет их в нужную позицию в целевом файле. Сегодня с быстрыми SSD и многоядерными процессорами такая параллелизация должна быть очень эффективной.

    Итак, мой вопрос: есть ли какие-либо инструменты, которые работают так (или иначе, как я не мог себе представить, но с похожим результатом), доступный сегодня?

    Был отправлен запрос на разъяснение. В основном я использую Mac, поэтому файловая система – HFS +. Обычно я запускаю rsync, как это

    rsync -av --delete --progress --stats – в этом случае я иногда использую SSH, а иногда rsyncd. Когда я использую rsyncd, я запускаю его так: rsync --daemon --verbose --no-detach .

    Второе разъяснение: я прошу либо инструмент, который просто передает дельту для файла, который существует в двух местах с небольшими изменениями и / или если rsync действительно предлагает это. Мой опыт работы с rsync заключается в том, что он полностью передает файлы (но теперь есть ответ, который объясняет это: rsync нуждается в сервере rsync, чтобы иметь возможность передавать только дельты, в противном случае (например, используя ssh-shell) он переносит все файл сильно изменился).

  • rsync исключить на основе размера файла?
  • Как сделать sash учетной записи capabele только для sshfs и rsync?
  • Может ли rsync хранить подстановочные имена (возможно, используя переменную)?
  • Переместить файлы и удалить каталоги с помощью rsync?
  • процесс резервного копирования занимает длительное время из-за rsync. Отсутствие пробела на ошибке устройства
  • mv с функциональностью rsync
  • 3 Solutions collect form web for “Умнее filetransfers чем rsync?”

    Rsync не будет использовать deltas, но передаст полный файл целиком, если он – как один процесс – отвечает за исходный и целевой файлы. Он может передавать дельта, когда на исходном и конечном компьютерах выполняется отдельный процесс клиент и сервер.

    Причина, по которой rsync не будет отправлять deltas, когда это единственный процесс, заключается в том, что для определения необходимости отправки дельта ему нужно прочитать исходный и целевой файлы. К тому времени, как это было сделано, он мог бы просто скопировать файл напрямую.

    Если вы используете команду этой формы, у вас есть только один процесс rsync:

     rsync /path/to/local/file /network/path/to/remote/file 

    Если вы используете команду этой формы, у вас есть два процесса rsync (один на локальном хосте и один на удаленном компьютере), и можно использовать дельта:

     rsync /path/to/local/file remote_host:/path/to/remote/file 

    Из раздела ОПИСАНИЕ man rsync :

    Rsync – быстрый и необычайно универсальный инструмент копирования файлов. Он может копироваться локально, на / с другого хоста через любую удаленную оболочку или на / из удаленного демона rsync. Он предлагает большое количество опций, которые контролируют каждый аспект его поведения и позволяют очень гибко специфицировать набор файлов, которые нужно скопировать. Он известен своим алгоритмом дельта-передачи, который уменьшает количество данных, отправляемых по сети, отправляя только различия между исходными файлами и существующими файлами в пункте назначения.

    Так что это будет «нет».

    Вы можете использовать RAID-1 (зеркалирование) для оптимизации этого. Это становится странным с изменением, сделанным с обеих сторон, но это делает использование rsync странным. Вы должны объяснить, как это должно быть обработано.

    1. Вы можете создать файл ( dd if=/dev/zero of=/path/to/syncfile.img bs=1M count=3500 ), который немного больше, чем ваш файл синхронизации будет расти в ближайшем будущем.
    2. Затем вы помещаете устройство цикла поверх этого файла ( losetup /dev/loop5 /path/to/syncfile.img ).
    3. Вы делаете это на обеих системах.
    4. В системе, где изменения должны быть синхронизированы с другой, вы делаете блок-устройство другой системы доступным с помощью сетевых блоков ( nbd ).
    5. Создайте массив RAID-1 на обоих блочных устройствах: mdadm create /dev/md5 --raid-devices=2 --level=raid1 --bitmap=/path/to/ext3volume/sync-bitmap --assume-clean /dev/loop5 --write-mostly /dev/path/to/nbd . Вы должны предоставить --bitmap=/path/to/ext3volume/sync-bitmap при сборке массива позже.
    6. Создайте файловую систему на RAID mke2fs -j /dev/md5 и смонтируйте ее где-нибудь.
    7. Скопируйте файл в том. Это должно быть сделано с хорошим сетевым подключением. Возможно, есть более умный способ записи содержимого файла непосредственно в блок-устройство, которое может быть выполнено локально, но поскольку содержимое файла смешивается с метаданными файловой системы, я не знаю, как это сделать.

    Теперь вы можете отключить устройство сетевого блока. Это приводит к ухудшению RAID-1 с обеих сторон. Если вы хотите синхронизировать, вам необходимо: 1. размонтировать RAID и RAID в системе, в которую вы синхронизированы, 2. настроить nbd снова. 3. горячее добавление nbd в RAID в источнике синхронизации.

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

    проблемы

    F * ск. Теперь, когда я написал все, что я понимаю, что это не работает (хорошо) с изменениями с обеих сторон (в разные области). Он может работать, если вы используете --build вместо --create (что позволяет вам притворяться, что на обоих --create локальное блочное устройство является основным устройством).

    В зависимости от того, как вы хотите, чтобы изменения в обоих направлениях обрабатывались, вы можете попытаться сделать резервные копии файлов растровых изображений (когда оба RAID-массива остановлены!) И просто запустить синхронизацию в обоих направлениях. Или (если вы хотите писать изменения только в одном направлении), тем более, что вы запускаете синхронизацию, останавливаете RAID, заменяете локальную растровую карту на удаленный и снова синхронизируете (и затем синхронизируйте файлы растровых изображений). Это обещает быть большой забавой.

    Снимки LVM

    Нечто подобное можно сделать с моментальными снимками LVM.

    Linux и Unix - лучшая ОС в мире.