功能¶
BombVault 默认简单,需要时深入。界面只显示基本功能,直到您切换简单视图 / 高级视图开关。本页对完整的功能集进行分组。
备份范围¶

每个容器都有自己的计划开关、备份顺序和独立历史。
| 内容 | 保存的内容 |
|---|---|
| Docker 容器 | Appdata 目录以及容器定义(镜像、环境变量、端口、标签、卷)。默认备份整个 appdata 目录;在容器上使用 选择文件夹 可以精确勾选备份涵盖哪些文件夹,并实时显示路径数量、列出您排除的内容,每个根目录都有一个 跳过缓存文件夹(CACHEDIR.TAG)开关。 |
| KVM / libvirt 虚拟机 | 虚拟机磁盘映像、XML 定义和 UEFI NVRAM(优雅关机或实时快照,通过 SSH)。如果无法创建快照,实时快照会自动回退到优雅备份,因此虚拟机备份绝不会直接报错。 开启 仅变更的块 后,使用 qcow2 磁盘且正在运行的虚拟机会通过 libvirt 检查点读取,每次备份只读取自上次以来写入的块,而每个快照仍然可以单独恢复整个磁盘。位于 ZFS zvol 上的磁盘会通过同一条 SSH 连接用 zfs send 流式传输,因此磁盘为 zvol 的虚拟机也会作为一台虚拟机备份。当域 XML 写明直通 vTPM 的路径时,其状态会保存在 NVRAM 旁边。TrueNAS 为 Windows 11 客户机设置的模拟 vTPM 不会公开该路径,因此请把这类客户机的恢复密钥妥善备好。参见 虚拟机备份指南。 |
| Unraid 闪存 | 整个 USB 闪存(/boot):操作系统、许可证、阵列配置、共享、网络和插件配置。还原是一键下载的 .zip,绝不会覆盖运行中的闪存。 |
| 应用配置 | BombVault 自身的 /config(设置数据库、异地凭据、libvirt SSH 密钥对),通过 SQLite 的 VACUUM INTO 进行快照,因此 WAL 模式的数据库绝不会在写入过程中被捕获。通过自我重启还原,因此运行中的数据库绝不会在打开的句柄下被覆盖。 |
| 文件与文件夹 | 命名的文件集:服务器上的任意文件夹(一个共享、您的文档、一个照片库),每个文件集可选配各自的排除模式。与其他域完全对等(计划、保留、异地复制、完整性检查和还原演练)。 |
| ZFS 数据集 | 一个数据集连同其下的所有数据集,从同一个 ZFS 快照读取,因此全部来自同一时刻,并像文件夹一样用 restic 保存:去重、可浏览、可恢复单个文件。新的子数据集会自动加入,可以单独排除,无法读取的会被跳过并列出名称。可选地只在拍快照的那一刻停止容器或运行命令。不包括卷:VM 的卷随其 VM 一起备份,没有 VM 使用的卷暂不备份。参见 ZFS 数据集。 |
还原¶

