备份与条目¶
BombVault 备份的所有东西都列在备份下的同一个列表里:容器、虚拟机、文件夹集、闪存、ZFS 数据集和自我备份。每一项都是一个条目,有自己的页面。本页带你看列表、条目页面及其三个标签页,以及条目可以有的设置。

每个分区保存什么¶
| 分区 | 保存的内容 |
|---|---|
| 容器 | appdata 文件夹,加上容器定义:镜像、变量、端口、标签和卷。容器设置标签页上的备份文件夹卡片可以精确勾选备份涵盖哪些文件夹,实时统计路径数量,并列出你排除的内容。容器放在 Host Data 之外的数据,例如在 TrueNAS 的 ixVolume 里或 /opt 下某个 Compose 项目里的数据,不会被备份,运行记录里会写明漏掉了哪些文件夹。Host Data 里此刻不存在的文件夹,运行记录也会写明。/etc/localtime 或 Docker 套接字这样的系统路径不算作数据。 |
| 虚拟机 | 磁盘映像、XML 定义和 UEFI NVRAM,通过 SSH 正常关机或实时快照。参见虚拟机备份。 |
| 闪存 | 仅限 Unraid。整个 USB 闪存(/boot):系统、许可证、阵列配置、共享、网络和插件配置。 |
| 自我备份 | BombVault 自己的 /config:设置数据库、各存储位置的登录凭据、libvirt SSH 密钥对、ZFS 服务器的密钥和固定的主机密钥以及证书,用 SQLite 的 VACUUM INTO 做快照,所以数据库绝不会在写入中途被抓取。 |
| 文件夹 | 服务器上的任意文件夹,作为一个文件夹集,例如一个共享、你的文档或照片库,可以设置排除模式。文件夹集和其他东西一样,有计划、保留、异地副本、检查和恢复演练。 |
| ZFS 数据集 | 一个数据集及其下的所有数据集,从一个 ZFS 快照读取,所以它们都来自同一时刻,并像文件夹一样用 restic 保存。ZFS 条目还可以在第二台 ZFS 服务器上保留一份逐块精确的副本。参见 ZFS 数据集。 |
每次备份都经过 restic,所以是增量的、去重的,即使很大的虚拟机磁盘也不会让仓库膨胀。BombVault 从不备份、因此也从不停止自己的容器。一次运行可以安全地停止,因为 restic 最后才写快照,所以中止的运行只留下没有被引用的数据,没有快照。重启发生在运行中途而留下的锁,会在锁超过十分钟没有刷新之后被清除,然后重试一次这次运行。
列表¶
列表上方的磁贴选择种类,例如容器或 ZFS,每个磁贴会统计它的条目数。磁贴只是选择,不会隐藏页面的其余部分。
每一行用小方块显示该条目最近十四次运行,并给出一个状态,例如已受保护、未受保护、已推迟或正在复制。其他的信息都在名称旁边的提示气泡里,鼠标停在这一行上时,这段文字会显示在行内。容器名称旁边的标记表示,自上次备份以来它用另一个镜像、其他端口、变量或卷重新创建过。下一次备份之后标记就会消失。
列表上方的三个按钮可以缩小范围:
- 筛选:按计划(全部、已计划、已暂停)、按备份(已备份、从未备份),对于容器和虚拟机,还可以选已安装或未安装。
- 排序:按名称、状态、IP、上次备份、大小或计划。除 IP 外,每个字段都可以双向排序,例如大小,最大优先和大小,最小优先。
- 搜索:按名称、镜像或 IP。
已经不再安装、但仍有备份的条目会单独放在未安装(仅备份)下。可以恢复它们,或删除它们的备份来释放空间。
页面的主要操作浮在右下角:立即备份全部会对所有开启的分区执行一次运行。更多里放着其余的:
- 选择开始选择,见下文。
- 发现备份读取各存储位置里存放的内容并据此重建条目,例如在全新安装之后。没有自己数据的容器没有快照,它会根据存放在仓库旁边的定义副本恢复。重建的分区的异地副本随后会等待,直到你把它们的备份接收为此服务器自己的备份,参见重建之后。
- 与这台服务器的 ZFS 连接打开 ZFS 分区的 SSH 测试,参见 ZFS 数据集。
- 选中 ZFS 磁贴时的立即复制全部会发送每个 ZFS 条目的副本。

选择多个条目¶
像在文件管理器里选文件一样选择行:Ctrl+点击、Shift+点击、Ctrl+A,或者在手机上长按。选中的行用一个勾号代替图标,列表上方的栏会统计数量,并提供备份已选项、暂停计划和恢复计划、全选和清除选择。每一行还有自己的右键菜单,带有对应的操作。
选中的条目在服务器上依次备份,一个接一个,所以关闭标签页后它也会继续。要一起恢复多个条目,请使用恢复页面。

