当前位置:首页 > 文章列表 > 文章 > linux > Linux tar 与 zstd 组合时怎么保留权限和稀疏文件

Linux tar 与 zstd 组合时怎么保留权限和稀疏文件

来源:17golang原创 2026-09-07 19:54:32 0浏览 收藏

用 GNU tar 配合 zstd 归档时,创建命令建议写成 tar --zstd --sparse -cf backup.tar.zst data/。其中 --sparse 让 tar 识别并记录稀疏文件的空洞,--zstd 负责把 tar 归档流交给 zstd;恢复时再用 -p(--same-permissions)按归档中的权限位创建文件。不要把 --sparse 当成解包阶段的“开关”,它只对创建或更新归档有意义。

要点速览
  • 创建:tar --zstd --sparse -cf backup.tar.zst data/。
  • 恢复:tar --zstd -xpf backup.tar.zst -C restore/,-p 用来减少 umask 对权限位的影响。
  • 复查:同时看 stat、du --apparent-size 和普通 du,不要只看文件的逻辑大小。

创建阶段:tar 记录空洞,zstd 压缩归档流

tar 和 zstd 解决的是两层问题。tar 保存文件名、权限位、时间以及稀疏区间等归档信息,zstd 只负责压缩这份归档流。因此,权限恢复是否完整不能靠 zstd 判断,稀疏文件是否膨胀也不能只看压缩文件名。

Linux tar 与 zstd 创建归档时,权限字段和稀疏区间进入 tar,再由 zstd 形成 backup.tar.zst 的静态关系图
图1:创建阶段把文件属性和稀疏区间交给 tar 记录,再把归档流交给 zstd 压缩。

先确认源目录里确实有需要保留的属性:

# 查看工具实现,并记录逻辑大小与实际占用
tar --version
zstd --version
ls -ls data/sparse.img
stat -c '%A %a %b %s %n' data/sparse.img

stat 中的 %s 是逻辑字节数,%b 是实际分配块数;稀疏文件常见的特征就是前者很大、后者相对小。创建归档时使用:

# --sparse 记录空洞,--zstd 选择 zstd 压缩归档流
tar --zstd --sparse -cf backup.tar.zst data/

如果使用的不是 GNU tar,先检查它是否支持 --zstd 和 --sparse;不要因为命令能创建文件,就默认它保留了相同的稀疏布局。

恢复阶段:权限由 -p 决定,空洞由 tar 元数据重建

在一个空的恢复目录中执行:

# -x 解包,-p 按归档权限位恢复,-C 把结果放入隔离目录
mkdir -p restore
tar --zstd -xpf backup.tar.zst -C restore

GNU tar 在普通用户解包时通常会让当前 umask 限制新文件权限;-p 或 --same-permissions 表示按归档记录的模式设置权限。它不等于无条件恢复所有身份属性:文件所有者能否恢复还受执行用户权限和系统策略影响。稀疏布局则由 tar 读取归档中的空洞描述来重建,不需要在解包命令后再补一个“稀疏开关”。

Linux tar 与 zstd 恢复归档时,-p、umask、权限字段和稀疏区间共同影响恢复文件的静态关系图
图2:恢复阶段由 tar 读取权限和稀疏元数据;-p 决定权限位是否绕过 umask 的限制。

用三组检查确认没有悄悄膨胀

检查对象命令看什么
归档目录tar --zstd -tvf backup.tar.zst成员名、模式和归档内容是否齐全
权限位stat -c '%A %a %n' restore/data/file数字权限是否符合源文件
稀疏占用du -h restore/data/sparse.img; du -h --apparent-size restore/data/sparse.img实际块占用与逻辑大小是否被混淆

复查时要把恢复前后的 %s、%b 和权限模式放在一起比较。逻辑大小相同而实际块数明显增加,通常说明空洞没有按预期保留;模式比源文件少了写权限或执行权限,则优先检查是否漏了 -p,以及目标目录是否确实由本次解包生成。

值班时的回滚边界

生产恢复不要直接覆盖业务目录。先解包到新的临时目录,完成成员列表、权限位和稀疏占用检查,再通过目录切换或受控同步替换目标。若目标环境有意限制权限,去掉 -p,让 umask 参与收紧模式;若要求尽量复原源目录,则保留 -p,但把所有者、ACL 和 SELinux context 作为另外的检查项处理。这样即使归档内容不符合预期,也只需删除隔离目录,不会破坏正在运行的文件。

常见问题

只加 --zstd,不加 --sparse,会怎样?

普通文件仍能归档,但稀疏文件可能按展开后的零数据读取,归档中间层会变大;有稀疏文件的备份应在创建命令中显式加上 --sparse。

解包时必须同时写 --sparse 吗?

不必。GNU tar 的 --sparse 是创建或更新归档时的选项,恢复稀疏布局依靠归档里已经保存的稀疏元数据。

-p 能恢复文件所有者吗?

不能把两者混为一谈。-p主要控制权限模式;所有者恢复还要看执行身份、目标系统策略以及 tar 的其他所有权行为。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go 命令行 flag 怎么把重复参数收集成切片Go 命令行 flag 怎么把重复参数收集成切片
上一篇
Go 命令行 flag 怎么把重复参数收集成切片
Go race 检测到测试数据竞争但单线程运行正常为什么
下一篇
Go race 检测到测试数据竞争但单线程运行正常为什么
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    614次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    653次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    686次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    646次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    475次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码