当前位置:首页 > 文章列表 > 文章 > linux > Linux tar 保留 ACL 和 xattr 需要哪些参数

Linux tar 保留 ACL 和 xattr 需要哪些参数

来源:17golang原创 2026-09-12 22:41:54 0浏览 收藏

用 Linux tar 做目录迁移时,最容易漏掉的不是文件内容,而是文件旁边的元数据:POSIX ACL 和扩展属性(xattr)。保留它们不能只加 -p,创建归档和恢复归档都要明确写出 --acls--xattrs。如果还要跨机器保持属主,创建端再考虑 --numeric-owner,恢复端则要结合权限和目标文件系统能力检查。

最小可靠组合是:创建和恢复都使用 --acls --xattrs-p--same-permissions 只负责普通 mode 权限,不能代替 ACL/xattr。恢复成功也不等于所有命名空间都能落地,必须用 getfaclgetfattr 分开核对。

官方资料:https://www.gnu.org/software/tar/manual/tar.html

Linux xattr 说明:https://man7.org/linux/man-pages/man7/xattr.7.html

要点速览
  • --acls 保存和恢复 POSIX ACL,--xattrs 保存和恢复扩展属性。
  • --numeric-owner 记录数字 UID/GID;--same-owner--same-permissions 是恢复阶段的属主和 mode 选择。
  • 目标盘不支持 xattr、权限不足或命名空间受限时,参数不会凭空创造能力。

先确认源文件真的有 ACL 和 xattr

先看源文件,而不是直接给 tar 叠参数。ACL 通常通过系统属性保存,但它和普通的 rwx 位不是一回事;xattr 还可能属于 usersecuritytrustedsystem 命名空间。下面的检查命令只读元数据,输出以实际机器为准。

# 查看普通权限、属主以及 POSIX ACL 条目
getfacl -p /srv/app/config.yaml

# 列出所有可读的扩展属性;没有属性时可能没有输出
getfattr -d -m- /srv/app/config.yaml

如果源文件只有基础 mode,没有额外 ACL,--acls 仍可以保留“没有额外条目”的状态;如果源文件没有 xattr,--xattrs 也不会凭空增加内容。这个预检查的价值,是让恢复后的差异有参照物。

创建归档时分别打开 --acls--xattrs

GNU tar 把两个能力拆成两个开关。--acls 写入 POSIX ACL,--xattrs 写入扩展属性;使用它们创建归档时会采用适合承载这些元数据的 pax 归档格式。可以把普通文件、目录和元数据一起打包:

# -C 让归档内使用相对路径,避免把 /srv 写成成员名前缀
# --numeric-owner 记录数字 UID/GID,跨机器时不依赖同名用户
sudo tar --acls --xattrs --numeric-owner -cpf /backup/app-metadata.tar \
  -C /srv app

这里的 -p 是 create/extract 的操作组合写法,真正表达“恢复时不要套用当前 umask”的是 --same-permissions。它们都不负责保存 ACL 或 xattr,所以不要把下面几种概念混在一起。

参数解决什么问题常见边界
--acls归档或恢复 POSIX ACL目标系统需要能设置 ACL
--xattrs归档或恢复扩展属性受命名空间、权限和文件系统支持影响
--numeric-owner使用数字 UID/GID 记录属主只记录身份,不创建目标机器上的用户
--same-permissions恢复归档中的 mode与 ACL/xattr 是不同元数据层
Linux GNU tar 归档结构示意图,展示 --acls 保存 POSIX ACL、--xattrs 保存 user 和 security 命名空间扩展属性
图1:归档输入结构示意图,--acls--xattrs 分别携带 ACL 和扩展属性。

恢复时再次打开元数据选项并处理属主权限

解包时仍要写 --acls --xattrs,因为创建端打开开关不会自动改变恢复端的策略。迁移到新目录时,可以这样组织命令:

# 先创建恢复目录;真实环境请替换为经过确认的目标路径
sudo mkdir -p /restore

# --same-owner 需要足够权限;--same-permissions 只针对普通 mode
sudo tar --acls --xattrs --same-owner --same-permissions -xpf \
  /backup/app-metadata.tar -C /restore

GNU tar 在恢复 xattr 时有命名空间策略:归档时可以保存更多属性,但默认恢复范围并不等于“无条件写回全部属性”。若业务明确依赖某个命名空间,应使用 --xattrs-include='user.*' 或相应的精确模式,并确认执行用户和目标文件系统都允许写入。SELinux 上下文、trusted 属性等安全相关数据尤其不适合跨发行版盲目复制。

用原始工具对比恢复结果

不要只看 tar 返回码。分别检查 mode、属主、ACL 和 xattr,才能判断是哪一层丢失。恢复目录中的路径应与归档内的成员路径对应:

# 检查恢复文件的基础权限与 ACL
getfacl -p /restore/app/config.yaml

# 检查恢复文件的扩展属性;-m- 表示匹配所有属性名
getfattr -d -m- /restore/app/config.yaml

# 查看归档成员及其扩展属性提示,辅助确认归档是否携带元数据
tar --acls --xattrs -tvf /backup/app-metadata.tar

如果 ACL 与 mode 一致,但 xattr 为空,优先排查目标文件系统是否支持扩展属性、当前用户是否具备命名空间所需权限,以及恢复命令是否被显式的 include/exclude 规则限制。Linux 内核文档也说明,xattr 的存储和限制由具体文件系统实现决定;换到不支持的介质时,tar 参数无法绕过这个前提。

Linux tar 恢复结果核对示意图,分栏比较 mode、owner、POSIX ACL、xattr 与文件系统支持
图2:恢复结果核对示意图,权限、ACL、xattr 和属主应分栏确认。

常见问题

只加 -p 能保留 ACL 和 xattr 吗?

不能。-p--same-permissions 处理普通 mode 权限;ACL 和 xattr 需要各自的 --acls--xattrs

为什么归档有 xattr,恢复后却没有?

可能是恢复阶段没有启用 --xattrs,也可能是默认命名空间范围、权限或目标文件系统能力不匹配。用 getfattr 查看具体属性名,比只看命令是否报错更可靠。

--numeric-owner 会同步用户和用户组吗?

不会。它只让归档记录数字 UID/GID;目标机器仍需要有合适的账号映射,恢复命令也需要足够权限才能设置属主。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go net.Resolver 如何为单次查询指定 DNS 服务器Go net.Resolver 如何为单次查询指定 DNS 服务器
上一篇
Go net.Resolver 如何为单次查询指定 DNS 服务器
Go JSON 测试用 map 比较为什么顺序不稳定
下一篇
Go JSON 测试用 map 比较为什么顺序不稳定
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    108次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    23次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    39次使用
  • AGI-Eval大模型评测平台:权威榜单、数据集与人机协同评测方案
    AGI-Eval
    AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
    23次使用
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    264次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码