当前位置:首页 > 文章列表 > 文章 > linux > Linux tar 备份如何保留 ACL 与扩展属性:打包、恢复和验收命令

Linux tar 备份如何保留 ACL 与扩展属性:打包、恢复和验收命令

来源:17golang原创 2026-08-24 21:11:03 0浏览 收藏

在Linux里把目录打包成tar包,解压后文件能正常读出,可不代表整套权限环境都完整恢复了。除了常规的读写执行mode位、属主、属组之外,ACL和扩展属性分别会影响“额外用户的访问规则”和“文件绑定的各类安全标记”。如果你的备份对象包含共享文件夹、带特殊权限的服务配置目录、或者启用了访问控制的上传存储路径,打包和恢复时都应该显式保留这两类元数据。

最小可靠做法是:归档时使用 --acls --xattrs,恢复时继续带上这两个选项,再用 getfaclgetfattr 对源目录、临时恢复目录逐项比对。

实践要点
  • ACL 与 xattr 不是普通权限位的同义词,不能靠 chmod 代替。
  • tar --acls --xattrs 负责把额外元数据写进归档,恢复端也要显式开启。
  • 验收要同时看普通权限、ACL、xattr 和关键文件内容,不能只看 tar 命令的退出状态就直接认为备份成功。

先区分三种容易混在一起的权限信息

文件的基本权限可以用 ls -l 看到,例如所有者、所属组和读写执行位。ACL 是更细粒度的访问控制列表,常见表现是权限字符串末尾出现 +;它可以给某个具体用户或额外用户组授予权限。扩展属性则由文件系统保存键值数据,安全标签、文件能力或应用自定义标记都可能放在这里。

实际操作里经常遇到三条看起来差不多、但作用完全不同的命令,处理的不是同一件事:

ls -l /srv/share/report.csv
getfacl -p /srv/share/report.csv
getfattr -d -m- /srv/share/report.csv

正式恢复前先导出一份源端的基线信息留存,尤其要把所有相关命令的输出保存好。这样就算恢复后的属主因为跨环境被映射、某个xattr因为目标文件系统能力不足被跳过,也能清晰核对出所有差异,不用事后再溯源。

归档命令:把 ACL 与 xattr 一起写入 tar

GNU tar 中,--acls 保存 POSIX ACL,--xattrs 保存扩展属性。建议从目录的父级执行,让归档内路径保持稳定:

cd /srv
tar --create --file share-2026-08-24.tar \
  --acls --xattrs \
  --numeric-owner \
  share

--numeric-owner 会把数字 UID/GID 写入归档,适合跨机器恢复时避免同名用户造成误判。但它不替代 ACL,也不负责解决目标机器上 UID 不存在的问题。归档完成后,可以先查看条目,再抽查元数据:

tar --list --file share-2026-08-24.tar | sed -n '1,20p'
tar --list --verbose --file share-2026-08-24.tar | sed -n '1,20p'
Linux tar 归档时同时记录基本权限、ACL 和扩展属性的分层示意图

恢复命令:目标目录要先准备好

恢复操作不要直接覆盖线上正在运行的生产目录。先把归档包完整解压到一个空的临时目录,做完所有元数据检查确认没问题之后,再切换目录或者同步文件过去:

install -d -m 700 /var/tmp/share-restore
tar --extract --file share-2026-08-24.tar \
  --directory /var/tmp/share-restore \
  --acls --xattrs \
  --numeric-owner

如果只在恢复端加 --acls,而归档生成时没有保存 ACL,tar 没有凭空恢复数据的来源。反过来,归档含有 xattr,但目标文件系统或挂载选项不支持对应属性时,也可能出现警告或部分跳过。这里不要用“命令成功”替代验收。

用可比较的快照验收,而不是只看文件列表

可以对源目录和恢复目录分别输出稳定的检查结果。getfacl -R -p 适合查看 ACL;getfattr -R 需要明确匹配范围,避免把不存在的属性误当成失败:

