rsync 能完整保留 acl 权限,但需显式启用 -a 选项,并确保源和目标文件系统支持 acl 且挂载时启用 acl 选项;-a 不包含 acl,必须组合使用 -aa 才能同步 acl 及基础属性。

rsync 能完整保留 ACL(Access Control List)权限,但需要显式启用相关选项,并确保源和目标文件系统都支持 ACL 且挂载时启用了相应功能。
确认系统和文件系统支持 ACL
ACL 不是 rsync 自身的功能,而是底层文件系统的特性。同步前需确认:
- 源和目标分区均使用支持 ACL 的文件系统(如 ext4、xfs、btrfs)
- 挂载时未禁用 ACL:检查
/proc/mounts或mount输出中是否含acl选项(例如/dev/sda1 on /home type ext4 (rw,relatime,acl)) - 若缺失 acl,需重新挂载:
mount -o remount,acl /mount/point
rsync 中启用 ACL 同步的关键参数
ACL 权限需通过 -A 选项显式开启。它单独控制 ACL 属性的复制,不包含在 -a 中(-a = -rlptgoD,不含 -A)。
- -A:复制访问控制列表(ACL),要求双方系统均支持且已启用
- -a:建议仍搭配使用,保证递归、权限、属主属组、时间戳等基础属性
- 完整推荐组合:
rsync -aA(本地同步)或rsync -aAz(远程压缩传输)
验证 ACL 是否成功同步
同步完成后,用 getfacl 检查关键文件:
- 源端查看:
getfacl /path/to/file - 目标端对比:
getfacl /dest/path/to/file - 若输出一致(含
user:xxx:rwx、group:yyy:r-x等条目),说明 ACL 已正确复制
常见失败原因与应对
即使加了 -A,ACL 仍可能丢失,常见原因包括:
- 目标目录挂载时未启用
acl选项 → 重新挂载并测试 - 目标文件系统不支持 ACL(如某些 FAT/NFSv3 配置)→ 改用 ext4/xfs 并确认内核支持
- 目标端运行 rsync 的用户无权设置 ACL(如非 root 或无
setfacl权限)→ 使用 root 执行,或确保用户有sudo setfacl权限 - SSH 远程同步时,远端 shell 环境限制(如
rbash)阻止 ACL 设置 → 检查远端用户默认 shell 及权限策略
ACL 同步不是默认行为,必须主动开启 -A 并满足底层条件。只要文件系统、挂载选项和执行权限三者到位,rsync 就能可靠地把复杂权限规则一并搬过去。











