备份恢复acl目录关键在root权限、全属性保留及显式包含扩展属性;需同时使用--acls、--xattrs、--xattrs-include='*',非root或参数缺失将导致acl、capabilities等元数据丢失。

备份和恢复带 ACL 的目录,关键不是加不加 --acls,而是整套操作是否在 root 权限下完成、是否启用全属性保留、以及恢复时是否显式包含扩展属性通配。ACL(访问控制列表)属于文件的扩展元数据,普通 tar -cpzf 会丢掉它。
备份时必须启用三项关键参数
仅 --acls 不够,它只保存 POSIX ACL,不涵盖扩展属性(xattrs)或 SELinux 上下文。实际生产中建议统一使用:
-
--acls:保存文件/目录的 POSIX ACL(如
user:tester:rw-) - --xattrs:保存所有扩展属性(包括 capabilites、trusted.*、user.* 等)
- --xattrs-include='*':明确包含全部命名空间,避免默认只存 system.*
完整备份命令示例:
sudo tar --acls --xattrs --xattrs-include='*' -cpzf /backup/acl-demo-$(date +%Y%m%d).tar.gz /path/to/dir
恢复时权限与路径要同步处理
ACL 和 xattrs 只有在 root 下解压才能正确还原。非 root 用户即使有 --acls 参数,也无法写入 ACL。
- 目标目录需提前创建,且挂载选项支持 xattrs(如 ext4 默认开启,btrfs 需确认 mount 时含
user_xattr) - 解压必须用
sudo,并带上全部备份时的属性参数 - 若要覆盖到已有目录,建议先清空再解压,避免残留旧 ACL 干扰
恢复命令示例:
sudo tar --acls --xattrs --xattrs-include='*' -xpzf /backup/acl-demo-20260916.tar.gz -C /restore/path
验证 ACL 是否成功还原
不能只看 ls -l,得用专用工具检查:
-
getfacl /restore/path/file:查看具体 ACL 条目是否与源一致 -
getfattr -d /restore/path/file:列出所有扩展属性(含 capabilities) -
lsattr /restore/path/file:确认不可变(i)、追加(a)等特殊标志是否保留
特别注意:tar -p(保留权限)是基础,但不等于保留 ACL;-p 只管传统 rwx 和 uid/gid,ACL 必须靠 --acls 显式启用。
常见误区与规避方式
- 在普通用户下运行备份:ACL 无法读取,备份包里为空 —— 解决:始终用
sudo或切换到 root - 恢复时不加
--xattrs-include='*':部分 capability(如/usr/bin/ping的cap_net_raw)丢失 —— 解决:备份恢复参数严格对称 - 目标文件系统不支持 xattrs:ext2/3 或某些 NFS 挂载可能禁用 —— 解决:用
mount | grep xattr或tune2fs -l /dev/sdXN | grep "Filesystem features"确认