添加文件夹或 ZFS 数据集¶
容器、虚拟机和闪存在设置、常规中开启对应分区之后会自动出现。文件夹和 ZFS 数据集需要你自己选,因为 BombVault 猜不出你指的是哪些。添加会打开BombVault 还应备份什么?:
- 一个文件夹列出 BombVault 找到的共享,也可以选 Host Data 之下的任何其他文件夹。给文件夹集起一个名字,例如
Documents。名字在第一次备份之后就固定了,因为快照是以它存放的。 - 一个 ZFS 数据集列出这台服务器的数据集。选你想备份的最顶层那一个,参见条目与子数据集。
- 系统配置出现在没有 Unraid、且 Host Data 能到达
/etc的主机上。它是一个以/etc为起点的文件夹集,保存前由你检查。
把条目排除在外¶
你有意排除的条目,例如测试容器,可以标记为不备份。这样它就不再算作未受保护,点击取消排除可以把它带回来。暂停计划是比较温和的办法:条目离开计划和全部备份,带上灰色的计划已暂停徽章,立即备份仍然可用。它设置的是和条目设置标签页上的在计划中同一个开关。
条目的页面¶
点击一行会打开条目的页面。页头用一行写出条目名称和它的状态,例如上次备份于 3 小时前或已推迟,下次尝试在 03:15,并放着它的操作:立即备份、恢复,以及在更多下面不常用的,例如导出最新备份、导出容器或导出虚拟机、关联到原条目、删除所有备份、移除条目和删除所有位置的备份。图标左边的返回按钮回到列表。备份运行时,取消备份就在进度旁边,被取消的运行会记录为已取消,不是失败。
删除所有位置的备份会一次性删除条目在每个存储位置上的备份,包括异地副本。窗口会列出每个位置以及其中有多少个备份,输入条目名称后按钮才会解锁。设为 append-only 的位置会保留它的备份,并说明这一点。条目和它的设置会保留,所以你不再备份的条目仍然保持原样,消失的只是它的备份和这些备份的历史。
页面有三个标签页:备份、设置和验证。
备份标签页¶
这个标签页列出条目的快照,最新的在前,每天一个柱条。存放在多个地方的备份只出现一次,标出每个保存它的存储位置。点击一个快照就会恢复它,点击快照里的某个位置,就会从那里精确地恢复。
- 目标列出这个条目有备份的每个位置以及数量。异地位置只在你点击检查时才读取,因为列出云存储需要一些时间。条目不再备份到的位置会显示为仅旧备份,仍然可以从中恢复。
- 每个快照都有一个菜单:添加标签或更改标签、与另一个备份比较(列出新增、消失或变化的文件)、以 tar、zip 或独立的 restic 仓库形式导出,以及只在一个位置删除。
- 容器的数据库转储放在单独的列表里,可以下载、保存到文件夹和导入。
保留多少个快照由存储位置决定,参见保留多久。

设置标签页¶
每个条目都以计划和目标开头:
- 在计划中把条目放进或移出计划运行。
- 独立计划给这一个条目设置自己的计划,参见单个条目的独立计划。没有的话,它按所属分区的计划或在全部备份里运行。
- 一排按钮,本地加上每个异地存储位置一个,说明备份存到哪里。跟随默认表示条目去所属分区去的地方,点击它会打开按分区划分的目标。参见按条目放置。
- 仓库说明备份写在哪里(存放于)。这个位置从第一次备份起就固定了,复制则可以随时更改。
下面的卡片取决于条目的种类:
| 种类 | 卡片 |
|---|---|
| 容器 | 备份文件夹(备份哪些映射的文件夹,带跳过缓存文件夹(CACHEDIR.TAG))、排除模式、停止其他容器、前后命令、数据库、应用繁忙时、备份成功后更新、用快照代替停止、曾用名 |
| 虚拟机 | 虚拟机,带方式(优雅(关机)或实时快照)和仅变更的块,参见虚拟机备份指南 |
| 文件夹集 | 文件夹和排除模式 |
| 闪存 | Flash ZIP 导出,把每个闪存备份写成普通的 .zip,放到你选的文件夹,一步写完,所以同步工具绝不会看到写了一半的文件。如果某个闪存备份的内容比应有的少,上一个 ZIP 会原样保留,导出的运行记录会写明这一点。 |
| ZFS 数据集 | 子数据集、要停止的容器和快照前后的命令、副本和测试快照访问,参见 ZFS 数据集 |
设置在你更改时自动保存。

