Как перенести большой файл с локального на удаленный ящик с автоматическим возобновлением и передать только то, что изменилось? - PullRequest
1 голос
/ 18 декабря 2010

я пробую следующую команду rsync -av --progress --inplace --rsh = 'ssh' /home/tom/workspace/myapp.war root@172.241.181.124: / home / rtom / uploads

Но, похоже, он снова передает весь файл каждый раз, когда я выполняю команду, когда я делаю небольшое изменение в приложении, которое генерирует myapp.war.

Я также хочу, чтобы соединение автоматически возобновлялось, если соединение потеряно. Я думаю, что эта часть работает.

Передача должна происходить через ssh.

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

1 Ответ

3 голосов
/ 18 декабря 2010

rsync эффективно обрабатывает относительно небольшие изменения и частичные загрузки в файл.В этом направлении были предприняты значительные усилия в алгоритме rsync .

Проблема заключается в том, что WAR-файлы представляют собой «расширенные» JAR-файлы, которые по сути являются архивами ZIP и, следовательно, сжаты.

Небольшое изменение в несжатом файле изменит весь сжатый сегмент, к которому принадлежит этот файл, и, что наиболее важно, также может значительно изменить его размер.Это может преодолеть способность rsync обнаруживать и обрабатывать изменения в конечном сжатом файле.

В архивах ZIP каждый несжатый файл имеет свой собственный сжатый сегмент.Поэтому порядок , в котором файлы помещаются в архив, также важен для достижения степени сходства с предыдущей версией.В зависимости от того, как создается файл WAR, простое добавление нового файла или его переименование может привести к перемещению сегментов, что по существу делает файл WAR неузнаваемым.Другими словами:

Небольшое изменение в вашем приложении обычно означает довольно большое изменение в вашем файле WAR.

rsync не предназначено для обработки изменений в сжатом видефайлы.Тем не менее, он может обрабатывать изменения в вашем приложении.Одним из решений было бы использовать его для загрузки файлов вашего приложения, а затем создать файл WAR на удаленном хосте.

Несколько иной подход - не требующий инструментов разработки на удаленном хосте - состоял бы в распаковке(например, распакуйте) файл WAR локально, загрузите его содержимое, а затем снова упакуйте (т.е. заархивируйте) его на удаленном хосте.Это решение требует только реализации zip или jar на удаленном хосте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...