LXD将容器/快照移动到另一个驱动器

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

/ var /分区已满,所以我打算为容器和快照使用另一个分区,它有更多的空间。

我目前的选择是:

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

不确定哪种方法更容易,如果有其他方法可以轻松实现这一点。

我担心apparmor,容器的权限或lxd / lxc中的问题都有问题。

移动它们的正确(或最佳)方法是什么?

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

LXD 2.9+支持多个存储池。

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

这样可以轻松地在之后创建容器快照。

我希望这些信息有用。

LXD基于sqlite db,所以更改池位置只需更改db:

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

echo“UPDATE config SET value =’ new_pool_lxd’WHERE \ key =’storage.zfs_pool_name’;”| sqlite3 /var/lib/lxd/lxd.db

假设你的lxd db在默认位置

然后检查

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

1 | storage.zfs_pool_name | new_pool_lxd

希望这可以帮助