Linux restic怎样从指定标签快照恢复一个目录
来源:17golang原创
时间:2026-10-13 21:26:24 123浏览 收藏
在 Linux 上用 restic 恢复备份时,如果只想取某个项目目录,最稳妥的做法是先用标签缩小快照范围,再用快照 ID 或 latest 选定版本,最后通过 快照:子目录 或 --include 限制恢复内容。官方地址:https://restic.readthedocs.io/en/stable/。
标签负责“选哪一组快照”,子目录语法和--include负责“从快照里取哪些内容”。日常恢复优先写入一个新的目标目录,涉及原地覆盖或删除时先使用--dry-run。
- 先查范围:
restic snapshots --tag project-a。 - 再看路径:
restic ls SNAPSHOT_ID,确认目录在快照树中的真实位置。 - 最后恢复:
restic restore latest:/srv/app --target /tmp/app-restore。
先把标签对应的快照范围找准
一个标签可能对应多次备份,也可能同时存在不同主机的快照。因此不要直接把“标签名”当成恢复对象,而要先列出候选快照。下面的命令只读取快照元数据,适合确认标签和主机过滤条件:
# 只列出带 project-a 标签的快照,先确认候选范围 restic -r /srv/restic-repo snapshots --tag project-a # 标签相同但主机很多时,再缩小到指定主机 restic -r /srv/restic-repo snapshots --tag project-a --host app-node-1
如果你知道目标主机和目录,还可以把 --host、--path 一起使用。这里的 --path 是快照筛选条件,不是“只恢复这个目录”的开关;恢复范围仍需要使用子目录语法或 --include。

用具体快照还是 latest,取决于恢复目标
如果是事故回滚或要保留审计记录,建议把上一步列出的具体短 ID 写进命令;如果只是恢复标签范围内最近一次备份,可以使用 latest。latest 不是全仓库无条件最新,而是在你给出的 --tag、--host、--path 等条件下选择最新快照。
# 明确恢复某个快照,适合回滚到已经确认的时间点 restic -r /srv/restic-repo restore 3a1b2c4d --target /tmp/app-restore # 在 project-a 标签范围内选最新快照,主机过滤避免选错机器 restic -r /srv/restic-repo restore latest \ --tag project-a --host app-node-1 --target /tmp/app-restore
示例中的短 ID 和主机名只是占位符,实际使用时换成你从 snapshots 输出中确认的值。若同一标签对应多个目录或多个主机,保留筛选条件比单独依赖 latest 更安全。
只恢复快照里的一个目录
假设快照中记录的是 /srv/app,但你只想取它下面的 config 目录。restic 提供两种常用表达:
# 先查看快照树,确认 app 与 config 的真实路径 restic -r /srv/restic-repo ls latest --tag project-a --host app-node-1 # 用“快照:子目录”把恢复根定位到 config,结果直接落到目标目录 restic -r /srv/restic-repo restore latest:/srv/app/config \ --tag project-a --host app-node-1 --target /tmp/config-restore # 也可以恢复完整快照,但用 include 只取指定路径 restic -r /srv/restic-repo restore latest \ --tag project-a --host app-node-1 --target /tmp/config-restore \ --include /srv/app/config
两种写法的取舍很明确:子目录语法会改变恢复根,适合只要一个目录并希望目标目录结构简洁的场景;--include 保留完整快照路径语义,适合同时写多个包含规则或需要对照原始路径的场景。官方文档还提醒,使用子目录语法后,--include 和 --exclude 的路径也应按新的子目录根来写。

恢复前把覆盖和删除风险隔离开
默认恢复到一个不存在的临时目录最容易判断结果。如果目标目录已经存在,restic 会按 --overwrite 策略处理已有文件;可以先用 dry-run 查看会发生什么:
# 只演练恢复清单,不写入目标目录;-vv 便于看到文件状态 restic -r /srv/restic-repo restore latest:/srv/app/config \ --tag project-a --target /tmp/config-restore --dry-run -vv # 已有文件只在快照文件更新时覆盖,减少无关覆盖 restic -r /srv/restic-repo restore latest:/srv/app/config \ --tag project-a --target /tmp/config-restore --overwrite if-newer
--delete 会删除目标中不属于指定恢复范围的文件,适合明确要做目录镜像的场景,不适合作为普通找回文件的默认参数。官方文档要求使用 --delete 时配合 --include 或 --exclude,并建议先以 --dry-run -vv 查看删除范围。
如果只是找回配置文件,推荐使用新目标目录;如果必须原地恢复,先对当前目录做一次备份,并把 --overwrite 和 --delete 写进变更记录,避免把“恢复一个目录”扩大成整棵目录树的清理操作。
常见疑问
--path 能不能代替 --include?
不能。--path 用来筛选快照,--include 才是限制快照内恢复文件范围的参数。只写 --path 时,仍可能恢复该快照包含的其他路径。
标签匹配多个快照时应该写哪个 ID?
需要固定版本就写经过 snapshots 确认的具体 ID;只关心标签范围内最近一次结果时使用 latest,并同时保留 --host 或 --path 等必要过滤条件。
小结
恢复指定标签下的一个目录,可以按“snapshots --tag 确认范围、ls 确认路径、latest:子目录 或 --include 限定内容、--dry-run 复查覆盖和删除风险”的顺序执行。这样既能利用标签快速定位备份,又不会把快照筛选参数误当成目录过滤参数。
-
426 收藏
-
412 收藏
-
109 收藏
-
386 收藏
-
269 收藏
-
119 收藏
-
190 收藏
-
172 收藏
-
154 收藏
-
220 收藏
-
289 收藏
-
237 收藏
-
158 收藏
-
164 收藏
-
405 收藏
-
344 收藏
-
321 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习