程序 rsync 可以选择--max-size=SIZE
禁止传输任何大于SIZE
. 统一有类似的选择吗?
我在我的机器上经常使用同步。Excel 会在打开文件的那一刻更改修改日期。然后,它更改文件的内容(我想更新嵌入在工作表中的统计信息)。然后,如果用户不打算保存文件,它会将日期更改回原始日期。这种行为让我的同步方案(Unison)很困惑,迫使我手动解决很多冲突。
众所周知,Unison 通过忽略 Microsoft Excel 文件的修改时间并始终比较文件内容来规避此问题。不幸的是,我经常在多台机器上同时打开相同的文件,并且从不在那里保存更改,随后我不得不在下一次同步事件时解决冲突。此外,散列大量大型 Excel 工作表的速度很慢。
有没有办法关闭这个“功能”,或者绕过它?也许是文件的一些只读按需容器。但是 - 如果我确实想保存文件怎么办?我不能在只读介质上这样做,对吗?
我需要一个分布式文件系统(或同步工具),它能够在 4 台电脑上保持目录同步。
我的要求是:
我的解决方案的其他规格是:
我还没有找到任何好的解决方案。我一直在尝试:
接下来要尝试什么?
我已经使用以下行在2 个文件夹(在 OSX 中)之间设置了自定义自动同步:
unison folder1 folder2 -batch -debug update+
Run Code Online (Sandbox Code Playgroud)
直到我遇到:
Synchronization complete at 12:01:44 (0 item transferred, 1 skipped, 0 failed)
skipped: example.txt (contents changed on both sides)
Run Code Online (Sandbox Code Playgroud)
我希望该命令自动同步最新版本。查看选项:
$ unison -help | grep conflict
-auto automatically accept default (nonconflicting) actions
-copyonconflict keep copies of conflicting files
-prefer xxx choose this replica's version for conflicting changes
Run Code Online (Sandbox Code Playgroud)
..这表明解决问题的唯一方法是 with -prefer
,但我可能会遗漏一些东西。是否可以通过时间戳指定版本?
编辑:同步报告的所有相关位:
[update+] Unchanged file
[update+] buildUpdateChildren(handleChild): example.txt
[update] buildUpdateRec: /path/to/folder1/example.txt
[update] checkContentsChange: archStamp is inode (3373366) / info.inode …
Run Code Online (Sandbox Code Playgroud) OS X 的 Unison GUI 不断在我的主目录中创建一个“unison.log”文件。
这是迟钝的,它应该隐藏文件(“.unison.log”),或者将它放在适当的位置,而不是在我的主目录中。
你知道有什么方法可以防止它这样做吗?(无需破解源代码并重新编译)
我只能想出一个守护进程来检查该文件并删除它,但也许有更好的方法......
我试图让三台机器保持同步,我在其中一台机器上运行一致以同步另外两台机器。这个“明星”架构在统一手册中做了广告:
使用 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 应用程序。
我已经使用 Linux 很长时间了,但我仍然完全不了解文件权限的真正工作原理。考虑到这一点,是否有人可以阅读任何书籍或详尽的指南来真正完全理解事物?我已经完成了我对系统管理的公平分享,所以我知道一些简单的事情,比如使目录可读和可写、使文件可执行以及更改文件的所有者,但是在跨用户共享文件时,我迷路了。
这是我的主要问题。我有许多机器,我打算在它们之间同步我的音乐库。我已经使用 Unison 有一段时间了,这是一个不错的选择,因为我可以在我刚刚设置的本地网络上通过 SSH 轻松运行它。双赢。
到目前为止,我一直在使用 2TB 外置硬盘同步计算机。(计算机 1 与 HD 同步,计算机 2 与 HD 同步,等等)这充其量是乏味的,尤其是因为我加密了驱动器,使其连接到我的所有机器并同步它变得非常麻烦。无论如何,驱动器正在运行 ext4(在 TrueCrypt 中),因此它维护所有 Unix 文件系统信息,如所有者和组。我刚刚设置了一台新机器,然后就用 Unison 来播放音乐,我意识到现在,我的所有权限都是 fubar。我必须以 root 身份运行 Unison,因为这是我可以从外部驱动器中获取文件的唯一方法。显然,由于我在这台机器上使用的用户名与我在所有机器上通常使用的“rfkrocktk”不同,这基本上会在齿轮上产生巨大的影响。
这是我的用例。这台笔记本电脑有两个有效用户,“leandra”和“rfkrocktk”。我想在这两个用户之间共享音乐,所以我用符号链接 /home/rfkrocktk/Music 指向 /home/leandra/Music。我如何 (a) 允许两个用户都访问此文件夹中的读/写/删除文件,以及 (b) 在不弄乱文件所有权的情况下使所有内容保持同步?
我能够让事情有点工作,但还没有完全。我将我的音乐目录的组 ID 设置为我的组media-users
,并将我的主用户rfkrocktk
和共享用户都添加mt-daapd
到组中。现在,rfkrocktk
可以完美访问文件,但mt-daapd
看不到目录中的任何内容。这是我的ID:
$ id rfkrocktk
> uid=1000(rfkrocktk) gid=1000(rfkrocktk) groups=1000(rfkrocktk),4(adm),20(dialout),24(cdrom),29(audio),46(plugdev),104(lpadmin),115(admin),120(sambashare),124(vboxusers),1001(jupiter),2002(media-users)
$ id mt-daapd
> uid=123(mt-daapd) gid=65534(nogroup) groups=65534(nogroup),2002(media-users)
Run Code Online (Sandbox Code Playgroud)
我尝试将mt-daap
的主组 ID 设置为media-users
组,但它没有改变任何内容。
这是我对/home/rfkrocktk/Music
目录的权限:
drwxr-Sr-- 201 …
Run Code Online (Sandbox Code Playgroud) unison ×7
sync ×3
macos ×2
file-sharing ×1
gui ×1
linux ×1
owncloud ×1
permissions ×1
rsync ×1
sparkleshare ×1
ssh ×1
unix ×1
windows ×1