rsynced文件没有得到正确的ACL

在Scientific Linux 6上使用rsyncrsync-3.0.6-5.el6_0.1.x86_64 )将文件从VFAT磁盘传输到NFS挂载的ext3文件系统。 我在ext3系统上设置了ACL,并且在创build新文件或目录时(通过NFS挂载,通过命令行或Nautilus),所有这些都可以按预期工作。 但是,当rsync-ing或cp-ing时,不会为ext3分区上的复制文件创buildACL。

背景是VFAT来自相机,间歇地安装,并不创build文件或目录。 有没有一种方法可以让rsync(甚至是复制),即默认的ACL规则将ACL应用于rsync-ed或cp-ed文件和dirs?

经过朋友们的一点帮助,又咬牙切齿,我明白了这一点。 当然,答案是在手册页。

问题源于(从acl手册页):“修改文件权限位导致修改相关的ACL条目”,反之亦然。 由于没有正确的标志,rsync使用源权限,这将更改目标上的ACL。

rsync中的解决scheme是使用–chmod选项。 从rsync手册页(在–perms部分):

要为新文件指定目标默认权限(同时保持现有文件不变),请确保–perms选项已closures,并使用–chmod = ugo = rwX(确保所有非屏蔽位都已启用)。

但是,人们想要使用的权利取决于预期的目标权利。 举个例子,就我而言,源代码是700,没有ACL。 目标子目录的默认ACL如下: d:u:user1:rwx,d:u:user2:rwx,u:user1:rwx,u:user2:rwx,d:m:rwx,m:rwx 。 也就是说,它有两个命名用户,一个明确的掩码,以及相同的默认值。 这相当于770。

使用rsync(或cp-ing)时,700的源权限将覆盖默认ACL掩码,将其设置为---而不是rwx

由于这个用例需要“用户”和“组”,但没有“其他”源权限,我在rsync中使用了以下标志:– --chmod=ug=rwx 。 第一个等号后面的字母表示下面的申请适用于u(ser)和g(group)。 第二个等号后面的字母表示这些用户收到的权限。 这使得rsync将目标上的perms设置为770。

实际的命令是: rsync -av --chmod=ug=rwX /<source> /<destination>

有几件事要注意。 首先,rsync权限行为取决于接收端的版本。 检查手册页的确切答案。 其次,标志的顺序很重要:-a,-A等实际上可以使用,但必须在–chmod标志之前。

最后,我没有看到cp的类似标志,使rsync成为同步文件的唯一游戏,并且将目标上的默认ACL应用于具有不同源权限的文件。

你到底是如何调用rsync的? 由于您的源代码不支持ACL,因此几乎可以肯定不会传递任何设置指示rsync复制权限的选项。

所以不要使用-a-o-g-A

你在你的rsync命令中设置了-A标志吗?