备份acl需同时满足:root权限执行、启用--acls、--xattrs及--xattrs-include='*',且目标文件系统挂载时启用acl选项,否则acl无法正确保存或恢复。

备份时保留 ACL 属性,关键不是加不加 --acls,而是整套操作是否在 root 权限下执行、是否启用全属性保留、以及是否显式包含扩展属性通配。ACL 属于文件的扩展元数据,普通 tar -cpzf 会直接丢掉它。
必须同时启用三项参数
--acls 单独使用远远不够——它只保存 POSIX ACL(如 user:tester:rw-),不涵盖 capabilities、SELinux 上下文或自定义 xattr。生产环境应统一带上:
-
--acls:保存用户/组/掩码等标准 ACL 条目 -
--xattrs:启用扩展属性整体支持 -
--xattrs-include='*':强制包含所有命名空间(system.*、security.*、trusted.*、user.*等),避免默认仅存system.*
备份命令必须用 sudo 执行
非 root 用户即使加了 --acls,也无法读取多数文件的 ACL(尤其属主非本人时),导致备份为空或静默失败。正确示例:
sudo tar --acls --xattrs --xattrs-include='*' -cpzf /backup/dir-$(date +%Y%m%d).tar.gz /path/to/dir
目标文件系统需支持并启用 ACL
即使参数齐全,若目标分区挂载时未启用 acl 选项,恢复后 ACL 仍无法写入。验证方法:
- 运行
mount | grep "$(df . | tail -1 | awk '{print $1}')",确认输出含acl - 若缺失,临时启用:
sudo mount -o remount,acl /mount/point - 永久生效需编辑
/etc/fstab,在对应行 options 字段追加,acl
验证备份是否真正包含 ACL
不能只看压缩包大小或 tar 输出。解压前可抽检:
- 用
tar -t --acls --xattrs -f backup.tar.gz | head -n5查看是否列出 acl/xattr 相关标记 - 更可靠方式:解压到临时目录后,对任意文件执行
getfacl file和getfattr -d file,与源文件比对输出是否一致











