统一和扩展文件属性

zer*_*tas 5 rsync xattr unison

我有两台机器,一台 Debian,一台 Ubuntu,都在 ext4 上,在 fstab 中启用了扩展文件属性。getfattr 和 setfattr 已安装并在本地两台机器上完美运行。但是,默认情况下,unison(版本 2.40.102)不会同步扩展文件属性。

我搜索了一下,发现这篇博客文章包含应该启用扩展属性同步的配置文件设置。所以,我改变了我的个人资料,现在它看起来像这样:

root=/path/to/dir
root=ssh://user@example.com//path/to/dir2
auto=true
batch=true
perms=0
rsync=true
maxthreads=1
retry=3
confirmbigdeletes=false
copythreshold=0
copyprog = rsync -aX --rsh='ssh -p 22' --inplace --compress
copyprogrest = rsync -aX --rsh='ssh -p 22' --partial --inplace --compress
copyquoterem = true
copymax = 1
Run Code Online (Sandbox Code Playgroud)

此配置文件同步新文件的扩展属性,但是当我更改已同步文件的扩展属性并执行一致时,我得到:

Nothing to do: replicas have not changed since last sync.
Run Code Online (Sandbox Code Playgroud)

其他一切都完美同步,但 unison 不知道扩展属性的变化。我也尝试禁用 fastcheck,希望它能更详细地检查文件;没有用。我在一个方向上尝试了 rsync'ing,它工作得很好。但我需要双向同步,所以我坚持一致。

我已经查看了官方手册,但它只顺便提到了扩展文件属性。所以我的问题是:这可以统一完成吗?我在这里错过了一些简单的东西吗?或者,是否有其他开源工具可以实现这一目标?(我知道 bsync 和 bitpocket,但在我的初步测试中,他们也没有注意到扩展文件属性的变化)。

zer*_*tas 2

如果将来有人遇到与我相同的问题 - unison 不适用于扩展文件属性。解决这个问题的一种方法是 copyprog + copythreshold=0 hack(请参阅原始问题中的配置文件),但这并不能解决一致没有注意到 xattr 的变化的问题。正如我在评论之一中提到的,即使更改文件的修改时间也不会一致同步修改的 xattr。不仅如此,下次该文件内容更改时它甚至会删除它们。

我可以使用扩展文件属性进行双向同步的唯一方法是使用bsync,通过向 rsync 参数添加 -X 标志并更改文件的修改时间来更改它。

这远非理想的解决方案:更改文件的修改时间、没有 Windows 支持、Python 3 依赖、上次提交是去年等,但这是我发现的唯一可以完成这项工作的软件。