验证标签页¶
- 检查项显示第一次备份之后的恢复检查。检查恢复会在最新的备份上再运行一次:BombVault 把最多 100 个文件、256 MiB 的样本恢复到临时文件夹,并让 restic 对照哈希把每个文件读回来。
- 容器上的启动测试会把最新的备份恢复成一个隔离的副本并启动它:名称以
bombvault-test-开头,使用它自己的内部 Docker 网络,不发布端口,也无法访问局域网,1 个 CPU 和 2 GiB 内存。副本报告健康、在它暴露的第一个端口上有应答,或者两者都没有但保持运行,就算通过。原容器绝不会被碰到,副本、它的网络和它的数据之后都会被删除,测试中途重启之后也一样。主机网络上的容器、特权容器、带设备的容器和需要另一个容器的容器,会显示为无法测试。设置、验证、自动检查下的启动测试每次运行测试一个容器,最久没测试的优先。 - 异常设置这个条目自己的灵敏度和通知级别,并显示它未处理的发现。
- 按文件夹统计大小显示最新备份里什么占了空间,以及最近一次备份带来了其中多少,一次一层。
- 最近运行列出最近的运行及其开始、结束和耗时。点击可以查看详情。

排除模式¶
排除模式卡片每行接受一个模式。路径按你在容器内看到的样子输入,例如 /config/Library/Application Support/Plex Media Server/Cache,或者像 .git 这样的单独名称,它会在任何层级匹配。对于文件夹集,请按主机看到的路径输入,例如 /mnt/user/data/cache。字段下方的预览会显示每一行解析成什么,当某一行什么都匹配不到或会排除一切时给出警告。内容为 / 或 * 的行,或写的是整个已备份文件夹的行,会被忽略,所以排除规则绝不会把备份清空。要排除整个文件夹,请改为在备份文件夹下取消勾选它。
对于 Plex、Jellyfin、Sonarr、Radarr、Immich 和 Nextcloud 这类知名镜像,卡片会提供应用自己会重新生成的文件夹,例如缓存、日志和缩略图。在你点击排除所选项之前,什么都不会被排除。
同一张卡片还带有文件夹扫描看不到的警告。例如 Immich 把相册、人脸和日期放在另一个容器的 PostgreSQL 数据库里,所以只对 Immich 容器做文件备份,恢复出来的是图片,却没有这些信息,而且恢复看起来像是成功了。请把数据库容器也一起备份。
数据库转储¶
BombVault 认得的 PostgreSQL、MySQL 和 MariaDB 容器,会在每次备份之前从运行中的服务器转储出来,放进文件旁边它们自己的恢复点。涵盖官方镜像、PostGIS、TimescaleDB、pgvector、pgautoupgrade、Immich 的数据库镜像、linuxserver、yobasystems 和 jc21 的 MariaDB 镜像,以及 Oracle 的 mysql-server。只是看起来像数据库的容器也有同样的选项,但在你选择之前是关闭的。
转储直接流进仓库,从不写到磁盘上。凭据来自容器自己的变量,包括 *_FILE 密钥,并且绝不会离开容器。容器设置标签页上的数据库卡片会说明数据文件夹是在停止时保存、运行时复制,还是不保存,并为这个容器开关转储。标签 bombvault.dbdump=false 作用相同,而且优先于这张卡片。设置、常规下的自动数据库转储为所有容器统一开关。
转储失败不会让备份失败。它会作为单独的失败运行出现,附带原因,并发送一条通知。转储从不会自己被加载回去:你可以下载它(原样或压缩的),保存到文件夹,或在备份标签页上一键导入一个刚启动的数据库。没有 BombVault 时如何取回转储,参见取回数据库转储。转储失败时,参见数据库转储失败。
命令与其他容器¶
- 前后命令用
sh -c在容器内运行,例如把缓存刷到磁盘。备份前的命令失败会中止备份。备份前的命令以退出码 75 退出,会推迟计划备份,见下文。 - 停止其他容器列出在备份这个容器期间要停止的容器,例如它的数据库。之后它们按 Compose 的
depends_on顺序重新启动,默认每一个都要报告健康,下一个才会启动。等待及其超时在设置、计划下顺序卡片的备份后重启里。 - 如果某个容器通过
--net=container:或 Compose 的network_mode: service:共享了一个要停止的容器的网络、PID 或 IPC 命名空间,即使它不在列表上,也会随之停止和启动,并在它所加入的容器之后启动。重启的容器会得到新的网络,而留在旧网络上继续运行的容器就只剩下回环接口。列表本身保持你的设置不变。如果这样的容器无法停止,运行记录会写明它在重启之前没有网络。BombVault 自己的容器也是如此,它从不停止自己,也不能放进列表。 - 之后没有重新运行的容器,会在运行记录和通知里写出名字,备份本身失败时也一样。
应用繁忙时¶
备份会停止它的容器,所以计划备份可以在有人使用应用时等一等,然后自己再试。容器设置标签页上的应用繁忙时卡片负责设置:
- 活动检查会在计划备份之前询问 Plex、Jellyfin 或 Emby 有没有人在观看。Plex 用它自己
Preferences.xml里的令牌来询问,所以不用输入任何东西。Jellyfin 和 Emby 需要一个 API 密钥,在服务器控制台的 API 密钥下创建。 - 忽略暂停超过此时长的会话(分钟)让为了过夜而暂停的电影不再被计入。
- 服务器无响应时仍然备份决定无法询问服务器时怎么办:开启则备份运行,日志里会写明。关闭则像有人在看一样等待。
- 容器发送数据时等待适用于没有此类检查的应用,例如游戏服务器或下载器。在最近保持安静(分钟)分钟内的任何一次读数里,容器发送的数据超过繁忙阈值(KiB/s),备份就会等待。
- 重试间隔(分钟)、带尝试时段的仅在时间窗口内尝试,以及最长等待(小时)设置如何重试。
- 等待结束时要么放弃,这时备份会在需要处理里出现并带有重试,要么仍然备份。
等待中的备份会记录为琥珀色的已推迟,这次运行的其余部分继续。概览、列表和条目会显示它以及下次尝试的时间,逾期提醒和保护状态会等到它的截止时间。推迟时你会收到一条通知,结束时再收到一条,而不是每次尝试都有。尝试会在另一个备份运行时等待,重启之后等待会继续。你自己启动的备份总是立即运行,无论是立即备份、重试、批量选择、API 还是 MCP,而且成功执行的备份会结束尚未结束的等待。
容器的设置标签页上还有一种较旧、较简单的办法:等待应用空闲,配合最长等待(小时)。应用一空闲,备份就开始,空闲的定义在设置、计划下的备份前空闲卡片里。同一次运行中到期的 Compose 栈成员会一起等待,等待中的备份不持有锁,所以其他容器照常进行。

