tar 备份特殊属性要注意什么
备份系统目录、容器宿主与多用户环境时,光靠 tar 的默认行为会丢东西:ACL、扩展属性、SELinux 安全上下文与数字属主都需要显式开关。丢失后的表现往往不是报错,而是恢复后服务起不来、用户被拒绝访问,排查起来更费时间。
基本信息
| 适用平台 | GNU tar(--acls / --xattrs / --selinux / --numeric-owner 为 GNU 扩展) |
|---|---|
| 关键开关 | ACL 用 --acls,扩展属性与 SELinux 上下文用 --xattrs(GNU tar 另有 --selinux) |
| 属主处理 | --numeric-owner 按数字 ID 保留,避免跨机用户名映射错位 |
| 权限要求 | 还原属主、设备节点与安全上下文通常需要 root |
典型使用场景
- /etc 等系统目录备份:恢复后要求服务可直接启动,权限与上下文必须保真
- 容器与虚拟机宿主目录:SELinux 环境下的安全上下文决定容器能否启动
- 多用户环境:ACL 承载细粒度授权,丢失会导致个别用户被拒或越权
- 跨主机迁移:用 --numeric-owner 保持属主一致性
- 合规取证:保留扩展属性与时间戳,保证证据链完整
保留特殊属性的打包与恢复
保留特殊属性的打包与恢复
sudo tar --acls --xattrs --selinux --numeric-owner -czf /backup/etc-$(date +%F).tar.gz /etc
sudo tar --acls --xattrs --selinux --numeric-owner -xzf /backup/etc-2026-10-13.tar.gz -C /
# 恢复后核对安全上下文与 ACL
ls -Z /etc/ssh/sshd_config
getfacl /etc/ssh/sshd_config开关与遗漏后果
| 开关 | 保留内容 | 遗漏后果 |
|---|---|---|
| --acls | POSIX ACL 与默认 ACL | 细粒度授权丢失,个别用户被拒或越权 |
| --xattrs | 扩展属性(含 security.selinux) | SELinux 环境服务启动被拒,报错指向上下文 |
| --selinux | SELinux 上下文(GNU tar 专有开关) | 上下文标签错误,restorecon 之前服务无法正常运行 |
| --numeric-owner | 按数字 ID 记录属主 | 跨机恢复时按用户名映射,UID 错位导致权限异常 |
恢复后若 SELinux 上下文异常,用 restorecon -Rv 目录 重新标注,而不是关闭 SELinux;后者会把一套安全机制整体削弱。备份前也建议先确认目标文件系统是否支持 ACL 与 xattr,否则参数加了也无处存放。
与其他工具的选择
| 场景 | 更合适的工具 | 原因 |
|---|---|---|
| 整目录系统级备份 | tar 加属性开关 | 保留权限、ACL 与安全上下文 |
| 增量与远端同步 | rsync -aHAX | 支持差异传输与属性保留 |
| 带加密去重的保留 | restic / borg | 元数据与内容一并加密保管 |
| 单文件交换交付 | zip | 对方无需额外工具即可解开 |
普通用户打包再恢复时属主与设备节点信息无法还原:系统目录恢复建议在 root 下执行,并在隔离环境先验证一次。