![我可以将 Vzdump tar 存档还原到 LXD/LXC 容器吗](https://linux22.com/image/772201/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%B0%86%20Vzdump%20tar%20%E5%AD%98%E6%A1%A3%E8%BF%98%E5%8E%9F%E5%88%B0%20LXD%2FLXC%20%E5%AE%B9%E5%99%A8%E5%90%97.png)
我使用 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 平台,无论是暂时的还是其他原因。
无论如何,你需要遵循的步骤基本上是
在proxmox命令行中,“pct list”获取要复制的容器的ID。
在同一个命令行“vzdump -compress gzip -dumpdir /tmp”中,您不需要 dump dir 参数,但默认情况下嵌套了大量深层的文件夹,因此我建议使用 tmp dir 以方便使用。
然后您需要使用以下命令创建一个“元数据文件”(请注意:在复制和粘贴/使用命令之前,需要将 # 符号更改为反引号,我不得不在 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
将您创建的“ .tar.gz”文件移动到运行现代版本 LXD 的目标机器上,我为此使用了 rsync。
在 LXD 机器的命令行上,使用以下命令将元数据和转储文件导入 lxc 映像:
sudo lxc image import metadata.tar.gz <vzdump name>.tar.gz
这会将容器作为图像导入,但不能直接运行,请输入
lxc image list
并获取刚刚创建的图像的指纹
仍然在 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 中删除旧容器(如果您不再需要它)。