灾难发生时如何恢复实例

如果 Incus 数据库 损坏或丢失,Incus 提供了一个用于灾难恢复的工具。

该工具会扫描存储池以查找实例,并将找到的实例导入回数据库。您需要重新创建所需的缺失实体(通常是配置文件、项目和网络)。

重要

此工具仅应用于灾难恢复。不要依赖此工具作为适当备份的替代方案;您将丢失数据,例如配置文件、网络定义或服务器配置。

该工具必须以交互方式运行,不能在自动化脚本中使用。

恢复过程

运行该工具时,它会扫描数据库中仍然存在的存储池,查找可以恢复的缺失卷。您还可以指定任何未知存储池的详细信息(存在于磁盘上,但不存在于数据库中),该工具也会尝试扫描这些存储池。

挂载指定的存储池(如果尚未挂载)后,该工具会扫描这些存储池,查找看起来与 Incus 关联的未知卷。Incus 在每个实例的存储卷中维护一个 backup.yaml 文件,该文件包含恢复给定实例所需的所有信息(包括实例配置、附加设备、存储卷和池配置)。这些数据可用于重建实例、存储卷和存储池数据库记录。在恢复实例之前,该工具会执行一些一致性检查,以比较 backup.yaml 文件中的内容与磁盘上的实际内容(例如匹配快照)。如果所有检查都通过,则会重新创建数据库记录。

如果还需要创建存储池数据库记录,则该工具会使用实例的 backup.yaml 文件中的信息作为其配置的基础,而不是用户在发现阶段提供的配置。但是,如果此信息不可用,则该工具将回退到使用用户提供的配置来恢复池的数据库记录。

该工具会要求您重新创建缺失的实体,例如网络。但是,该工具不知道实例是如何配置的。这意味着,如果某些配置是通过 default 配置文件指定的,则您还必须将所需配置重新添加到该配置文件中。例如,如果实例中使用了 incusbr0 桥接,并且提示您重新创建它,则您必须将其添加回 default 配置文件,以便恢复的实例使用它。

示例

以下是恢复过程的外观示例

user@host:~$ incus admin recover
Incus 服务器 当前 具有 以下 存储 池: 是否 恢复 另一个 存储 池? (yes/no) [default=no]: yes存储 名称: default存储 后端 名称 (btrfs, ceph, cephfs, cephobject, dir, lvm, lvmcluster, zfs): zfs存储 来源 (块设备,卷组,数据集,路径,... 视情况而定): /var/lib/incus/storage-pools/default/containers其他 存储 配置 属性 (KEY=VALUE, 完成后 为空): zfs.pool_name=default其他 存储 配置 属性 (KEY=VALUE, 完成后 为空): 是否 恢复 另一个 存储 池? (yes/no) [default=no]:恢复 过程 扫描 以下 存储 池: - NEW: "default" (backend="zfs", source="/var/lib/incus/storage-pools/default/containers") 是否 继续 扫描 丢失 卷? (yes/no) [default=yes]: yes正在 扫描 未知 卷... 找到 以下 未知 卷: - 容器 "u1" "default" 项目 "default" (包含 0 个快照) - 容器 "u2" "default" 项目 "default" (包含 0 个快照) 当前 缺少 以下内容: - 网络 "incusbr0" 项目 "default" 创建 这些 缺少 条目, 然后 ENTER: ^Z[1]+  Stopped                 incus admin recover
user@host:~$ incus network create incusbr0
网络 incusbr0 已创建
user@host:~$ fg
incus admin recover 找到 以下 未知 卷: - 容器 "u1" "default" 项目 "default" (包含 0 个快照) - 容器 "u2" "default" 项目 "default" (包含 0 个快照) 是否 恢复 它们? (yes/no) [default=no]: yes正在开始恢复...
user@host:~$ incus list
+------+---------+------+------+-----------+-----------+| NAME |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |+------+---------+------+------+-----------+-----------+| u1   | STOPPED |      |      | CONTAINER | 0         |+------+---------+------+------+-----------+-----------+| u2   | STOPPED |      |      | CONTAINER | 0         |+------+---------+------+------+-----------+-----------+
user@host:~$ incus profile device add default eth0 nic network=incusbr0 name=eth0
设备 eth0 已添加到 default
user@host:~$ incus start u1
user@host:~$ incus list
+------+---------+-------------------+---------------------------------------------+-----------+-----------+| NAME |  STATE  |       IPV4        |                    IPV6                     |   TYPE    | SNAPSHOTS |+------+---------+-------------------+---------------------------------------------+-----------+-----------+| u1   | RUNNING | 192.0.2.49 (eth0) | 2001:db8:8b6:abfe:216:3eff:fe82:918e (eth0) | CONTAINER | 0         |+------+---------+-------------------+---------------------------------------------+-----------+-----------+| u2   | STOPPED |                   |                                             | CONTAINER | 0         |+------+---------+-------------------+---------------------------------------------+-----------+-----------+