灾难发生时如何恢复实例¶
如果 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 |
+------+---------+-------------------+---------------------------------------------+-----------+-----------+