引导式恢复在同一处带着全新安装走完灾难流程。
- 一键完整还原。 选择一个快照,点击还原。完成。
- 每个项目一条时间线。 容器、虚拟机、文件集、闪存和应用配置,都会把它们的备份列成一条时间线,覆盖它们所在的每个位置、它们写入的仓库以及每个异地目标。复制到异地的备份只会出现一次,标注上每个位置。异地位置会在您打开时读取,在某一处删除会说明这是否是最后一份副本。
- 容器会被自动重装。 容器定义会对 Docker API 重新执行,因此容器会原样重新出现在 Unraid 的 Docker 标签页中。
- GPU、限制和链接都会回来。 恢复的容器会取回它的资源限制、日志驱动、DNS 设置、旧式链接以及 GPU 或运行时(
--gpus、--runtime=nvidia)。在缺少该 GPU 驱动或运行时的主机上,恢复会说明这一点并提供 不带 GPU 和运行时恢复,恢复多个容器或一个 stack 之后也一样。指向不存在的容器,或在恢复的容器启动时已停止的容器的链接会被去掉,运行历史会注明。 - 虚拟机会被自动重建。 XML 通过 SSH 重新导入,因此虚拟机会重新出现在虚拟机管理器中,并重新挂接其磁盘和 UEFI NVRAM,即使虚拟机已被删除也是如此。发现备份会重建一个完全消失的条目(例如全新安装后)。
- 单独还原。 还原单个容器、单台虚拟机或单个文件集,而不触动其他项目。
- 闪存还原是一个
.zip下载。 它会以flash-<id>.zip流式传输到您的浏览器,可直接放入 Unraid USB 创建器。运行中的/boot绝不会被触碰。 - 逐个恢复插件。 闪存页面列出每个闪存备份中的插件及其版本和大小,并把单个插件放回正在运行的闪存盘:它的
.plg文件、config/plugins下的文件夹,以及备份中的软件包文件。闪存盘上的其他内容不会改变。Unraid 会在下次启动时安装插件,或在 Plugins, Install Plugin 中立即安装。 - 计划性的闪存 zip 导出。 每次闪存备份后,可选地将快照以普通
.zip形式写出到您选定的文件夹(单个被覆盖的flash-latest.zip或滚动历史)。把它指向一个 Syncthing 或 rclone 文件夹,您的可引导 USB 备份就会自动离开服务器。 - 预检冲突检查。 在停止或移除任何东西之前,还原会验证容器的静态 IP 和已发布的主机端口是否空闲,若被占用则以清晰的消息中止,而不是留下一个只完成一半的还原。
- 恢复前检查。 每个恢复对话框都会先检查仓库是否响应、已保存的密钥能否打开它、恢复点是否存在,以及目标是否有足够空间容纳恢复要写入的内容。只要有检查未通过,开始按钮就保持锁定,按钮上的 (i) 会说明是哪一项。
- 恢复计划。 确认之前,对话框会显示恢复与当前状态相比会做什么:新增、替换和未变的文件(可按需查看列表),以及目标中有但备份里没有、会原样保留的文件。对于容器和虚拟机,还会把恢复要重建的设置与正在运行的设置对比:镜像和标签、端口、变量名和卷,或内存、vCPU、磁盘和网络。restic 通过按大小和修改时间的试运行得出这些结果,不读取文件内容;非常大的目录树在 30 秒后停止并说明这一点。堆栈恢复会逐个检查并规划每个成员,并指出阻止恢复的那个成员。
- 共享文件夹。 原位恢复会列出所有其他容器(无论是否在运行),只要它们的绑定挂载触及恢复要写入的文件夹,例如“nextcloud-db 也在使用此路径”。这只是提醒,不会阻止恢复。
- 文件级还原。 展开某个容器快照的文件,筛选,勾选任意数量的文件和文件夹,然后就地还原所选内容或还原到您选定的文件夹。
- 文件集还原。 就地还原一个文件集快照(在明确确认之后)或还原到您选定的文件夹,绝不会静默进行。选择性还原在这里同样有效。
- ZFS 数据集恢复。 将某项中的一个数据集恢复到原位(先拍一个 ZFS 安全快照,保留到你删除为止)、恢复到文件夹或只恢复所选文件,也可以把一次备份的所有数据集恢复到文件夹。数据集绝不会被回滚或替换。
- 还原保持运行状态。 备份时正在运行的容器或虚拟机恢复后仍在运行;停止的则保持停止。勾选还原后保持停止可重建而不启动。
- 还原整个堆栈。 来自同一 Docker Compose 项目的容器会被归入一个堆栈面板。还原堆栈…会从每个成员的最新备份重建它们并保持停止,然后可选地按
depends_on顺序启动它们。 - 实时进度、取消和忙碌反馈。 一次长时间的还原会显示实时百分比条,并可通过类型感知的确认取消。已取消的还原会被记录为已取消,而非失败。
- 引导式恢复。 一个专门的恢复标签页引导全新安装走完灾难场景。参见异地与恢复。
- 从另一个 BombVault 仓库还原。 一次性的只读会话用另一个 BombVault 实例的
APP_KEY打开该实例的仓库,因此您可以把一个容器从服务器 A 拉取到服务器 B,而无需触动您自己的设置。参见异地与恢复。 - ZFS 属性也会回来。 每次 ZFS 备份都会保存每个数据集在本地设置的属性,例如压缩、记录大小、配额和大小写敏感。还原到新数据集时会用这些属性创建它;还原到现有数据集时会列出这些属性,只在你要求时才设置。参见 ZFS 数据集。
- 从 Appdata.Backup 插件导入。 在 恢复 页面上把插件的备份文件夹告诉 BombVault。每个容器归档都会成为其容器的一个还原点,日期为插件创建它的时间。已导入的归档会被跳过,归档本身只会被读取。容器需要先在 BombVault 中备份一次,还原时才有它的定义。保留规则不会删除导入的还原点,不再需要的请自行删除。
存储与计划¶
- 通过 restic 进行增量、去重的备份,因此即使是大型虚拟机磁盘也不会让仓库膨胀。
- 目标: 本地路径,或异地。SMB 共享和 WebDAV 服务器(Nextcloud、ownCloud、SharePoint)可直接通过 设置,云访问,rclone 下的表单添加,无需主机挂载;NFS(在 Unraid 上挂载导出并将备份路径指向它);无需 rclone 的原生 restic 后端(
s3:...、rest:http://host:8000/repo、sftp:user@host:/repo),或通过rclone:<remote>:<bucket>/path使用任意 rclone 远程。所有凭据都以加密方式存储。 - SSH 目标无需在对端安装任何东西。
sftp:只需要一个 SSH 服务器,因此一台裸的 Raspberry Pi(无 Docker、无 restic)就能用作异地目标。主机密钥会在首次连接时自动固定。 - 异地复制(本地 + 远程)。 保留快速的本地备份,再添加一个或多个异地副本,以尽力而为的方式用
restic copy复制(异地出现问题绝不会导致本地备份失败)。每个域都有各自的异地计划,外加一个立即复制按钮。 - 每个域可有多个异地目标。 每个域(容器、虚拟机、闪存、配置、文件集和 ZFS 数据集)都可以同时复制到多个异地目标,而不仅仅是一个。在异地页面添加额外目标,每个目标都有各自的仓库、S3 存储类别、append-only 标志、保留和增长预算。您现有的异地副本会作为第一个目标沿用下来,因此在您添加第二个目标之前一切都不会改变,而一个域的每个目标都按该域的异地计划复制。
- 命名仓库。 在 设置、存储、存储库 下把您的备份位置记录一次,可以是本地路径,也可以是带有自己凭据集的任意 restic 远程,然后在项目卡片上选择其中一个作为该项目的位置。每一行会显示有多少项目指向它;被某个项目或存放位置默认值使用的仓库无法移动或删除,因为 BombVault 从不移动已经写入的备份。
- 多套云凭据。 共享云凭据默认适用于所有地方,但任何目标都可以改为选择一个命名凭据集(设置、云访问、附加凭据集),这样 Hetzner 的 S3 存储桶和本地的 Garage 服务器就能各用各的密钥并行运行。这同样适用于异地目标,以及本身就是远程仓库的备份路径。
- 目标。 异地目标只需通过一个向导设置一次,向导列出 S3 存储服务、您自己的 S3 服务器、您自己的服务器和共享,以及 rclone 支持的所有云存储,包含登录、连接测试、文件夹选择器,并如实说明防删除保护。之后它会作为按钮出现在每个域和每个项目上。参见目标。
- 每个项目的存放位置。 每张容器、虚拟机和文件集卡片都有一行按钮,本地以及每个异地目标各一个,亮起的会获得其备份。一个本就在 NAS 上的共享,不必再额外发往 B2。位置从首次备份起固定,副本则可以随时更改,卡片会说明有多少个站点持有该项目以及是否满足 3-2-1。参见每个项目的存放位置。
- 存放位置默认值。 每个域一行,设定新项目写入何处,以及没有自己选择的项目会被复制到哪些目标。更改它不会移动任何备份,并会预先说明哪些目标会获得或失去项目。
- 手动备份顺序。 在容器页面的备份顺序面板中设置容器备份的确切顺序。计划任务和多选运行会遵循它;任何未排序的容器保持先前的最逾期优先行为,而单个容器备份不受影响。
- 可配置的保留: keep-last / 每日 / 每周 / 每月 / 每年,每次备份后自动清理,按来源设置(本地和异地均位于设置,保留,因此您可以将异地副本作为归档保留更久)。每个来源也可以在本地和异地分别使用自己的规则(按来源设置保留规则),例如每天变化的容器保留 7 个每日备份,很少变化的虚拟机保留得更少。
- 按仓库设置压缩: 关闭、自动(restic 默认值)或最大,每个备份路径和每个命名仓库在设置,存储中设置,每个异地目标在设置,异地中设置。备份、异地副本和清理都按此写入,恢复包也会注明,这样单独使用 restic 时也能以同样方式继续写入。
- 按域计划(每日 / 每周含多日集 / 每 N 天 / 原始 cron),全部在设置,计划中一处编辑。单个容器、虚拟机、文件集或 ZFS 项目可以有自己的周期,每 N 天 也适用于还原演练、篡改测试和每周摘要。
- 等待应用空闲。 容器可以让其计划备份在应用繁忙时等待,最多等待你设置的小时数,并在应用空闲后立即开始。媒体服务器在未串流时视为空闲,其他容器在 CPU 和流量连续几分钟低于 设置,计划 中的限制时视为空闲(使用主机网络时只看 CPU)。等待中的备份会连同原因和期限显示在活动日志和容器上。它不占用任何锁,其他容器照常进行。手动备份从不等待。同一次运行中到期的 compose 堆栈成员会一起等待,重启后等待会按原期限继续。关闭容器会取消所有等待中的备份,关闭它们的计划会取消该计划的运行所暂缓的备份。减少小时数也会缩短已经开始的等待。
- 异地带宽限制。 限制 restic 的上传/下载速率,使复制不会占满您的 WAN。
- 串流优先。 当 Plex、Jellyfin 或 Emby 等媒体服务器正在串流时,异地副本以较低的限制上传,并在串流结束几分钟后恢复常规限制。BombVault 从 Docker 读取媒体服务器的出站流量。REST、S3、B2、Azure、Google Cloud、Swift 以及通过 HTTP 的 rclone 会在复制过程中直接减速;SFTP 和本地或挂载的文件夹在下一个复制步骤才使用较低的限制。使用主机网络的媒体服务器无法测量。位于 设置,异地。
- 冷存储与归档存储类别(S3)。 对于原生 S3 异地仓库,您可以选择存储类别,限于可还原读取的层级(Standard、Standard-IA、One Zone-IA、Intelligent-Tiering、Glacier Instant Retrieval),因此归档定价绝不会静默地破坏一次还原。需要先进行异步解冻的深度归档层级(Glacier Flexible、Deep Archive)被有意排除。仅限原生 S3 后端;rclone 远程在 rclone 配置中设置其类别。
- 备份文件夹保持可离机复制。 每次备份后 BombVault 会将本地仓库树放宽到目录
0755/ 文件0644(仓库是加密的,因此不会暴露任何东西),这样通过 SMB 的非 root 同步用户不会被拒之门外。恢复定义存放在每个仓库内部,因此被复制的仓库文件夹是完全自包含的。
洞察、验证与监控¶
- 直接在卡片上暂停。 每张容器、虚拟机和文件夹集卡片都有暂停计划,它会把该项从计划和 Backup Everything 中移出,还有恢复计划把它放回去。它设置的是与加入计划任务相同的开关,所以两者始终一致。被暂停的项会带一个灰色的计划已暂停徽章,立即备份仍然可用。
- 保护状态(RPO)。 仪表板为每个域显示一个绿 / 黄 / 红指示,将上次成功的备份与其计划进行比较,因此逾期的备份会变红,而不是藏在日志里。
- 备份健康度热力图。 一个 GitHub 贡献风格的日历,显示每个域每天的备份结果,带有容器 / 虚拟机 / 闪存 / 自我备份 / 文件夹切换。
- 处处显示运行时间。 每条运行历史条目都读作
开始,结束(时长),每个容器和虚拟机在其页面上都带有各自的最近运行列表。 - 可重新排列的仪表板。 切换自定义模式,将卡片拖入您想要的顺序并隐藏不需要的卡片。布局按浏览器保存。
- 仓库大小与去重趋势。 每个域当前的仓库大小、去重比率和快照数量,带有一条存储增长的迷你折线图。
- 还原验证演练。 BombVault 定期证明您的备份可还原(
restic check --read-data-subset,有界),并为每个域显示一个已验证可还原徽章。 - 首次备份后的恢复检查。 某个项目的首次备份完成后,BombVault 会将其中一部分(最多 100 个文件、256 MiB)恢复到恢复文件夹下的临时文件夹,让 restic 对照哈希逐个读回文件,并将大小与备份比对。对于大到无法放入样本的文件(例如 VM 磁盘),改为读回前 64 MiB。项目卡片显示结果,失败时发送通知,检查恢复 可随时对最新备份运行同样的检查。之后的备份不会重复这项检查。
- 启动测试。 字节无误并不能说明应用能重新运行。容器卡片上的 启动测试 会把最新备份恢复为隔离副本并启动:名称以
bombvault-test-开头,使用自己的内部 Docker 网络,没有发布的端口,也无法访问局域网,限制为 1 个 CPU 和 2 GiB 内存,数据放在恢复文件夹下的临时文件夹中。容器的健康检查报告正常即为通过;没有健康检查时,其第一个暴露端口在该网络内有响应即为通过;两者都没有时,保持运行即为通过。原容器绝不会被停止或更改,副本及其网络和数据会在测试后删除,即使 BombVault 在测试中途重启也一样。使用主机网络、特权模式、设备或依赖其他容器的容器会显示为无法测试。在计划的恢复检查中开启 启动测试 后,每次运行测试一个容器,最久未测试的优先。结果显示在卡片和仪表板上。副本不带原容器的任何标签,并且在没有原容器额外添加的 capabilities、安全选项、sysctl 和 cgroup parent 的情况下运行。需要这些的容器会测试失败,结果会写明副本缺了什么。 - 自愈操作。 一个可证明为孤立的 restic 锁(由操作中途的重启留下)会被自动强制清除并重试一次。保留是身份稳定的(按项目清理,不受路径或主机变化影响),保留失败会发送通知。
- 文件夹扫描看不到的警告。 排除助手回答的是大小问题。而一些代价最高的备份错误并不是大小问题,所以它还带有针对具体应用的注意事项,说明某个应用如何存放它的数据。它最初就是为这个例子而存在的:Immich 把每张照片的相册、人脸和日期保存在一个运行于单独容器中的 PostgreSQL 数据库里,所以对 Immich 容器做文件级备份,还原出来的只有图片,这些信息一概没有,而还原看起来却是成功的。无论是否提供了排除建议,这条警告都会显示,在一个没有选择任何扫描内容的容器上也会显示,因为这条注意事项在两种情况下都成立。
- 未备份(覆盖范围)。 一张仪表板卡片,列出服务器上所有没有被任何自动备份覆盖的东西,并逐一给出原因:根本没有添加到 BombVault、存在但没有纳入计划、自身的计划被设为关闭,或者任何地方都没有打开计划。它上方的保护指示回答的是另一个问题,即已经排入计划的备份是否按时运行,它看不到从来没人设置过的容器:那个容器不出现在任何列表和任何错误里,所以不会有任何东西为它变黄。容器是从实时的 Docker 列表读取的,而不是从 BombVault 自己的记录行读取,因为没有记录行的项目恰恰就是需要点名的那个。您关闭的备份类型完全不计入,因为那是您自己的选择。
- 保留预览。 保留设置旁边的面板会在删除发生之前,显示下一次运行将要删除的内容:按仓库、按项目,并列出还原点的名称。它不获取仓库锁,也不改变任何东西,所以即使备份正在运行也能给出答案。保留关闭时它会直接说明,而不是显示一个空列表;append-only 仓库会被标注出来(那里根本不会运行保留);无法访问的仓库会被点名,而不是悄悄缺席。位于设置,保留下,本地和异地策略各自预览自己的内容。
- 异常。 容器、虚拟机、文件夹集、数据库转储、闪存盘和自我备份的每一次备份,都会与该对象自己的历史进行比较。检查的内容包括:一次运行存入的新数据,与近期备份中通常最大的量以及通常的每小时速率相比;一次重新存储了大部分数据的备份,包括被重命名并重写的文件;restic 为每个对象和每个转储报告的源大小和文件数;restic 自身的备份用时;连续失败和间歇性失败;不再通过的恢复检查;以及本地、SFTP 和 rclone 仓库的可用空间,根据仓库的增长进行预测。对象会从它的前 10 次备份中学习,而几乎为空的源、大部分数据被重写以及失败从一开始就会检查。升级时,历史会从 restic 0.17 保存的快照摘要中读取一次,因此现有安装不会从零开始。灵敏度(严格、均衡、宽松)和发送通知的最低严重程度在 设置,完整性 中全局设置,并可按对象修改。警告在原因消失后会自行关闭;关于数据丢失和磁盘即将写满的严重发现会一直保留,直到您确认,已确认的发现在其原因消失过一次之前不会再次报告。标记为预期之内 会在 10 次备份后把新的水平视为正常,但绝不会关闭对几乎为空的源的检查;选择发生变化后,对象的历史会自动重新开始。只要源几乎为空、大幅缩小,或某次备份重新存储了大部分数据,保留策略就会保留该对象的旧备份,直到您确认该发现或将其标记为预期之内,发现中会链接到最后一个正常的备份。每个事件只发送一次通知,已经自行通知的失败和恢复检查不会重复报告。它不做的事:S3、B2 和 REST 仓库没有可用空间数据;在 Unraid 用户共享上,可用空间是整个阵列的可用空间;restic 0.17 之前的备份没有大小历史。ZFS 对象也会被检查,而且按数据集逐个检查:树中的每个数据集都有自己的历史,被清空或再也无法读取的数据集算作数据丢失,只保留该数据集的旧备份。 ZFS 项目如何按数据集逐个监视,见 ZFS 数据集;助手可以通过 MCP 服务器 读取未处理的异常。 关于来源大小或文件数的发现,按其首次出现的备份标注时间;与之前的备份比较 会列出文件消失、新增或改变的文件夹,若几乎全部位于应用会自行重建的搜索索引、缓存或缩略图中,还会加以说明。
- 按应用推荐的排除项。 对于常见镜像(Plex、Jellyfin、Emby、Sonarr、Radarr、Lidarr、Readarr、Prowlarr、Immich、Nextcloud、PhotoPrism 和 Tautulli,来自 linuxserver、hotio、binhex 或官方发布者),排除助手会列出应用会自行重新填充的文件夹:缓存、日志、预览图和海报。每一项都说明其内容,任何一项都可以关闭,在你按下 排除所选项 之前不会排除任何内容。
- 支持包。 一键生成、已脱敏的 ZIP,用于提交错误报告:包含主机集成检查、去掉所有机密的配置、最近的运行、接下来的计划以及最近的日志。它还包含每个数据库最后一次转储的情况、ZFS 项目及容器看到的挂载、未处理的异常,以及 MCP 密钥的数量(绝不包含其名称)。密码、令牌、rclone 配置、通知凭据以及嵌在仓库位置中的任何密码都会被去除,支持包在自己的清单中也会注明这一点,因为支持文件绝不能被误当成配置备份。出于与恢复工具包相同的原因,它需要登录密码。其中的日志是这个容器自上次启动以来的输出;如果崩溃导致容器重启,仍然要去看
docker logs。 - 加密密钥恢复工具包。 一键下载主密钥、派生出的 restic 密码以及确切的仓库位置和命令,因此您可以在没有运行中的 BombVault 的情况下还原。参见异地与恢复。
- 导出与导入您的设置。 设置,系统页面上的导出 / 导入设置卡片会将您的整套配置(域设置、异地目标、计划、保留、通知)写入一个可移植的 JSON 文件,因此迁移到新机器或克隆一套配置不再意味着要手动重新录入一切。您可以选择是否包含异地和通知凭据;包含它们时该文件与您的恢复工具包一样敏感。导入会显示预览并要求确认,且绝不会触动您的备份数据或历史。
- 通知。 Webhook(Discord / Slack / Gotify / ntfy)、Matrix、Healthchecks.io、电子邮件(SMTP)、一个自托管的 Apprise API 服务器,以及 Unraid 原生的通知系统。每份备份的策略:从不 / 失败时 / 总是。多项目的一次计划运行可以发送一条 M 项中有 N 项成功 的摘要。只要设置了 URL,Healthchecks 就会获得完整的生命周期(
/start,然后是成功或/fail)。 - 每周摘要。 每周通过相同的渠道发送一条消息:运行次数、新增了多少备份数据、异地是否为最新,以及最主要的失败。默认关闭,在 设置、通知 中有自己的周期,因此平静的一周也会用一条消息报告出来。
- Prometheus
/metrics。 可选启用(默认关闭,可选 bearer 令牌)供 Grafana 或 Uptime Kuma 使用。暴露备份状态、大小和时间戳,标签中没有任何密钥或路径。 - HTTP API、Home Assistant 和 mDNS。 脚本和仪表板可以使用
/api/v1下的 API,配合命名令牌,令牌可以是只读的,也可以允许启动备份。Home Assistant 通过 MQTT 发现找到 BombVault,将其作为一个带传感器的设备,并在您允许时为每个域添加一个备份按钮。此外,BombVault 会在网络上以bombvault.local广播自己。参见 API 与集成。 - 可用空间与预计写满周数。 本地仓库、SFTP 仓库,以及会报告可用空间的 SMB 或 WebDAV 目标,会显示其可用空间,以及按当前增长速度还能用多少周。S3、B2 和 REST 仓库显示"可用空间未知",因为这些后端不报告可用空间。
- 按文件夹统计大小。 在容器、虚拟机或文件夹集的“备份”部分,按文件夹统计大小 会逐层显示最新备份中哪些文件夹和文件占用空间,以及其中上次备份新增或更改了多少。BombVault 从仓库索引中读取,不读取文件本身;打开过一次后,每次备份后都会更新。
- 备份为什么慢。 备份运行时,BombVault 会观察 CPU、磁盘和网络的繁忙程度。如果某次备份比平时慢得多,并且明显只有一样东西到了极限,这次运行会注明,例如“目标磁盘 disk1 的占用率为 98%”或“BombVault 用掉了其容器 CPU 限额的 100%”。否则不显示任何内容。
- 上次备份后已更改。 如果容器在上次备份后以其他镜像、端口、变量或卷重新创建,名称旁会出现一个标记。它的 (i) 会列出更改内容,变量只显示名称。这只是提示,下次备份后就会消失。
勒索软件防护¶
- 不可变(append-only)异地。 将异地仓库标记为 append-only,这样勒索软件或被入侵的主机就无法删除或改写您的备份。对端(一个处于
--append-only模式的restic/rest-server)强制执行它;BombVault 只会验证它,绝不会仅凭配置声明就显示绿色。 - 篡改测试。 BombVault 定期通过实际尝试对异地仓库执行删除(瞄准一个不存在的对象)来证明 append-only 保证:被拒绝意味着受保护,被接受意味着未受保护。不确定的结果绝不会翻转已存储的判定。
- 引导式异地设置。 一个向导带您从后端选择,走过一段可直接粘贴的 rest-server 部署片段、一次连接测试、不可变切换和一套保留策略。
- DR 演练(异地)。 将一个真实目标从异地仓库还原到一次性沙盒,逐文件、逐字节地验证它,然后清理。参见异地与恢复。
- 勒索软件防护评分卡。 一张仪表板卡片,为每个域显示绿 / 黄 / 红态势和一份带时间戳的清单;每一行红色都深链到对应的修复。它只在经过验证的事实上变绿。
- 增长预算告警。 对于不可变的异地(其中旧快照被有意从不清理),设置一个大小预算,在它失控之前得到告警。
- 短语配对。 实例通过十二个单词加入同一个群组:在一台上创建短语,在下一台上输入它。同一网络中的成员直接对话,其余的通过中继(项目中继、自建中继,或不使用中继),它们之间的每一次通话都是端到端加密的。该群组承载实例页面上的评分卡、Mesh 的站外存储提议,以及接收端或拉取来源所需要的东西,但绝不承载备份数据,也绝不承载 APP_KEY。参见异地与恢复。
- 实例页面。 在设置中开启 实例,即可获得一个页面,为群组中的每个实例(包括本机)各显示一张卡片:它的地址、是否已连接,以及每个域的保护状态和最近一次备份,颜色与本地仪表板一样是红、黄、绿。立即检查 会请某个成员验证一个域的仓库。此页面上的任何操作都不能在另一台机器上启动备份、还原或删除任何内容。
- Mesh 异地。 一个成员可以通过群组把自己的异地存储提供给另一个成员。对方管理员在实例页面上看到这项提议,可以接受或拒绝;接受后会创建一个普通的凭据集和异地目标。通过这种方式传递的只有连接信息,绝不包括备份数据。
- 接收方仪表板(接收侧)。 在接收来自另一个 BombVault 的不可变异地副本的机器上,打开接收方开关(设置)以显示接收方标签页。以只读方式(用发送实例的 restic 密码打开,该密码通过配对群组获取)注册一个已接收的仓库,即可查看按来源分组的快照清单、每个来源上次到达的时间,并在接收硬件上运行独立的
restic check。当某个来源在您设定的时间窗内停止发送时(一个死人开关),或当完整性检查失败时,它会向您告警。它严格只读,因此绝不会写入已接收的仓库,且默认关闭。参见异地与恢复。 - 从另一个实例拉取(拉取侧)。 这是异地复制的镜像:不是这台机器把自己的快照推出去,而是它把别人的快照取进来。打开拉取开关(设置)以显示实例页面的拉取标签页,从配对群组中选择另一个实例及其仓库位置,然后选择它保存的是哪类备份以及多久拉取一次。它的 restic 密码通过群组获取,绝不会是它的 APP_KEY。对端无需再做任何配置,也不必处于运行状态。源仓库只会被读取:它被打开以检查密码、被列出并被指定为副本的来源,绝不会被初始化、解锁、清理或写入。双方各自保留自己的凭据,
rclone:来源会被拒绝,因为 rclone 会用这个实例的远程去访问它。参见异地与恢复。
普通导出¶
- 容器普通导出。 每个容器的导出(普通 tar)按钮会在仓库旁写出一份可浏览、无需工具的副本:备份文件夹的
<name>.tar.gz加上 Unraid 的<name>.xml模板。restic 仍是引擎;这是一份额外的便利副本。 - 虚拟机普通导出。 虚拟机有相同的导出(普通 tar):磁盘映像的
<name>.tar.gz加上<name>.xml,可用virsh define加磁盘还原,无需 BombVault 或 restic。 - 加密普通导出(age)。 这些导出位于 restic 之外,因此默认为明文。在设置中打开 age 加密并添加一个或多个收件人(一个 age 公钥或一个 SSH 公钥)。此后每份导出(容器和虚拟机的
.tar.gz、它们的.xml附属文件以及闪存 ZIP)都会为这些收件人密封,之后您可以在服务器之外用对应的私钥解密。作为一条安全规则,在加密已开启且未设置有效收件人时,导出会以清晰的错误失败,而绝不会写出明文。 - 恢复工具包也会被密封。 开启同一设置后,工具包会以
bombvault-recovery-kit.md.age下载。它是 ASCII 装甲格式而不是二进制,所以仍是可直接阅读的纯文本:您依然可以把它粘贴到密码管理器或打印出来,这正是工具包的用途。同样的安全规则也适用,因此在加密开启却没有可用收件人时,下载会被拒绝,而不是退回到以明文交出主密钥。开启此功能时有一点必须做对:打开工具包需要您的 age 私钥,所以请把这把密钥存放在不依赖工具包本身的地方。
AI 助手(MCP)¶
BombVault 内置 MCP 服务器,Claude Code 或 Claude Desktop 等助手可以通过它读取备份状态、覆盖范围、运行历史、还原点和当前活动。使用允许此操作的密钥时,助手还可以启动单个项目、单个域或全部内容的备份,并取消它自己启动的备份。还原、删除、prune 和设置仍留在网页界面中。每个客户端在 设置、集成、MCP 服务器 中获得自己的密钥;密钥只显示一次,只以指纹形式保存,可随时重命名、更换或撤销。启动次数按小时和按项目限制,保留保护可防止助手的备份把你自己的还原点挤出"保留最近 N 个"的策略。助手启动的每次运行都会标注"通过 MCP"和密钥名称。见 MCP 服务器。 数据库转储和 ZFS 数据集 也在它读取的项目和还原点之中,它还可以列出 BombVault 发现的异常。
应用与配套工具¶
- Android 应用。 把群组中的每台服务器都放到手机上,并在一个屏幕上显示所有服务器的活动日志。它通过二维码与群组配对,打开每台服务器时都已处于登录状态。参见 Android 应用。
- 接收服务器。 接收异地副本的机器可以一键启动 append-only 的 rest-server,并把它提供给您的组中的其他实例,每个实例各有自己的登录。参见接收服务器。
- 设置、应用。 页面从 Android 应用开始,提供服务器所运行版本的 APK 和对应的二维码,之后是为每个配套工具各设的一张卡片。ParleyPort 的卡片提供其 Unraid 模板,可复制启动它的 Docker 命令,并链接到它的仓库以及配对下的中继设置。BombVault Widget 的卡片提供其模板和仓库,并通过主机 SSH 连接安装或移除该插件。
- BombVault Widget。 Unraid 仪表板上的一个磁贴,显示 BombVault 的活动日志和下一次计划运行。没有主机 SSH 连接时,卡片会给出
.plg地址,供您在 Plugins, Install Plugin 下安装,之后也可以像其他插件一样在那里移除。 - 可嵌入的活动日志。 在 设置、集成 下生成一个只读令牌,您就会得到一个地址,可用于任何能显示 iframe 的仪表板,例如 Homepage、Organizr 或 Heimdall:一个只有实时活动日志的小页面。该令牌只授予对这份日志的访问,别无其他,停用 会立即将其撤销。嵌入的页面只有英文版。
其他¶
- 停止正在运行的备份。 每张能启动备份的卡片,在运行期间都会在进度条旁显示 取消备份 按钮。该次运行会记录为已取消,而不是失败。停止是安全的,因为 restic 最后才写入快照,所以中止的运行只会留下未被引用的数据,不会留下快照。
- 一次备份多个。 多选容器并点击备份所选。批处理在服务器端运行,因此即使您关闭标签页或断开连接它也会继续进行。BombVault 绝不会备份(因此也绝不会停止)它自己的容器。
- 快照浏览器,带有还原点列表、按快照删除,以及用于文件级还原的可折叠文件夹树。
- 按域进行仓库维护: 验证(
restic check)、解锁(清除卡住的锁)和清理(在设置了保留策略时按需应用它,否则进行普通的空间回收)。 - 验证、恢复检查和清理的进度。 这些操作运行时,活动日志和完整性卡片会显示 restic 已经数到哪里,例如 12/47 个包,数据足够估算后还会显示该步骤的剩余时间。restic 在这里计数的是包、快照和索引文件,而不是字节,因此进度条显示的也是这些;在第一次计数之前,进度条不带数字地移动。
- 自动数据库转储。 识别出的 PostgreSQL、MySQL 和 MariaDB 容器(官方镜像、PostGIS、TimescaleDB、pgvector、pgautoupgrade、Immich 的数据库镜像、linuxserver、yobasystems 和 jc21 的 MariaDB,以及 Oracle 的 mysql-server)会在每次备份前从运行中的服务器转储。仅仅看起来像数据库的容器,也会在卡片上得到同样的开关,在你选择之前保持关闭。转储直接流入仓库,在文件备份旁成为独立的还原点,永远不会写到磁盘上。凭据取自容器自身的变量,包括
*_FILE密钥,并且不会离开容器。每张卡片都会说明数据库的数据目录是在容器停止时保存、在运行中复制,还是根本没有保存。转储失败不会导致备份失败:它会作为一次失败的运行出现,附带原因和修复提示,并发送通知。转储绝不会自动回灌。你可以下载它(原始或压缩)、保存到文件夹、一键导入到刚启动的数据库,或用 restic 命令行取出。可以按容器关闭,用标签bombvault.dbdump=false,或在设置中为所有容器关闭。 异常检测也会关注每个转储的大小,助手可以通过 MCP 服务器 列出容器的转储。 - 每个容器的备份前/后钩子。 Shell 命令在容器内部运行(例如把缓存写入磁盘);失败的前置钩子会中止备份。识别出的数据库会自动转储,无需为此设置钩子。
- 在备份期间停止其他容器,并进行健康门控的重启。 指定要在此容器备份时停止的依赖容器(例如数据库)。之后 BombVault 会按其 Compose 的
depends_on顺序将它们恢复,并且默认等待每一个报告健康(如果它没有健康检查,则为运行中)后再启动依赖它的容器,因此像 Pi-hole、数据库或 VPN 网关这样的依赖会在需要它的服务之前真正就绪,而不是让那些服务返回连接被拒绝。等待受每个容器的超时约束(默认 120 秒),因此一个缓慢或永远不健康的容器绝不会挂起整个运行;等待和超时都位于设置,容器(关闭等待可回到先前一次性重启的行为)。同样有序、健康门控的重启也包裹了备份后的镜像更新,因此在有更新到来的那一天,依赖项会在重建过程中被压住,只在更新完成后才经过健康门控被恢复。 - 每个容器的排除模式。 列出被备份的卷内部要跳过的子目录,每行一个。按您在容器内部看到的样子输入路径;实时预览会显示每一行解析成什么,并在某一行不会排除任何内容时发出警告。
- 备份成功后更新(高级,默认关闭)。 在某个容器上打开此项,BombVault 会拉取最新镜像并重建它,但仅在确实有更新的镜像时才这样做,因此总是先存在一个新的还原点。可选附加项:每个被更新的容器的通知,以及镜像清理(被其他容器共享的基础镜像绝不会被删除)。更新后 BombVault 还会请求 Unraid 重新检查该容器的更新状态,因此 Docker 标签页那个陈旧的update available横幅会自行清除,而不是滞留(Unraid 更新直接通过 Docker API,因此其缓存的状态,以及在某些版本上缓存的摘要,否则会一直显示该横幅)。它是尽力而为的,绝不影响备份,默认开启,并在设置中有一个开关。
- 还原到另一个文件夹,用于克隆或检查。
- 快照差异与标签。 比较两个快照以查看有何变化,并给快照打标签以对它们进行筛选。
- 更新后的新增内容。 每个新版本发行说明会弹出一次,其内容来自嵌入在二进制文件中的说明,因此该对话框可离线工作。
- 开箱即用的 HTTPS(自签名,或在反向代理后使用您自己的证书)。
- Docker 健康检查。 容器从其自身的
/api/health报告健康/不健康,因此如果引擎卡死,自愈工具可以重启它。 - 42 种语言的深色/浅色界面,带有旗帜选择器。
- 设置自动保存。 拨动开关或离开输入框,更改就会立即写入;控件会短暂闪一下,若服务器拒绝则会抖动。只有三处保留了保存按钮,因为只保存一半会不安全:rclone 配置框、凭据集编辑器和登录密码。
- 安静的弹出提示。 在 设置、常规 中可以将例行的确认提示静音,只有失败才会继续打扰您。此设置按浏览器保存,不影响通知。
- 按您喜欢的样子来。 设置、外观 可以设置颜色(一种强调色,或使用八色调色板的彩虹模式)、圆角(圆润、微圆或直角)以及动画(关闭、轻微、狂野或狂暴),并按浏览器记住。当系统要求减少动态效果时,始终以系统为准。