恢复¶
每次恢复都从恢复页面开始:选一个分区,搜索你想找回的东西,再选一份备份。一个窗口就能恢复所有种类的条目,并分步骤询问。默认情况下原件上什么都不会改变,因为备份会恢复到它的旁边。

恢复页面¶
- 分区以磁贴列出各个分区,每个磁贴显示有多少条目有快照。
- 你想恢复什么?搜索所选分区的条目。每一行显示它最新的快照,打开条目会进入条目的页面。
- 堆栈列出至少有两个已备份容器的 Compose 项目,例如带有数据库和 Redis 的
immich。搜索可以按堆栈名称或其中任意一个容器找到它。 - 正在运行在恢复进行期间显示它,即使你已经关闭了它的窗口。
- 紧急为已经消失或重新搭建的服务器启动应急向导,参见应急向导。
- 其他来源里有从旧的备份文件夹,用于另一个 BombVault 的备份,以及从 Appdata.Backup 插件导入。

恢复窗口¶
点击一个条目会打开带有它名称的恢复窗口。它分步骤询问,开始之前每一步都可以更改:
- 备份:预先选中推荐的快照。通常是最新的一个,如果有未处理的异常,则是它之前的最后一个。在之前某次恢复前做的备份,保存的是那次恢复替换掉的状态,所以除非没有别的,否则会跳过它。更早的在列表里,比较会显示其中两个之间有什么不同。
- 来源:当快照存放在多个地方时,文件从哪里来。本地最快。
- 内容:全部,或单个文件,由你勾选想要的文件和文件夹。
-
目标位置:目标。可选项取决于条目的种类:
目标 作用 放在原件旁边 默认。容器会恢复成名为 <name>-restored的第二个容器,带有它自己的端口,虚拟机的磁盘和 NVRAM 放进名为<folder>-restored的文件夹,文件夹集恢复为<path>-restored。原件上什么都不变。替换原件 覆盖现在在那里的内容。在默认开启的先备份当前状态下,BombVault 会先备份今天的状态,让你可以退回去。如果这次备份失败,恢复就不会开始。对于已经从服务器上消失的容器或虚拟机也同样适用:恢复要覆盖的文件夹会单独备份。 还原到文件夹 只有文件,用于浏览。 下载为 ZIP 闪存,用于新的 U 盘。BombVault 绝不会写入正在运行的闪存。 到新数据集和恢复回数据集里 ZFS 数据集,参见 ZFS 数据集。 -
将会发生什么用文字说明恢复要做什么,并有一幅场景图显示你选的目标。
恢复按钮解锁之前,窗口会检查仓库是否有应答、密钥能否打开它、快照是否存在,以及目标是否有足够的空间。只要有一项检查失败,按钮就保持锁定,它里面的 (i) 会说明是哪一项。
窗口还会显示,与现在的内容相比,恢复会改变什么:新增、被替换和未变化的文件(需要时可以展开列表),以及目标上不在备份里、会原样保留的文件。restic 根据大小和修改时间以空运行的方式算出这些,不读取文件,非常大的目录树会在 30 秒后停止并说明这一点。对于容器和虚拟机,它会把恢复要重新创建的设置与正在运行的设置对比:镜像和标签、端口、变量名称和卷,或者内存、vCPU、磁盘和网络。
有些情况会在恢复改动任何东西之前就把它拦住。容器的静态 IP 和已发布的端口必须是空闲的,它的网络必须存在。在 Unraid 上,每次原地恢复都会拒绝不在已挂载的池或共享上的文件夹,因为文件会落在内存里,重启后就没了。原地恢复时会指出每个绑定挂载伸进它要写入的文件夹的其他容器,例如"这个路径也被 nextcloud-db 使用",但这只是警告。
一些选项会在适用的地方出现:之后保持停止,让你在容器或虚拟机再次运行之前先看一看,以及在缺少备份时所用 GPU 或运行时的主机上出现的不带 GPU 和运行时恢复。
恢复在后台运行。你可以关闭窗口,进度也会显示在正在运行下。较长的恢复会显示百分比,可以取消,被取消的恢复会记录为已取消,而不是失败。在容器停止过程中取消的恢复,或无法移除容器的恢复,还什么都没有恢复,所以容器会重新启动。用 --volumes-from 从另一个容器获取卷的容器会保留这些卷,而在那个容器不存在时,恢复会拒绝开始。

