Я хочу начать регулярное резервное копирование моего домашнего каталога на моем ноутбуке ubuntu, машине X. Предположим, у меня есть доступ к 2 различным удаленным (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, но я думаю, что в данном случае это излишне и может не соответствовать разобщенности.
Есть умные способы сделать это, и простые. По возможности я бы предпочел простое.
Могли бы вы сделать X -> A, а затем A -> B?
Также существуют такие методы, как Унисон, но, похоже, это относится только к одной реплике и является двунаправленной, что не так полезно для резервного копирования. Однако, если и A, и B запускают что-то в Unison, кажется, что клиент X может затем выполнить резервное копирование на A или B, и это хорошо бы добралось до другого.
Подойдет ли вам Dropbox?
Вы хотите, чтобы X инициировал синхронизацию с A, который затем извлечет данные из X и, когда закончится, нажмите на B. Сценарий на A может просто проверить наличие где-то файла, который загружается в A X, когда он онлайн и готов к синхронизации. Когда он будет извлекать из X, он должен нажать на B и по завершении удалить файл. В качестве альтернативы у вас может быть почти один и тот же сценарий как для A, так и для B, но когда A завершает извлечение из X, он помещает файл в B, говоря ему, что он синхронизируется с A. Если у вас было более двух машин для синхронизации, это было бы путь с тех пор синхронизация может затем просто проходить через все из них (возможно, в виде распределенного дерева, а не линейного)
гибак я думаю, подходит для этого.
Вы можете заставить переносной компьютер отдать команду серверам друг от друга, а затем передать их любому серверу; хотя это означает, что ноутбуку придется подождать и, возможно, дольше оставаться в сети. Вы можете добавить cronjobs, чтобы серверы вытягивали друг друга. Или вы можете заставить ноутбук нажимать на A, а A нажимать на B в крючке после получения, что проще.
Я думаю, что решение Майкла Граффа - лучшая идея. rsync X -> A. Тогда A -> B.
Если вам нужно другое предложение, которое сократит время вычислений, вы можете посмотреть xdelta (http://xdelta.org/). По сути, это то же решение, что и multi-hop rsync, с тем преимуществом, что оно может сэкономить вам время на вычисление delatas на каждом прыжке. Если задействованные файлы большие, это может существенно сэкономить время.
Джим С. http://www.kleobackup.net
Я согласен с наэлин, это похоже на сценарий для Dropbox
Как вы говорите, вы используете Ubuntu. я думал Ubuntu One также должен был обеспечивать эту функциональность. Сам не пользуюсь, но стоит взглянуть.