Синхронизировать несколько хостов, используя унисон

3284
highsciguy

Я пытаюсь синхронизировать три машины, на одной из которых я работаю в унисон для синхронизации двух других. Эта «звездная» архитектура рекламируется в руководстве по унисону:

Использование Unison для синхронизации более двух машин

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

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

Но после начальной синхронизации с

unison -fat -batch "$HOME/dir" ssh://"$myhost1//dir" unison -fat -batch "$HOME/dir" ssh://"$myhost2//dir" 

для обоих хостов я всегда получаю следующую ошибку для одного из них:

Неустранимая ошибка: внутренняя ошибка: архивы на диске не идентичны.

Это может произойти, когда обе машины имеют одинаковое имя хоста.

Если это не так, и вы получаете это сообщение несколько раз, пожалуйста: a) Отправьте отчет об ошибке на unison-users@yahoogroups.com (вам может потребоваться присоединиться к группе, прежде чем вам будет разрешено оставлять сообщения). б) Переместите архивные файлы на каждом компьютере в какой-либо другой каталог (в случае, если они могут быть полезны для отладки). Архивные файлы на этом компьютере находятся в каталоге /home/andreas/.unison и имеют имена вида arXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, где X - шестнадцатеричное число. c) Снова запустите unison для синхронизации с нуля.

Если я буду следовать инструкциям б), или если я бегу

unison -ignorearchives -fat "$HOME/dir" ssh://"$myhost1//dir" 

Я успешно синхронизирую это. Но тогда, когда вы нажмете другую, появится та же ошибка, что и выше. Кажется, что когда я синхронизирую одну из них, другая будет в несовместимом состоянии. Как я могу это исправить, кроме как всегда добавлять -ignorearchives? Unison версия 2.40.102 из пакетов Ubuntu и Android-приложения Unison.

3
Вы инициируете обе синхронизации из «центра» (центра) звезды? Я этого не делаю; Я запускаю синхронизацию из «подсказок» звезды, а хаб является сервером без головы (где-то в Швейцарии ;-)). Сохраняются ли ваши проблемы, если вы инициируете синхронизацию из $ myhost1 и $ myhost2 (при условии, что они отличаются от концентратора)? Edward 10 лет назад 0
Я думал о попытке изменить направление и теперь точно буду. Однако мне было бы очень неудобно делать это постоянно, так как два «совета» - это небольшие устройства для Android. Мой скрипт резервного копирования на «хабе» содержит логику для обнаружения этих устройств в локальной сети и их автоматического подключения. Тогда мне также нужно было бы взглянуть на различия на андроидах. Может быть, есть опция командной строки, которая меняет направление синхронизации, если есть зависимость от него? highsciguy 10 лет назад 0
Я могу добавить, что, если я попробую очевидное - изменить каталоги в команде, то есть `unison -fat ssh: //" $ myhost1 // dir "" $ HOME / dir "` и т. Д., Возникает та же проблема. highsciguy 10 лет назад 0
Пытаясь выполнить синхронизацию с одного из устройств Android, я обнаружил, что он несколько раз завершается с ошибкой `Uncaught unix error: read failed: Try again`, так что мне это тоже не представляется возможным. highsciguy 10 лет назад 1

1 ответ на вопрос

6
highsciguy

It turns out that the 'fatal error' message is more appropriate than I thought. The origin of the trouble (which would in a two-machines setup occur if a host changes its name) is that the two Android devices to sync with host names were both determined to be localhost, even though they are different and specified by different IP-addresses.

According to the unison manual the hostname can be given by hand by exporting the UNISONLOCALHOSTNAME environment variable. Since unison does not create a login shell however it cannot be exported in the .profile file on the sync devices. It turned out that also the ./ssh/environment file of my ssh servers (SshDroid in both cases) was not read. Finally the android hostname (which can be set with setprop net.hostname [hostname]) is also not read by unison. Instead it seems to default to localhost.

Therefore I came up with the following workaround:

unison -servercmd "export UNISONLOCALHOSTNAME=host1; unison" ssh://"$myhost1//dir" "$HOME/dir" unison -servercmd "export UNISONLOCALHOSTNAME=host2; unison" ssh://"$myhost2//dir" "$HOME/dir" 

Here the -servercmd option defines which command to run on the remote devices to start unison. In my version it exports the UNISONLOCALHOSTNAME to two different values first.

Then the hosts are recognized to be different and it is possible to repeatedly sync multiple 'tips' from a central 'hub' in a 'star' setup.

+1 за ваше исследование; На самом деле я не знал, что на андроиде возможно сделать унисон; надо посмотреть на это ;-) Edward 10 лет назад 0
Это новое. Ищите унисон в Google PlayStore. Я предполагал, что у вас есть ssh-сервер и busybox. Тогда достаточно базового бесплатного приложения. Вам также необходимо создать символическую ссылку на двоичный файл на вашем пути. highsciguy 10 лет назад 0