恢复到文件夹时放在哪里¶
设置、恢复下的还原文件夹设置默认还原文件夹,需要的话可以加上每个分区一个子文件夹,并可以为某个分区设置例外。选中的文件直接放进目标文件夹:一个文件就只恢复那个文件,一个文件夹就恢复为带内容的文件夹,来自不同文件夹的选择只保留它们共有的文件夹之下的路径。BombVault 会拒绝不在已挂载存储上的目标,因为在 Unraid 上这样的文件夹位于内存中,重启后就没了,它也绝不会恢复到自己的数据文件夹里。
示例:找回一个文件¶
昨晚有人改了 Nextcloud 的 config.php,Nextcloud 再也启动不了。03:00 的夜间备份里还有那个好的文件。你要的是这一个文件,而不是整个容器。
- 打开恢复,选择容器磁贴,在你想恢复什么?里输入
nextcloud。 - 点击
nextcloud。窗口打开,03:00 的备份已作为推荐项预先选中。 - 来源保持本地。
- 在内容下选择单个文件。展开文件夹到
config,勾选config.php。 - 在目标位置下选择还原到文件夹,并选一个文件夹,例如
user/restore,在主机上就是/mnt/user/restore。 - 读一下将会发生什么:文件会放进目标文件夹,容器上什么都不会变。点击恢复。
窗口最后显示完成:文件在 /mnt/user/restore。你会在 /mnt/user/restore/config.php 找到这个文件,上面的文件夹层级都没有。把它和坏掉的那个比较一下,复制回 appdata 文件夹,然后重启 Nextcloud。
如果想直接把文件放回去,在第 5 步选择替换原件。保持先备份当前状态开启,这样 BombVault 会在写入之前先备份出问题的状态,输入 nextcloud 确认,再点击恢复。Nextcloud 会被停止,选中的文件被写回原来的位置,之后再重新启动,只有你勾选的文件会被写入。中途失败的恢复会让 Nextcloud 保持停止,因为它读取的文件可能只写了一半,运行记录会写明这一点。

