我安装了 Ubuntu 16.04,xfce 桌面也很好用。我安装了 LXD,将我的图像和容器放在我的第二个大驱动器上,并在 中配置了指向所述图像和容器的符号链接/var/lib/lxd/
。一切都按预期运行。
我现在已在新驱动器上重新安装了 Ubuntu 16.04,Mate 桌面值得一试。我已安装 LXD 并创建了指向/var/lib/lxd
大驱动器上图像和容器文件夹的符号链接(在 中)。
使用 lxc list 时,我的图像和容器均未列出(因此无法启动和使用它们)。
关于我需要做什么才能让我新安装的 LXD 使用我预先存在的图像和容器,有什么指示吗?
答案1
对于任何感兴趣的人来说,这个难题缺失的部分是我必须重新使用现有的 lxd 数据库lxd.db
。
因此,我在全新安装中使用现有 LXD 容器的步骤如下:
安装 LXD
sudo apt-get install lxd
删除containers
和images
目录
sudo rm -rf /var/lib/lxd/containers
sudo rm -rf /var/lib/lxd/images
创建到我预先存在的目录的符号containers
链接images
。
sudo ln -s /media/sda10/lxd/containers /var/lib/lxd/containers
sudo ln -s /media/sda10/lxd/images /var/lib/lxd/images
挂载我原来的安装分区并将 lxd.db 文件从我的原始安装复制到我的新安装
sudo cp /mnt/var/lib/lxd/lxd.db /var/lib/lxd/lxd.db
当我列出我的容器时,它们就会显示出来并按预期运行。
注意:我在多个分区上安装了多个系统,我会在 Ubuntu 的新版本发布时随时切换,直到我满意为止不会删除旧版本。这真的很容易做到,而且已经成为我的第二天性。
lxd.db
我知道这不是常见的做法,但这次它(再次)救了我一命。对于那些不这样做的人,建议备份文件。
编辑:进一步阅读https://insights.ubuntu.com/2016/04/13/lxd-2-0-remote-hosts-and-container-migration-612/表明使用远程 LXD 主机并在主机之间简单地移动容器也非常容易。
在这个特定的例子中,这不是我的解决方案,但它是一篇非常好的文章,展示了一种非常简单的迁移容器的方法。
答案2
由于我的评论包含一些错别字,我将重述一些有关将现有容器(其存储可用)导入新数据库的建议。
首先,如果想要复制整个 LXD 实例(基本上是获取所有容器的存储,加上数据库/var/lib/lxd
),有(可以说)更简单的替代方案。此外,如果旧实例仍在运行并且可以通过网络访问,更原生的方法是将其定义为远程,如远程主机和容器迁移精彩的 Ubuntu Insights 章节LXD 2.0:博客文章系列。
现在,该系列的另一章(同样,只有当旧实例仍在运行时才可行)是使用以下方法制作现有容器的映像:
lxc publish <my-container>@<snapshot> <my-image-name>
然后将其导出到 tarball 中
lxc image export <my-image-name> /path/to/directory
生成的 tarball 可以使用以下方式导入
lxc image import <metadata-tarball> <rootfs-tarball> --alias <my-image-name>
正如 OP 在评论中所说,这需要做很多工作。更严重的是,如果出于某种原因您无法运行旧实例,它就会失败。
从 2.7 版开始,LXDbackup.yaml
在每个容器的存储中存储一个文件(位于/var/lib/lxd/containers/<my-container>
),以便从副本导入容器,使用lxd import
(请参阅LXD 备份策略和这个GitHub 问题)。请注意lxd
;这与 不同lxc image import
。
根据LXD 新闻页面我认为只需将容器的存储移动到/var/lib/lxd/containers
目录中,然后运行即可
lxd import <my-container>
但是,由于 Xenial 官方存储库目前提供 LXD 2.0.9 版本,所以我还没有测试最后一部分。