Простой распределенный автономный способ синхронизации каталога

Простой распределенный автономный способ синхронизации каталога

Я хочу начать регулярное резервное копирование моего домашнего каталога на моем ноутбуке с Ubuntu, машине X. Предположим, у меня есть доступ к двум разным удаленным (Linux) серверам, на которые я могу выполнять резервное копирование, машинам A и B. Машина X будет главной и должна синхронизироваться с A и B. Я могу просто регулярно запускать rsync с X на A, а затем с X на B. Это все, что мне нужно.

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

Как лучше всего это сделать? rsync из X в A, затем из A в B? Правильный выбор времени может быть проблематичным. Я не хочу хранить старые файлы, поэтому если бы я использовал rsync, то эта --delопция была бы использована. Может ли это означать, что что-то может быть перенесено из A в B, затем удалено из B, затем снова перенесено из A в B? Это неоптимально.

Я знаю, что существуют сложные распределенные файловые системы, такие как Gluster, но я думаю, что в данном случае это излишне и может не соответствовать природе изолированной сети.

решение1

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

Можете ли вы сделать X -> A, а затем A -> B?

Есть также такие методы, какУнисон, но это, кажется, идет только к одной реплике, и это двунаправленно, что, кажется, не так полезно для резервного копирования. Однако, если и A, и B запустили что-то на Unison, похоже, клиент X мог бы тогда сделать резервную копию на AилиБ, и он прекрасно доберется до другого.

решение2

Вы хотите, чтобы X инициировал синхронизацию с A, которая затем извлечет данные из X и по завершении отправит их в B. Скрипт на A может просто проверить наличие файла где-то, который загружается в A с помощью X, когда он находится в сети и готов к синхронизации. Когда он закончит извлечение из X, он должен отправить данные в B и по завершении удалить файл. В качестве альтернативы вы можете иметь почти одинаковый скрипт на обоих A и B, но когда A закончит извлечение из X, он помещает файл на B, сообщая ему синхронизироваться с A. Если у вас больше 2 машин для синхронизации, это был бы выход, поскольку тогда синхронизация может просто каскадироваться через все из них (возможно, в виде распределенного дерева, а не линейного).

решение3

Подойдет ли вам Dropbox?

решение4

Я думаю, что решение Майкла Граффа — лучшая идея. rsync X -> A. Затем A -> B.

Если вам нужно другое предложение, которое сократит время вычислений, вы можете взглянуть на xdelta (http://xdelta.org/). По сути, это то же самое решение, что и многоадресный rsync, с тем преимуществом, что оно может сэкономить вам время на расчет дельтас на каждом переходе. Если задействованные файлы большие, это может стать существенной экономией времени.

Джим С. http://www.kleobackup.net

Связанный контент