如何备份和恢复 LXD 实例?

掌握使用快照 (snapshot) 和导出 (export) 功能来备份、迁移和恢复您的 LXD 容器与虚拟机。

LXD 的两大备份策略

LXD 提供了两种强大而灵活的备份恢复机制,适用于不同的场景:

  • 快照 (Snapshots): 用于快速、即时的就地备份和恢复,非常适合在进行危险操作前创建“后悔药”。
  • 导出/导入 (Export/Import): 用于创建完整的、可移植的备份文件,适合离线存储、归档或在不同主机之间迁移实例。

方法一:使用快照 (Snapshots) 进行快速回滚

快照是实例在特定时间点的完整状态记录(包括文件系统和配置)。它创建速度极快,并且(在使用 ZFS 或 Btrfs 时)几乎不占用额外空间。

1. 创建快照

为名为 `my-web-server` 的实例创建一个名为 `before-update` 的快照:

lxc snapshot my-web-server before-update

2. 查看快照

你可以使用 `lxc info` 命令查看一个实例拥有的所有快照:

lxc info my-web-server

3. 从快照恢复

如果更新操作失败,你可以瞬间将实例恢复到快照的状态:

lxc restore my-web-server before-update

注意: 恢复操作会覆盖实例当前的所有更改。

4. 删除快照

确认不再需要快照后,可以将其删除以释放资源:

lxc delete my-web-server/before-update

方法二:导出/导入进行完整备份和迁移

此方法会将你的实例(或其快照)打包成一个单一的 `.tar.gz` 压缩文件,你可以将其下载、存储在任何地方,或在另一台 LXD 主机上导入。

1. 创建一个快照(推荐)

为了保证备份数据的一致性,最佳实践是先为正在运行的实例创建一个快照,然后导出这个快照。

lxc snapshot my-web-server backup-snap

2. 导出实例

将刚刚创建的快照导出为一个名为 `web-server-backup.tar.gz` 的文件:

lxc export my-web-server/backup-snap web-server-backup.tar.gz

提示: 你也可以直接导出正在运行的实例(`lxc export my-web-server ...`),但这可能会导致数据不一致。导出快照是更安全的选择。

3. 导入实例

你可以将备份文件导入为一台全新的实例。这可以在同一台主机上(用于克隆),也可以在另一台主机上(用于迁移)。

# 在目标主机上运行
lxc import web-server-backup.tar.gz my-restored-server

命令执行完毕后,一个名为 `my-restored-server` 的新实例就会被创建,其状态与备份时完全相同。

总结:如何选择?

特性 快照 (Snapshot) 导出/导入 (Export/Import)
核心用途 快速、临时的状态保存和回滚 完整的、可移植的备份和迁移
速度 极快,几乎是瞬间完成 较慢,需要压缩和读写文件
存储位置 与原实例存储在同一存储池中 独立的压缩文件,可存放在任何位置
最佳场景 在升级软件、修改重要配置前 日常/每周备份、服务器迁移、实例归档