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_池名称|新池
希望这可以帮助