Linux tar 备份如何保留 ACL 与扩展属性:打包、恢复和验收命令
在Linux里把目录打包成tar包,解压后文件能正常读出,可不代表整套权限环境都完整恢复了。除了常规的读写执行mode位、属主、属组之外,ACL和扩展属性分别会影响“额外用户的访问规则”和“文件绑定的各类安全标记”。如果你的备份对象包含共享文件夹、带特殊权限的服务配置目录、或者启用了访问控制的上传存储路径,打包和恢复时都应该显式保留这两类元数据。
最小可靠做法是:归档时使用
--acls --xattrs,恢复时继续带上这两个选项,再用getfacl和getfattr对源目录、临时恢复目录逐项比对。
- 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'

恢复命令:目标目录要先准备好
恢复操作不要直接覆盖线上正在运行的生产目录。先把归档包完整解压到一个空的临时目录,做完所有元数据检查确认没问题之后,再切换目录或者同步文件过去:
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、命名用户的访问条目、服务依赖的安全属性、文件内容摘要和恢复后的属主属组配置。

跨机器恢复时的四个边界
文件系统能力不一致
目标端的文件系统可能不支持源端的全部xattr名称空间,容器内部、网络文件系统和受限挂载点这类场景尤其要提前做验证。先恢复到临时目录仔细查看命令输出的报错,不要直接在生产路径上反复试命令,避免误改业务运行数据。
UID/GID 相同不代表用户名相同
带上 --numeric-owner 后,tar 按数字身份恢复;如果目标机没有对应账号,ls -l 显示的名字可能变化。对服务目录,应把 UID/GID 映射和服务账号检查放进发布前清单。
ACL 的 mask 会影响最终权限
ACL 中的 mask 约束命名用户、命名组和所属组的有效权限。看到条目存在,不等于它实际拥有条目文字显示的全部权限,验收时要一起看 effective 注释。
不要把 xattr 全部当成可复制业务数据
有部分属性是和当前机器的安全策略或者挂载环境绑定的。做备份规划的时候就应该记录清楚哪些属性是必须强制保留的,哪些属性跨环境恢复时只需要记录差异、之后在目标端重新生成即可。
一份够用的最小验收清单
- 归档命令包含
--acls --xattrs,恢复命令也包含这两个选项。 - 源目录与临时恢复目录均保存了
getfacl和getfattr输出。 - 抽查目录默认 ACL、命名用户规则、服务账号 UID/GID 和关键 xattr 是否和源端一致。
- 确认目标挂载点支持需要用到的所有属性;不支持的话要把差异明确记录下来,不能静默跳过直接上线。
- 确认所有关键文件的内容摘要完全一致之后,再执行目录切换或者重启业务服务。
相关问题
只用 tar -p 能保留 ACL 吗?
不能。-p 主要处理基本权限保留,ACL 与 xattr 需要各自的显式选项。
恢复后 ACL 少了一条,应该先改权限吗?
如果发现属性缺失,先确认归档文件里是不是真的正确保存了该条目,再排查目标文件系统和挂载参数的能力限制。不要直接用chmod命令覆盖权限,很容易把“元数据缺失”的小问题,变成全目录权限被误改的更大故障。
小结
tar 归档的可靠性不只由文件名和内容决定。对包含共享访问、服务账号或安全标记的 Linux 目录,--acls --xattrs 是起点,临时恢复和 getfacl/getfattr 对比才是闭环。把这些检查固化进备份脚本的验收阶段,迁移时才不会等到权限异常出现后再追溯。
Java Pattern.asMatchPredicate 怎么复用正则:完整匹配、流过滤与编译成本
- 上一篇
- Java Pattern.asMatchPredicate 怎么复用正则:完整匹配、流过滤与编译成本
- 下一篇
- 前端上传文件怎么防 SVG 风险:扩展名、MIME 与内容校验的边界
-
- 文章 · linux | 3小时前 | Linux · 磁盘 · 运维 · journalctl · 磁盘清理 journalctl Linux日志 日志保留
- Linux journal 日志占满磁盘怎么处理:journalctl 用量核对、保留策略与安全清理
- 397浏览 收藏
-
- 文章 · linux | 14小时前 | Linux · 性能排查 · 进程监控 · Linux 磁盘IO /proc/PID/io rchar read_bytes write_bytes
- Linux /proc/PID/io 怎么看进程真实磁盘读写:rchar、read_bytes 与 write_bytes 的区别
- 224浏览 收藏
-
- 文章 · linux | 1天前 | Linux · DNS · 网络排查 · Linux DNS /etc/hosts getent hosts NSS 主机名解析
- Linux getent hosts 为什么和 ping 结果不一样:NSS 优先级、/etc/hosts 与 DNS 排查
- 307浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 5225次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 4731次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 4681次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 4938次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 4894次使用
-
- 详解golang执行Linuxshell命令完整场景下的使用方法
- 2023-01-07 426浏览
-
- go程序部署到linux上运行的实现方法
- 2023-01-02 387浏览
-
- Linux系统下Go语言开发环境搭建
- 2023-01-07 242浏览
-
- 使用golang获取linux上文件的访问/创建/修改时间
- 2022-12-31 238浏览
-
- 在Linux系统中安装Go语言的详细教程
- 2022-12-29 402浏览

