lxd容器改变存储后端

已经创建的容器可以通过一定的方法更改为使用其他的存储池/存储后端

本机

本机有两个存储池,分别使用btrfs和zfs

1
2
3
4
5
6
7
8
$ lxc storage list
+---------+-------------+--------+--------------------------------------------+---------+
NAME DESCRIPTION DRIVER SOURCE USED BY
+---------+-------------+--------+--------------------------------------------+---------+
default btrfs /var/snap/lxd/common/lxd/disks/default.img 1
+---------+-------------+--------+--------------------------------------------+---------+
lxd_zfs zfs /var/snap/lxd/common/lxd/disks/lxd_zfs.img 2
+---------+-------------+--------+--------------------------------------------+---------+

使用btrfs存储池新建一个alpine容器

1
2
$ lxc init images:alpine/3.10/amd64 alp -s default
$ lxc storage show default

可以看到alp容器使用default存储池,也就是btrfs后端。

然后通过将容器发布为image,使用image创建新容器的方式使新的alp容器使用lxd_zfs存储后端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ lxc publish -f alp --alias alp_img
$ lxc delete alp
$ lxc init alp_img alp -s lxd_zfs
$ lxc image delete alp_img
$ lxc storage show lxd_zfs
config:
size: 15GB
source: /var/snap/lxd/common/lxd/disks/lxd_zfs.img
zfs.pool_name: lxd_zfs
description: ""
name: lxd_zfs
driver: zfs
used_by:
- /1.0/containers/alp
- /1.0/profiles/default
status: Created
locations:
- none

可以看到容器alp使用zfs后端存储,其实这是一个全新的容器,不过使用image做了一下中转。

异机

在目标服务器上新建zfs存储池和profile

1
2
3
4
5
6
7
8
9
10
11
12
13
$ lxc storage create lxd_zfs zfs
$ lxc profile create storage_zfs
$ lxc profile device add storage_zfs root disk path=/ pool=lxd_zfs
$ lxc profile show storage_zfs
config: {}
description: ""
devices:
root:
path: /
pool: lxd_zfs
type: disk
name: storage_zfs
used_by: \[\]

这样在向目标服务器上copy/move容器时,指定storage_zfs profile就可以了。

1
$ lxc copy container1 remotesvr1: -p storage_zfs