Rsync игнорирует временные метки файла и автоматически перезаписывает на клиенте, если файл отличается на сервере? - PullRequest
8 голосов
/ 04 сентября 2010

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

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

Однако на странице http://www.linuxjournal.com/content/synchronizing-your-life указано следующее:

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

Вы можете передать флаг '--update' в rsync что заставит его пропускать файлы на пункт назначения, если они новее, чем файл на исходнике, но только так Пока они одного типа файл. Это означает, что если для Например, исходный файл является обычным файл и назначение является символической ссылкой, файл назначения будет перезаписывается независимо от метки времени. Даже глядя сквозь его причуды, Флаг --update не решает проблему, потому что все, что он делает, это пропускает файлы в месте назначения, если они новее, это не тянет эти изменения вплоть до исходного компьютера.

Это правильно?

Если это так, то, по-моему, это делает rsync действительно полезным только для резервного копирования одного главного («исходного») компьютера на одного или нескольких подчиненных, которые получат изменения от ведущего независимо от временных отметок. В то время как проблема, которую я действительно пытаюсь решить, состоит в том, чтобы две машины были «равноправными» и одинаково просто получали последние обновленные файлы от другой.

Или, как вы думаете, мне просто нужно прикусить пулю и использовать git или Mercurial, несмотря на дополнительное место на диске для отслеживания версий?

(Да, я знаю о Dropbox; я намного выше лимита бесплатного аккаунта в 2 ГБ и не очень заинтересован в том, чтобы тратить $ 120-240 в год, когда мне не нужно облачное хранилище и что-то такое простое должно 1022 * было сделано раньше с помощью бесплатных и открытых инструментов.)

Оба ПК работают под управлением XP, но я собирался использовать Cygwin rsync и любые другие инструменты Unixy, необходимые для выполнения работы.

Ответы [ 4 ]

6 голосов
/ 18 декабря 2012
rsync av --update /loc1 /loc2

, поэтому только файлы NEWER будут синхронизироваться из loc1 в loc2. Логика диктует, что любые файлы, которые являются более новыми на loc2, не будут затронуты. Поэтому все устаревшие файлы на loc2 будут обновляться благодаря loc1

rsync av --update /loc2 /loc1

Теперь мы знаем, что все файлы, которые имели loc1, которые были более новыми, были скопированы в loc2. Все файлы, которые были старше на loc1 (у которых были новые на loc2), остались без изменений. Вторая команда rsync теперь обновит loc1 с файлами, более новыми на loc2

Et Voila! в этом примере синхронизируются оба местоположения.

6 голосов
/ 21 августа 2012

Если у вас есть проблемы с rsync и временными метками, возможно, вам нужно посмотреть на точность, с которой временные метки хранятся в ваших различных файловых системах, участвующих в синхронизации.

Используйте fstat, чтобы определить это: если вы синхронизируете файл, а оригинал имеет метку времени 2012-01-10 23: 41: 04.348724000 и метку времени синхронизированного файла 2012-01-10 23: 41: 04.000000000, тогда это является признаком разницы в точности.

Опция rsync --modify-window=1 может справиться с этой разницей в точности, допуская небольшую разницу.

3 голосов
/ 05 сентября 2010

После тестирования я считаю, что ответ на этот вопрос - да.

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

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

В моем тестировании более новый, измененный файл на моем локальном компьютере был перезаписан более старым файлом на сервере (хотя я использовал опцию --update).

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

Мне придется заглянуть в Mercurial или, возможно, в Microsoft SyncToy (так как на обеих машинах установлена ​​XP); Я, вероятно, пойду с последним, поскольку это простая домашняя сеть.

2 голосов
/ 27 апреля 2011

Вы пытались выполнить rsync --update дважды. Я могу ошибаться, но я думаю следующее пара команд обеспечит двунаправленную синхронизацию.

rsync -avz --stats - update geezer / merlin

rsync -avz --stats - обновить Мерлин / Гизер

здесь это просто синхронизация 2 каталогов geezer и merlin, но я думаю, что он должен вести себя одинаково если source и dir были полными путями, включая имена машин.

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