示例:有人在看时 Plex 先等一等¶
全部备份每晚 03:00 运行。没有人应该因为 Plex 要备份而停机,看到电影中断,但备份仍然应该在早晨之前完成。
- 打开备份,然后是
plex条目,再到它的设置标签页。 - 在应用繁忙时里,把活动检查设为 Plex。不用输入任何东西。
- 把忽略暂停超过此时长的会话(分钟)设为
30,这样午夜暂停的电影在十二点半就不再被计入。 - 保持服务器无响应时仍然备份开启。
- 把重试间隔(分钟)设为
15。 - 开启仅在时间窗口内尝试,把尝试时段设为
22:00到06:00。 - 把最长等待(小时)设为
3,等待结束时设为仍然备份。
在 03:00 仍然有人在看的夜晚会发生这些:BombVault 询问 Plex,发现有会话在播放,把备份记录为已推迟,下次尝试在 03:15。这次运行的其他容器照常备份。电影在 04:10 结束时,04:15 的尝试发现 Plex 空闲,把它备份了,等待随一条通知结束。如果电影到 06:00 还在放,等待会走到尽头,Plex 会照样被备份,所以它的备份落后不会超过三小时。
如果想自己做检查,可以让备份前命令在应用繁忙时以退出码 75 退出,例如 [ "$(cat /tmp/players)" = 0 ] || exit 75。更多症状和解决办法见故障排除。
普通导出¶
restic 仍然是引擎,但导出可以给你一份既不需要 BombVault 也不需要 restic 的副本。
- 条目页面更多下的导出容器和导出虚拟机会把此刻的副本写在仓库旁边:容器的备份文件夹加上它的 Unraid 模板,或虚拟机的磁盘映像加上它的定义,可以用
virsh define恢复。 - 快照上的导出会把已存储的备份写到服务器上的导出文件夹,格式是 tar、zip 或独立的 restic 仓库,可以导出一个快照,也可以导出全部。闪存备份和自我备份里有密钥,所以导出它们需要登录密码,并在实例本身登录。
导出默认是普通文件。设置、系统下的使用 age 加密导出会为你列出的收件人把它们封存起来,包括 Flash ZIP,每个收件人是一个 age 公钥或 SSH 公钥。之后你在服务器之外用对应的私钥解密。开启加密但没有有效收件人时,导出会带着明确的错误失败,而不是写出普通文件。
运行会告诉你什么¶
- 时间。 每次运行都会读取开始、结束和耗时,每个条目都有自己的最近运行。
- 备份为什么慢。 备份运行时,BombVault 会观察 CPU、磁盘和网络有多忙。当备份花的时间比平时长很多,并且有一样东西明显已到极限时,运行记录会说明,例如"目标磁盘 disk1 有 98% 在忙"。否则它什么都不说。
- 检查和清理的进度。 活动日志和检查备份卡片会显示 restic 数到了哪里,例如12 / 47 个包,当足以估算时还会显示这一步剩下的时间。
- 读不到的文件。 备份完成但漏掉了某些东西,对应的行会变成橙色,并写出漏掉了什么。