getfacl -R -p /srv/share > /tmp/share.source.acl
getfacl -R -p /var/tmp/share-restore/share > /tmp/share.restore.acl
diff -u /tmp/share.source.acl /tmp/share.restore.acl

getfattr -R -d -m- /srv/share > /tmp/share.source.xattr 2>/tmp/share.source.xattr.err
getfattr -R -d -m- /var/tmp/share-restore/share > /tmp/share.restore.xattr 2>/tmp/share.restore.xattr.err
diff -u /tmp/share.source.xattr /tmp/share.restore.xattr

两端的目录前缀不一样的话,直接diff会产出大量完全无关的差异内容,可以在对比前统一两端的路径,或者直接针对业务的单个关键文件逐个检查。验收环节至少要覆盖:目录默认ACL、命名用户的访问条目、服务依赖的安全属性、文件内容摘要和恢复后的属主属组配置。

Linux tar 恢复后通过 getfacl、getfattr 与 diff 对比源目录和临时目录的验收流程

跨机器恢复时的四个边界

文件系统能力不一致

目标端的文件系统可能不支持源端的全部xattr名称空间,容器内部、网络文件系统和受限挂载点这类场景尤其要提前做验证。先恢复到临时目录仔细查看命令输出的报错,不要直接在生产路径上反复试命令,避免误改业务运行数据。

UID/GID 相同不代表用户名相同

带上 --numeric-owner 后,tar 按数字身份恢复;如果目标机没有对应账号,ls -l 显示的名字可能变化。对服务目录,应把 UID/GID 映射和服务账号检查放进发布前清单。

ACL 的 mask 会影响最终权限

ACL 中的 mask 约束命名用户、命名组和所属组的有效权限。看到条目存在,不等于它实际拥有条目文字显示的全部权限,验收时要一起看 effective 注释。

不要把 xattr 全部当成可复制业务数据

有部分属性是和当前机器的安全策略或者挂载环境绑定的。做备份规划的时候就应该记录清楚哪些属性是必须强制保留的,哪些属性跨环境恢复时只需要记录差异、之后在目标端重新生成即可。

一份够用的最小验收清单

  • 归档命令包含 --acls --xattrs,恢复命令也包含这两个选项。
  • 源目录与临时恢复目录均保存了 getfaclgetfattr 输出。
  • 抽查目录默认 ACL、命名用户规则、服务账号 UID/GID 和关键 xattr 是否和源端一致。
  • 确认目标挂载点支持需要用到的所有属性;不支持的话要把差异明确记录下来,不能静默跳过直接上线。
  • 确认所有关键文件的内容摘要完全一致之后,再执行目录切换或者重启业务服务。

相关问题

只用 tar -p 能保留 ACL 吗?

不能。-p 主要处理基本权限保留,ACL 与 xattr 需要各自的显式选项。

恢复后 ACL 少了一条,应该先改权限吗?

如果发现属性缺失,先确认归档文件里是不是真的正确保存了该条目,再排查目标文件系统和挂载参数的能力限制。不要直接用chmod命令覆盖权限,很容易把“元数据缺失”的小问题,变成全目录权限被误改的更大故障。

小结

tar 归档的可靠性不只由文件名和内容决定。对包含共享访问、服务账号或安全标记的 Linux 目录,--acls --xattrs 是起点,临时恢复和 getfacl/getfattr 对比才是闭环。把这些检查固化进备份脚本的验收阶段,迁移时才不会等到权限异常出现后再追溯。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Java Pattern.asMatchPredicate 怎么复用正则:完整匹配、流过滤与编译成本Java Pattern.asMatchPredicate 怎么复用正则:完整匹配、流过滤与编译成本
上一篇
Java Pattern.asMatchPredicate 怎么复用正则:完整匹配、流过滤与编译成本
前端上传文件怎么防 SVG 风险:扩展名、MIME 与内容校验的边界
下一篇
前端上传文件怎么防 SVG 风险:扩展名、MIME 与内容校验的边界
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    5225次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    4731次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    4681次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    4938次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    4894次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码