(2017 年 4 月)更新 *******************

(2017 年 4 月)更新 *******************

LXD 的默认路径是/var/lib/lxd,因此容器位于 中 /var/lib/lxd/containers,快照位于 中/var/lib/lxd/snapshots

/var/ 分区已满,因此我计划使用另一个具有更多空间的分区来存储容器和快照。

我目前的选择是:

  • 创建到新目录的符号链接(在另一个驱动器中)
  • 将新目录绑定(挂载)到当前目录
  • 更改一些 lxd 设置(如果存在),使其指向另一个驱动器中的目录

不确定哪种方法更简单,以及是否还有其他方法可以轻松实现这一点。

我担心 apparmor 和容器的权限会出现问题,或者会导致 lxd/lxc 出现问题。

哪种方式才是移动它们的正确(或最佳)方法?

(2017 年 4 月)更新 *******************

LXD 2.9+ 支持多个存储池。

答案1

LXD 最大的问题是(目前)它似乎只支持一个存储池。特别是,如果你想在一个磁盘卷中运行部分容器,在另一个磁盘卷中运行部分容器,这会成为一个问题。比如,在 SSD 卷中运行一些“快速”容器,在 HDD 卷中运行一些“慢速”容器。

如果您希望仅将容器运行在单个卷中,解决方案非常简单:

  • 停止你的容器
  • 停止 LXD(服务 lxd 停止)
  • 将整个 /var/lib/lxd 目录移动到新的存储池
  • 创建指向新存储池的符号链接
  • 启动 LXD(服务 lxd 启动)
  • 你完成了

例如,如果您将新的存储安装在 /mnt/largepool 下名为 lxd 的子目录中,则创建如下链接: ln -s /mnt/largepool/lxd /var/lib/lxd

这样,您的容器就会位于新的存储卷上。

请注意,如果您使用 BTRFS 或 ZFS 作为存储后端,您可能希望首先在新存储上创建必要的子卷,以便您的容器恰好位于其自己的子卷中。例如,如果您有 btrfs 并且有名为 c1 和 c2 的容器,并且目录 /mnt/largepool/lxd/containers 已经到位,则在实际移动文件之前,请创建子卷: btrfs su create /mnt/largepool/lxd/containers/c1 btrfs su create /mnt/largepool/lxd/containers/c2

这将使之后创建容器快照变得容易。

我希望这些信息对您有帮助。

答案2

LXD 基于 sqlite db,因此要更改池位置只需更改db:

如果你没有,请安装 sqlite3 客户端

echo“更新配置设置值='新池' 其中 \ 键 = 'storage.zfs_pool_name';"|sqlite3/var/lib/lxd/lxd.db

假设你的 lxd db 位于默认位置

然后检查

echo "SELECT * FROM config;"|sqlite3 /var/lib/lxd/lxd.db

1|存储.zfs_池名称|新池

希望这可以帮助

相关内容