How to manage storage pools#

See the following sections for instructions on how to create, configure, view and resize Storage pools.

Create a storage pool#

LXD creates a storage pool during initialization. You can add more storage pools later, using the same driver or different drivers.

To create a storage pool, use the following command:

lxc storage create <pool_name> <driver> [configuration_options...]

Unless specified otherwise, LXD sets up loop-based storage with a sensible default size (20% of the free disk space, but at least 5 GiB and at most 30 GiB).

See the Storage drivers documentation for a list of available configuration options for each driver.

Examples#

See the following examples for how to create a storage pool using different storage drivers.

Create a directory pool named pool1:

lxc storage create pool1 dir

Use the existing directory /data/lxd for pool2:

lxc storage create pool2 dir source=/data/lxd

Create a storage pool in a cluster#

If you are running a LXD cluster and want to add a storage pool, you must create the storage pool for each cluster member separately. The reason for this is that the configuration, for example, the storage location or the size of the pool, might be different between cluster members.

Therefore, you must first create a pending storage pool on each member with the --target=<cluster_member> flag and the appropriate configuration for the member. Make sure to use the same storage pool name for all members. Then create the storage pool without specifying the --target flag to actually set it up.

For example, the following series of commands sets up a storage pool with the name my-pool at different locations and with different sizes on three cluster members:

lxc storage create my-pool zfs source=/dev/sdX size=10GB --target=vm01
lxc storage create my-pool zfs source=/dev/sdX size=15GB --target=vm02
lxc storage create my-pool zfs source=/dev/sdY size=10GB --target=vm03
lxc storage create my-pool zfs

Note

For most storage drivers, the storage pools exist locally on each cluster member. That means that if you create a storage volume in a storage pool on one member, it will not be available on other cluster members.

This behavior is different for Ceph-based storage pools (ceph, cephfs and cephobject) where each storage pool exists in one central location and therefore, all cluster members access the same storage pool with the same storage volumes.

Configure storage pool settings#

See the Storage drivers documentation for the available configuration options for each storage driver.

General keys for a storage pool (like source) are top-level. Driver-specific keys are namespaced by the driver name.

Use the following command to set configuration options for a storage pool:

lxc storage set <pool_name> <key> <value>

For example, to turn off compression during storage pool migration for a dir storage pool, use the following command:

lxc storage set my-dir-pool rsync.compression false

You can also edit the storage pool configuration by using the following command:

lxc storage edit <pool_name>

View storage pools#

You can display a list of all available storage pools and check their configuration.

Use the following command to list all available storage pools:

lxc storage list

The resulting table contains the storage pool that you created during initialization (usually called default or local) and any storage pools that you added.

To show detailed information about a specific pool, use the following command:

lxc storage show <pool_name>

Resize a storage pool#

If you need more storage, you can increase the size of your storage pool.

To increase the size of a storage pool, follow these general steps:

  1. Grow the size of the storage on disk.

  2. Let the file system know of the size change.

See the specific commands for different storage drivers below.

Enter the following commands to grow a loop-backed Btrfs pool by 5 Gigabytes:

sudo truncate -s +5G <LXD_lib_dir>/disks/<pool_name>.img
sudo losetup -c <loop_device>
sudo btrfs filesystem resize max <LXD_lib_dir>/storage-pools/<pool_name>/

Replace the following variables:

<LXD_lib_dir>

/var/snap/lxd/common/mntns/var/snap/lxd/common/lxd/ if you are using the snap, or /var/lib/lxd/ otherwise.

<pool_name>

The name of your storage pool (for example, my-pool).

<loop_device>

The mounted loop device that is associated with the storage pool image (for example, /dev/loop8). To find your loop device, enter losetup -j <LXD_lib_dir>/disks/<pool_name>.img. You can also use losetup -l to list all mounted loop devices.