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
希望这可以帮助