我可以将 Vzdump tar 存档还原到 LXD/LXC 容器吗

我可以将 Vzdump tar 存档还原到 LXD/LXC 容器吗

我使用 vzdump 工具从旧的 proxmox 6 服务器创建了许多“tar”文件。

最初创建它们的人已经离开了公司,并且公司已将其容器服务器从“Proxmox VE”更改为运行其容器系统最新版本的 LXD 的标准 Linux Ubuntu 20.04 LTS 服务器。

现在有人问我是否可以获取这些 Vzdump tar 文件,并将它们转换为在新服务器上运行的基于常规标准 LXC 的部署。

我所做的每次搜索似乎都只会出现将基本 LXC 容器转换为 Proxmox VE 容器的情况,并且在 proxmox 论坛中提问也无济于事,因为他们想要做的就是让我回到 proxmox,但我的客户不再希望使用它。

我可以将 vzrestore 到新服务器上,但容器中的元数据与 LXD/LXC 不兼容,因此到目前为止这被证明是一条死路。

同样,我也尝试将容器转换为 LXC 模板映像,并从中构建,但同样,这并没有像我所希望的那样工作。

答案1

因此,经过两周的研究和阅读大量博客文章后,我终于明白了如何做到这一点。

这并不是特别简单,但也不是火箭科学,然而,我在 proxmox 论坛上询问时确实感觉到(和敌意),他们宁愿你不要离开 proxmox 平台,无论是暂时的还是其他原因。

无论如何,你需要遵循的步骤基本上是

  1. 在proxmox命令行中,“pct list”获取要复制的容器的ID。

  2. 在同一个命令行“vzdump -compress gzip -dumpdir /tmp”中,您不需要 dump dir 参数,但默认情况下嵌套了大量深层的文件夹,因此我建议使用 tmp dir 以方便使用。

  3. 然后您需要使用以下命令创建一个“元数据文件”(请注意:在复制和粘贴/使用命令之前,需要将 # 符号更改为反引号,我不得不在 SO 帖子中使用 # 符号作为 markdown,由于 markdown 使用它的方式,因此无法显示反引号符号):

    echo architecture: #pct config $1 | grep arch: | awk '{print $2}'# > metadata.yaml

    echo creation_date: #date +%s# >> metadata.yaml

    tar -czvf metadata.tar.gz metadata.yaml

    rm metadata.yaml
  1. 将您创建的“ .tar.gz”文件移动到运行现代版本 LXD 的目标机器上,我为此使用了 rsync。

  2. 在 LXD 机器的命令行上,使用以下命令将元数据和转储文件导入 lxc 映像:

    sudo lxc image import metadata.tar.gz <vzdump name>.tar.gz

这会将容器作为图像导入,但不能直接运行,请输入

lxc image list

并获取刚刚创建的图像的指纹

LXC 图像列表

  1. 仍然在 LXD 命令行,使用图像中的指纹:

    lxc launch <fingerprint> <name you want to give your container>

此时,您将拥有一个新的容器,它是您正在运行的原始 proxmox 容器的完全副本。

但是,您可能没有相同的网络设置。对我来说,我的网络上的所有内容都使用 DHCP,包括静态租约,因此,我的新容器具有相同的 MAC 地址非常重要,这很容易做到,只需使用

pct config <container id>

在 proxmox cli 上显示硬件配置,然后从中复制并粘贴 MAC 地址,然后

lxc stop <container name>
lxc config set <container name> volatile.eth0.hwaddr <copied mac address>
lxc start <container name>

如果您的 DHCP 静态租约是由 mac 地址驱动的,那么这将确保它们获得相同的 IP 地址,只要您的 LXD 主机设置为在与原始 proxmox 主机相同的网络上桥接 IP。

我写了一篇博客文章,可以在以下网址找到:https://shawtyds.wordpress.com/2021/11/16/converting-containers-from-proxmox-ve-back-to-plain-old-lxd-lxc/这会讲得更详细一些。

一旦您复制的容器运行,那么只需使用 lxc 删除临时映像(除非您想保留它)并从两个服务器中删除“.tar.gz”文件,并且可能从 proxmox 中删除旧容器(如果您不再需要它)。

相关内容