功能¶
BombVault 默认简单,需要时深入。界面只显示基本功能,直到您切换简单 / 高级开关。本页对完整的功能集进行分组。
备份范围¶
| 内容 | 保存的内容 |
|---|---|
| Docker 容器 | Appdata 目录以及容器定义(镜像、环境变量、端口、标签、卷)。 |
| KVM / libvirt 虚拟机 | 虚拟机磁盘映像、XML 定义和 UEFI NVRAM(优雅关机或实时快照,通过 SSH)。如果无法创建快照,实时快照会自动回退到优雅备份,因此虚拟机备份绝不会直接报错。 |
| Unraid 闪存 | 整个 USB 闪存(/boot):操作系统、许可证、阵列配置、共享、网络和插件配置。还原是一键下载的 .zip,绝不会覆盖运行中的闪存。 |
| 应用配置 | BombVault 自身的 /config(设置数据库、异地凭据、libvirt SSH 密钥对),通过 SQLite 的 VACUUM INTO 进行快照,因此 WAL 模式的数据库绝不会在写入过程中被捕获。通过自我重启还原,因此运行中的数据库绝不会在打开的句柄下被覆盖。 |
| 文件与文件夹 | 命名的文件集:服务器上的任意文件夹(一个共享、您的文档、一个照片库),每个文件集可选配各自的排除模式。与其他域完全对等(计划、保留、异地复制、完整性检查和还原演练)。 |
还原¶
- 一键完整还原。 选择一个快照,点击还原。完成。
- 从本地或异地还原。 每个备份浏览器都有一个本地 / 异地开关,因此如果本地仓库丢失或损坏,您可以直接从异地副本列出并还原。删除是按来源进行的:移除一份备份只影响您正在查看的那个副本。
- 容器会被自动重装。 容器定义会对 Docker API 重新执行,因此容器会原样重新出现在 Unraid 的 Docker 标签页中。
- 虚拟机会被自动重建。 XML 通过 SSH 重新导入,因此虚拟机会重新出现在虚拟机管理器中,并重新挂接其磁盘和 UEFI NVRAM,即使虚拟机已被删除也是如此。发现备份会重建一个完全消失的条目(例如全新安装后)。
- 单独还原。 还原单个容器、单台虚拟机或单个文件集,而不触动其他项目。
- 闪存还原是一个
.zip下载。 它会以flash-<id>.zip流式传输到您的浏览器,可直接放入 Unraid USB 创建器。运行中的/boot绝不会被触碰。 - 计划性的闪存 zip 导出。 每次闪存备份后,可选地将快照以普通
.zip形式写出到您选定的文件夹(单个被覆盖的flash-latest.zip或滚动历史)。把它指向一个 Syncthing 或 rclone 文件夹,您的可引导 USB 备份就会自动离开服务器。 - 预检冲突检查。 在停止或移除任何东西之前,还原会验证容器的静态 IP 和已发布的主机端口是否空闲,若被占用则以清晰的消息中止,而不是留下一个只完成一半的还原。
- 文件级还原。 展开某个容器快照的文件,筛选,勾选任意数量的文件和文件夹,然后就地还原所选内容或还原到您选定的文件夹。
- 文件集还原。 就地还原一个文件集快照(在明确确认之后)或还原到您选定的文件夹,绝不会静默进行。选择性还原在这里同样有效。
- 还原保持运行状态。 备份时正在运行的容器或虚拟机恢复后仍在运行;停止的则保持停止。勾选还原后保持停止可重建而不启动。
- 还原整个堆栈。 来自同一 Docker Compose 项目的容器会被归入一个堆栈面板。还原堆栈会从每个成员的最新备份重建它们并保持停止,然后可选地按
depends_on顺序启动它们。 - 实时进度、取消和忙碌反馈。 一次长时间的还原会显示实时百分比条,并可通过类型感知的确认取消。已取消的还原会被记录为已取消,而非失败。
- 引导式恢复。 一个专门的恢复标签页引导全新安装走完灾难场景。参见异地与恢复。
- 从另一个 BombVault 仓库还原。 一次性的只读会话用另一个 BombVault 实例的
APP_KEY打开该实例的仓库,因此您可以把一个容器从服务器 A 拉取到服务器 B,而无需触动您自己的设置。参见异地与恢复。
存储与计划¶
- 通过 restic 进行增量、去重的备份,因此即使是大型虚拟机磁盘也不会让仓库膨胀。
- 目标: 本地路径,或异地。SMB/CIFS 和 NFS(在 Unraid 上挂载共享并将备份路径指向它)、无需 rclone 的原生 restic 后端(
s3:...、rest:http://host:8000/repo、b2:...、sftp:user@host:/repo),或通过rclone:<remote>:<bucket>/path使用任意 rclone 远程。所有凭据都以加密方式存储。 - SSH 目标无需在对端安装任何东西。
sftp:只需要一个 SSH 服务器,因此一台裸的 Raspberry Pi(无 Docker、无 restic)就能用作异地目标。主机密钥会在首次连接时自动固定。 - 异地复制(本地 + 远程)。 保留快速的本地备份,再添加一个或多个异地副本,以尽力而为的方式用
restic copy复制(异地出现问题绝不会导致本地备份失败)。每个域都有各自的异地计划,外加一个立即复制按钮。 - 每个域可有多个异地目标。 每个域(容器、虚拟机、闪存、配置和文件集)都可以同时复制到多个异地目标,而不仅仅是一个。在异地标签页添加额外目标,每个目标都有各自的仓库、S3 存储类别、append-only 标志、保留和增长预算。您现有的异地副本会作为第一个目标沿用下来,因此在您添加第二个目标之前一切都不会改变,而一个域的每个目标都按该域的异地计划复制。
- 手动备份顺序。 在容器页面的备份顺序面板中设置容器备份的确切顺序。计划任务和多选运行会遵循它;任何未排序的容器保持先前的最逾期优先行为,而单个容器备份不受影响。
- 可配置的保留: keep-last / 每日 / 每周 / 每月,每次备份后自动清理,按来源设置(本地位于备份路径旁,异地位于异地标签页,因此您可以将异地副本作为归档保留更久)。
- 按域计划(每日 / 每周含多日集 / 每 N 天 / 原始 cron),全部在设置,计划中一处编辑。
- 异地带宽限制。 限制 restic 的上传/下载速率,使复制不会占满您的 WAN。
- 冷存储与归档存储类别(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 同步用户不会被拒之门外。恢复定义存放在每个仓库内部,因此被复制的仓库文件夹是完全自包含的。
洞察、验证与监控¶
- 保护状态(RPO)。 仪表板为每个域显示一个绿 / 黄 / 红指示,将上次成功的备份与其计划进行比较,因此逾期的备份会变红,而不是藏在日志里。
- 备份健康度热力图。 一个 GitHub 贡献风格的日历,显示每个域每天的备份结果,带有容器 / 虚拟机 / 闪存 / 配置 / 文件切换。
- 处处显示运行时间。 每条运行历史条目都读作
开始,结束(时长),每个容器和虚拟机在其页面上都带有各自的最近运行列表。 - 可重新排列的仪表板。 切换自定义模式,将卡片拖入您想要的顺序并隐藏不需要的卡片。布局按浏览器保存。
- 仓库大小与去重趋势。 每个域当前的仓库大小、去重比率和快照数量,带有一条存储增长的迷你折线图。
- 还原验证演练。 BombVault 定期证明您的备份可还原(
restic check --read-data-subset,有界),并为每个域显示一个上次验证可还原徽章。 - 自愈操作。 一个可证明为孤立的 restic 锁(由操作中途的重启留下)会被自动强制清除并重试一次。保留是身份稳定的(按项目清理,不受路径或主机变化影响),保留失败会发送通知。
- 加密密钥恢复工具包。 一键下载主密钥、派生出的 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 使用。暴露备份状态、大小和时间戳,标签中没有任何密钥或路径。
勒索软件防护¶
- 不可变(append-only)异地。 将异地仓库标记为 append-only,这样勒索软件或被入侵的主机就无法删除或改写您的备份。对端(一个处于
--append-only模式的restic/rest-server)强制执行它;BombVault 只会验证它,绝不会仅凭配置声明就显示绿色。 - 篡改测试。 BombVault 定期通过实际尝试对异地仓库执行删除(瞄准一个不存在的对象)来证明 append-only 保证:被拒绝意味着受保护,被接受意味着未受保护。不确定的结果绝不会翻转已存储的判定。
- 引导式异地设置。 一个向导带您从后端选择,走过一段可直接粘贴的 rest-server 部署片段、一次连接测试、不可变切换和一套保留策略。
- DR 演练(异地)。 将一个真实目标从异地仓库还原到一次性沙盒,逐文件、逐字节地验证它,然后清理。参见异地与恢复。
- 勒索软件防护评分卡。 一张仪表板卡片,为每个域显示绿 / 黄 / 红态势和一份带时间戳的清单;每一行红色都深链到对应的修复。它只在经过验证的事实上变绿。
- 增长预算告警。 对于不可变的异地(其中旧快照被有意从不清理),设置一个大小预算,在它失控之前得到告警。
- 接收方仪表板(接收侧)。 在接收来自另一个 BombVault 的不可变异地副本的机器上,打开接收方开关(设置)以显示接收方标签页。以只读方式(用发送实例的密钥打开)注册一个已接收的仓库,即可查看按来源分组的快照清单、每个来源上次到达的时间,并在接收硬件上运行独立的
restic check。当某个来源在您设定的时间窗内停止发送时(一个死人开关),或当完整性检查失败时,它会向您告警。它严格只读,因此绝不会写入已接收的仓库,且默认关闭。参见异地与恢复。
普通导出¶
- 容器普通导出。 每个容器的导出按钮会在仓库旁写出一份可浏览、无需工具的副本:备份文件夹的
<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 绝不会备份(因此也绝不会停止)它自己的容器。
- 快照浏览器,带有还原点列表、按快照删除,以及用于文件级还原的可折叠文件夹树。
- 按域进行仓库维护: 验证(
restic check)、解锁(清除卡住的锁)和清理(在设置了保留策略时按需应用它,否则进行普通的空间回收)。 - 每个容器的备份前/后钩子。 Shell 命令在容器内部运行(例如在备份前将
mysqldump导出到 appdata);失败的前置钩子会中止备份。 - 在备份期间停止其他容器,并进行健康门控的重启。 指定要在此容器备份时停止的依赖容器(例如数据库)。之后 BombVault 会按其 Compose 的
depends_on顺序将它们恢复,并且默认等待每一个报告健康(如果它没有健康检查,则为运行中)后再启动依赖它的容器,因此像 Pi-hole、数据库或 VPN 网关这样的依赖会在需要它的服务之前真正就绪,而不是让那些服务返回连接被拒绝。等待受每个容器的超时约束(默认 120 秒),因此一个缓慢或永远不健康的容器绝不会挂起整个运行;等待和超时都位于设置,计划(关闭等待可回到先前一次性重启的行为)。同样有序、健康门控的重启也包裹了备份后的镜像更新,因此在有更新到来的那一天,依赖项会在重建过程中被压住,只在更新完成后才经过健康门控被恢复。 - 每个容器的排除模式。 列出被备份的卷内部要跳过的子目录,每行一个。按您在容器内部看到的样子输入路径;实时预览会显示每一行解析成什么,并在某一行不会排除任何内容时发出警告。
- 备份成功后更新(高级,默认关闭)。 在某个容器上打开此项,BombVault 会拉取最新镜像并重建它,但仅在确实有更新的镜像时才这样做,因此总是先存在一个新的还原点。可选附加项:每个被更新的容器的通知,以及镜像清理(被其他容器共享的基础镜像绝不会被删除)。更新后 BombVault 还会请求 Unraid 重新检查该容器的更新状态,因此 Docker 标签页那个陈旧的有可用更新横幅会自行清除,而不是滞留(Unraid 更新直接通过 Docker API,因此其缓存的状态,以及在某些版本上缓存的摘要,否则会一直显示该横幅)。它是尽力而为的,绝不影响备份,默认开启,并在设置中有一个开关。
- 还原到另一个文件夹,用于克隆或检查。
- 快照差异与标签。 比较两个快照以查看有何变化,并给快照打标签以对它们进行筛选。
- 更新后的新增内容。 每个新版本发行说明会弹出一次,其内容来自嵌入在二进制文件中的说明,因此该对话框可离线工作。
- 开箱即用的 HTTPS(自签名,或在反向代理后使用您自己的证书)。
- Docker 健康检查。 容器从其自身的
/api/health报告健康/不健康,因此如果引擎卡死,自愈工具可以重启它。 - 26 种语言的深色/浅色界面,带有旗帜选择器。