对于使用 BTRFS 存储后端的 LXD,合适的备份策略是什么

对于使用 BTRFS 存储后端的 LXD,合适的备份策略是什么

我即将从头开始重新配置我的家庭服务器,并想知道备份我的 LXD 容器的最佳策略是什么。同时,我正在运行 Ubuntu 20.04 LTS,并将一些服务配置为作为 LXD/LXC 容器运行。例如:

  • 运行 seafile 的容器“cloudserv”
  • 运行 nginx 和 MariaDB 的容器“webservice”

这两个容器位于我的 SSD 上,使用 btrfs 文件系统。对于数据存储,我使用磁盘阵列(也使用 BTRFS),其中我创建了另一个 LXC 存储池,其中包含一个存储卷,该存储卷连接到 seafile 容器以保存所有数据。布局如下:

固态硬盘

  • BTRFS 文件系统
    • 存储池“默认”
      • 容器“cloudserv”
      • 容器“webservice”
      • 图片

硬盘

  • BTRFS 文件系统
    • 存储池“DataPool1”
      • 自定义存储卷“seafile-data”-->附加到容器“cloudserv”

通过使用 BTRFS,我希望能够利用 BTRFS 快照和发送和接收工具,轻松地将容器和存储卷作为子卷传输到例如带有 BTRFS 卷的 RasPi。但读取例如LXD 手册或者如何备份和恢复 LXD 容器我觉得我总是必须创建一个 tarball 来备份一个实例,然后才能将其传输。这意味着我实际上失去了一些 BTRFS 吸引人的功能,比如能够发送/接收子卷/快照以及对我的 LXC 实例和数据进行增量备份。

我遗漏了什么吗?有人能提供一些有关使用 BTRFS 的 LXD/LXC 的适当备份工作流程的提示吗?

答案1

如果你在远程服务器上安装了 LXD,并且两个服务器都使用 Btrfs,则可以使用优化实例传输像这样:

lxc remote add mybtrfsremotebackupserver XXX
lxc snapshot mycontainer snap1
lxc copy mycontainer mybtrfsremotebackupserver: --verbose

它将用于btrf-send容器及其所有快照的初始传输。

然后,你就有了一种非常方便的方式来维护容器及其快照,只需使用选项发送增量更改--refresh(LXD 3.7)

lxc copy --refresh mycontainer mybtrfsremotebackupserver: --verbose

但不幸的是rsync,至少在 LXD 4.0 中它使用了,因此您将失去优化btrfs-send

检查此问题以获取更多信息:功能请求:--snapshots-only 复制标志

此外,“刷新对自定义卷副本的支持”但我不确定它是否使用优化路径,或者它是否对您的目标有用。您还可以在 lxc 导出中检查 --optimized-storage

问候

相关内容