
restic restore 如何只恢复快照中的单个文件或子目录【免费下载链接】resticFast, secure, efficient backup program项目地址: https://gitcode.com/GitHub_Trending/re/restic当你备份了一整个目录但只想从快照里取回其中的一个文件或一个子目录时restic 的restore命令提供了两条路径用--include限制恢复范围或者用snapshot:subfolder语法直接把恢复根切换成快照内的某个子目录。本文基于 restic 官方文档doc/050_restore.rst、doc/man/restic-restore.1给出完整操作路径前提是你已经有一个初始化好的 restic 仓库和至少一个快照。先确定快照 ID 和文件在快照内的路径恢复前先解决两个问题恢复哪个快照、文件在快照树里的路径是什么。快照 ID 可以用latest表示仓库中最新的快照当仓库里混有多个不同主机或路径的备份时latest可以结合--host和--path筛选例如$ restic -r /srv/restic-repo restore latest --path /home/art --host luigi --target /tmp/restore enter password for repository: restoring snapshot of [/home/art,/home/documents] at 2015-05-08 21:45:17.884408621 0200 CEST to /tmp/restore这里有一个容易踩的坑文档明确提醒过--path只用于选择要恢复哪个快照并不会把恢复范围限制到子集。上面这条命令会恢复出/tmp/restore/home/art和/tmp/restore/home/documents两个目录的全部内容而不是只恢复/home/art。要确认目标文件在快照内实际使用的路径用ls或find$ restic -r /srv/restic-repo ls latest $ restic -r /srv/restic-repo find foo把查到的路径原样传给后文的--include。注意一个边界情况如果快照是用相对路径备份的snapshots输出的路径可能与快照内部的路径布局不一致这时以ls的显示为准。ls对绝对路径快照显示如/home/user/work.txt对相对路径快照则显示如/user/work.txt参见 doc/040_backup.rst 中 Absolute and relative paths 一节。恢复单个文件使用 --include要限制恢复范围用--include或--exclude两者互斥。恢复单个文件的文档示例$ restic -r /srv/restic-repo restore 79766175 --target /tmp/restore --include /home/user/work/foo enter password for repository: restoring snapshot of [/home/user/work] at 2015-05-08 21:40:19.884408621 0200 CEST to /tmp/restore执行后该文件会被恢复到/tmp/restore/home/user/work/foo即--target目录下保留快照内的完整相对路径结构。几个相关选项路径大小写不确定时用大小写不敏感变体--iinclude和--iexclude行为相同但忽略路径大小写模式较多时用--include-file/--exclude-file及--iinclude-file/--iexclude-file从文件读取模式列表--include模式可以指定多次。恢复整个子目录使用 snapshotID:subfolder 语法如果目标是某个子目录而不是单个文件可以直接把恢复根切换过去语法是snapshot:subfolder。其中snapshot是快照 ID 或latestsubfolder是快照树内的路径以restic ls显示为准$ restic -r /srv/restic-repo restore 79766175:/home/user/work --target /tmp/restore --include /foo enter password for repository: restoring snapshot of [/home/user/work] at 2015-05-08 21:40:19.884408621 0200 CEST to /tmp/restore这条命令把快照中的/home/user/work/foo恢复到/tmp/restore/foo——注意输出路径已经去掉subfolder前缀。使用子目录语法时有一个关键限制--include和--exclude的参数必须相对于subfolder书写即上例中写/foo而不是/home/user/work/foo。先跑 dry-run 再实际恢复恢复操作可能耗时很长文档建议先用--dry-run预览会恢复什么配合--verbose2可以打印文件级信息$ restic -r /srv/restic-repo restore --target /tmp/restore --dry-run --verbose2 latest unchanged /restic/internal/walker/walker.go with size 2.812 KiB updated /restic/internal/walker/walker_test.go with size 11.143 KiB restored /restic/restic with size 35.318 MiB restored /restic [...] Summary: Restored 9072 files/dirs (153.597 MiB) in 0:00以上是文档示例输出实际数值会不同。状态含义unchanged表示目标文件内容已是最新updated表示内容被更新restored表示新文件目录和符号链接等其他类型始终显示为restored。dry-run 会根据--overwrite行为校验已存在文件的内容如果想跳过这些检查可以指定--overwrite never或一个尚不存在的--target目录。确认列表无误后去掉--dry-run再执行正式恢复即可。恢复行为相关的已知限制默认覆盖行为restore默认对已存在的目标文件执行--overwrite always即校验已有内容并只恢复不匹配的部分。其余可选值为if-changed、if-newer、never。如果你的目标目录已有同路径文件且不想被改动先加上--overwrite never或换一个新目录。原地恢复的风险如果恢复到源目录本身in-place restore操作中途被中断可能留下部分恢复的文件。文档建议在恢复不同快照前先做一次当前状态的backup以便回退。Windows 特有权限在 Windows 上恢复符号链接需要SeCreateSymbolicLinkPrivilege权限或以管理员运行恢复完整安全描述符需要SeRestorePrivilege、SeSecurityPrivilege和SeTakeOwnershipPrivilege或管理员权限缺权限时只恢复 DACL。这是 Windows 的限制与 restic 无关。稀疏文件默认不按稀疏文件恢复。若需要加--sparse要求文件系统支持零字节区域会恢复为空洞但 restic 不记录原始稀疏信息带大量空洞的大文件恢复后可能比原稀疏文件更大。验证与退出状态正式恢复后到--target目录检查文件是否落到了预期路径如/tmp/restore/home/user/work/foo。从退出状态判断命令是否成功可参考 doc/man/restic-restore.10 表示成功1 表示出错10 表示仓库不存在11 表示仓库已被锁定12 表示密码错误。如果快照里文件很多而你只想临时查看几个文件的内容doc/050_restore.rst 也提到restic mount挂载仓库后浏览是另一种取少数文件的方式但恢复大量文件或整个快照时restic restore是文档推荐的更快选择。【免费下载链接】resticFast, secure, efficient backup program项目地址: https://gitcode.com/GitHub_Trending/re/restic创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考