hig*_*guy 4 ssh unix sync unison
我试图让三台机器保持同步,我在其中一台机器上运行一致以同步另外两台机器。这个“明星”架构在统一手册中做了广告:
使用 Unison 同步两台以上机器
Unison 设计用于同步副本对。但是,可以通过执行多个成对同步来使用它来保持更大的机器组同步。
如果您需要这样做,最可靠的设置方法是将机器组织成“星型拓扑”,其中一台机器被指定为“中心”,其余机器被指定为“辐条”,并且每个辐条机器同步只有集线器。星型拓扑的一大优势在于它消除了混淆“虚假冲突”的可能性,因为 Unison 为其同步的每对主机维护一个单独的存档。
但是,在与
unison -fat -batch "$HOME/dir" ssh://"$myhost1//dir"
unison -fat -batch "$HOME/dir" ssh://"$myhost2//dir"
Run Code Online (Sandbox Code Playgroud)
对于两个主机,我总是收到其中之一的以下错误:
致命错误:内部错误:磁盘上的存档不相同。
当两台机器具有相同的主机名时,就会发生这种情况。
如果不是这种情况并且您反复收到此消息,请: a) 将错误报告发送至 unison-users@yahoogroups.com(您可能需要先加入群组,然后才能被允许发帖)。b) 将每台机器上的存档文件移动到其他目录(以防它们对调试有用)。这台机器上的存档文件位于目录 /home/andreas/.unison 中,名称格式为 arXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,其中 X 是十六进制数。c) 再次运行一致以从头开始同步。
如果我按照说明 b),或者如果我运行
unison -ignorearchives -fat "$HOME/dir" ssh://"$myhost1//dir"
Run Code Online (Sandbox Code Playgroud)
我成功同步了这个。但是然后snycing另一个会产生与上面相同的错误。似乎每当我同步其中一个时,另一个就会处于不一致的状态。除了总是添加之外,我该如何解决这个问题-ignorearchives?Unison 版本是 2.40.102,来自 ubuntu 包和 android Unison 应用程序。
事实证明,“致命错误”消息比我想象的更合适。问题的根源(如果主机更改其名称,将在两台机器设置中发生)是要与主机名同步的两个 Android 设备都被确定为localhost,即使它们不同并由不同的 IP 指定-地址。
根据统一手册,可以通过导出UNISONLOCALHOSTNAME环境变量手动给出主机名。由于 unison 不会创建登录外壳,因此无法.profile在同步设备上的文件中导出。事实证明,./ssh/environment我的 ssh 服务器(两种情况下都是 SshDroid)的文件也没有被读取。最后,android 主机名(可以用 设置setprop net.hostname [hostname])也不会被一致读取。相反,它似乎默认为localhost.
因此,我想出了以下解决方法:
unison -servercmd "export UNISONLOCALHOSTNAME=host1; unison" ssh://"$myhost1//dir" "$HOME/dir"
unison -servercmd "export UNISONLOCALHOSTNAME=host2; unison" ssh://"$myhost2//dir" "$HOME/dir"
Run Code Online (Sandbox Code Playgroud)
这里的-servercmd选项定义了在远程设备上运行哪个命令以启动一致。在我的版本中,它首先将 导出UNISONLOCALHOSTNAME为两个不同的值。
然后主机被识别为不同的,并且可以从“星形”设置中的中央“集线器”重复同步多个“提示”。
| 归档时间: |
|
| 查看次数: |
4545 次 |
| 最近记录: |