按种类恢复什么¶
容器会根据保存的定义,通过 Docker API 重新创建,包括它的入口点、主机名、停止设置、卷和挂载、资源限制、日志驱动、DNS 设置和旧式链接。容器恢复时使用备份时运行的镜像,而不是之后拉取的较新镜像,缺少的镜像会先拉取,使用设置、恢复下容器镜像仓库里的登录凭据。它的 GPU 或运行时(--gpus、--runtime=nvidia)也会恢复。在没有那个驱动或运行时的主机上,恢复会说明这一点,并提供不带 GPU 和运行时恢复。指向缺失容器的链接,或在恢复的容器启动时已停止的容器的链接,会被省略,运行历史里会写明。在容器被删除之后才失败的恢复,会把它放回去,处于停止状态。
备份里可能有容器已不再选中的文件夹,例如某个文件夹消失之前做的较早的备份。已经不存在或为空的文件夹会恢复回来。现在有文件的文件夹会保持原样,因为你可能是有意取消勾选的,恢复前的检查和运行历史会点名它。要把它找回来,请用单个文件或还原到文件夹。
虚拟机的 XML 会通过 SSH 重新定义,磁盘和 UEFI NVRAM 会重新挂上,即使虚拟机已被删除。带有 Unraid 快照的虚拟机和放在 zvol 上的磁盘,参见虚拟机备份。
文件夹集恢复时带着 restic 所存储的所有者、权限和时间戳。如果目标只拒绝所有者,像 /mnt/user 那样,运行结束时会附上一条说明。BombVault 随后会把文件与备份比对,有文件没到达就会让恢复失败。
闪存绝不会碰正在使用的 /boot。恢复是一个名为 flash-<id>.zip 的下载,可以直接放进 Unraid USB Creator。这个 ZIP 里有 APP_KEY,所以下载它需要登录密码,并在实例本身登录。窗口还会列出每个闪存备份里的插件及其版本和大小,并且可以把单个插件放回正在运行的闪存:它的 .plg 文件、config/plugins 下的文件夹,以及备份里的软件包文件。Unraid 会在下次启动时安装它,或在Plugins, Install Plugin 下立即安装。
ZFS 数据集有自己的目标,并保留它们的 ZFS 属性,参见恢复。
自我备份只能通过应急向导恢复,它会重启 BombVault,所以正在使用的数据库绝不会在句柄打开的情况下被覆盖。
数据库转储从不会自己被加载回去。数据库转储下的一行可以下载、保存到文件夹,或导入到刚启动的数据库里。参见数据库转储。
一次恢复多个条目¶
在恢复页面上,像在备份列表里选行一样选择条目:Ctrl+点击、Shift+点击、Ctrl+A、长按,或者选择。然后恢复会为所有条目打开同一个窗口。
- 哪个备份:推荐为每个条目选取它自己的窗口会推荐的备份。所有条目用同一时刻为每个条目选取你选的时刻或更早的最新备份,例如出问题的前一天晚上。
- 目标位置:放在原件旁边或替换原件,带有先备份当前状态。
每个条目会像单次恢复一样检查,然后依次运行。每一行显示它自己的进展:等待中、运行中、已恢复、失败或已排除。完成当前项后停止会让正在运行的恢复完成,不再启动更多。闪存以 ZIP 下载,ZFS 数据集和自我备份则一次恢复一个。

恢复堆栈¶
点击堆栈卡片里的一个堆栈会打开还原堆栈。它同时用每个成员最新的备份恢复所有成员,开启还原后按依赖顺序启动后,会按 depends_on 的顺序启动它们:先是数据库和缓存,然后是应用。当某个成员的项目文件夹在你选的位置缺失时,窗口会改为提供本地的状态。
BombVault 会先检查各成员和项目文件夹,无法成功的恢复不会改动任何东西。否则它会停止正在运行的成员,先停应用再停它们的数据库,然后写入项目文件夹,再恢复各成员。如果项目文件夹没有恢复回来,成员仍会被恢复,但保持停止,因为文件夹可能只写了一半,而成员的绑定挂载通常就在那里。每个成员的运行记录都会写明这一点。
只有数据库转储而没有文件备份、容器和命名卷也都已不在的数据库,会在没有数据的情况下恢复回来。恢复之前的检查会说明这一点。它会保持停止,依赖它的容器也一样,所以不会有应用在空数据库上运行初始设置。请先启动它,导入一份转储,再启动其他容器。参见数据库转储。
其他来源¶
- 从旧的备份文件夹会打开另一个已不再运行的 BombVault 的仓库,可以在磁盘上,也可以在异地存储位置,使用它的恢复工具包或输入的
APP_KEY。这个会话是只读的,只存在于内存中。参见从旧的备份文件夹。 - 从 Appdata.Backup 插件导入会读取该插件的备份文件夹。每个容器归档成为该容器的一个恢复点,日期是插件创建它的时间。之前导入过的归档会跳过,归档本身只读取。容器需要先在 BombVault 里做一次备份,恢复才有它的定义。保留规则不会动导入的恢复点,所以不再需要时请自己删除。
恢复之后¶
恢复到原件旁边的副本会在备份下列为已排除,所以它不算未完成的任务。如果想保留它,请把它加进计划。备份时正在运行的容器或虚拟机会以运行状态恢复,已停止的保持停止。在 Unraid 上,恢复的容器会作为正常、可编辑的应用重新出现在 Docker 标签页中,虚拟机则出现在虚拟机管理器中,磁盘和 NVRAM 已经挂上。