Skip to content
Français
Conteneurs & Orchestration medium

Managing storage with Incus: pools and volumes

15 min de lecture

Read this page in French

incus logo

In Incus, all storage rests on two objects: pools (the data reservoirs, based on dir, ZFS, btrfs or LVM) and volumes (the storage units inside them). This guide shows how to list, create and inspect pools, manage custom volumes, choose the right backend, and why ZFS changes everything for snapshots. Everything was tested on Incus 7.0. For anyone who wants their instance data organised properly.

What you will learn

  • The concepts: pool, volume, snapshot.
  • List and inspect storage pools.
  • Create a pool and choose its backend.
  • Manage custom volumes and attach them to an instance.

The concepts in brief

Three notions structure Incus storage.

  • A pool is the reservoir where Incus keeps instance disks and volumes. It rests on a backend: dir (a plain directory), ZFS, btrfs, LVM or Ceph.
  • A volume is a storage unit inside a pool. Every instance has its disk volume; you can also create custom volumes to share data.
  • A snapshot freezes the state of a volume at a point in time, so you can step back if something goes wrong.

Listing and inspecting pools

At initialisation, incus admin init created a default pool. You find it with:

Fenêtre de terminal
incus storage list
incus storage show default
config:
source: /var/lib/incus/storage-pools/default
name: default
driver: dir
used_by:
- /1.0/instances/c1
- /1.0/instances/vm1

Here the default pool uses the dir backend and already serves two instances (c1, vm1).

Creating a storage pool

You create a pool with incus storage create <name> <backend>. The simplest, dir, works everywhere:

Fenêtre de terminal
incus storage create data dir
# Storage pool data created

For a ZFS or btrfs backend, the matching tools have to be installed on the host, otherwise Incus refuses:

Fenêtre de terminal
incus storage create fast zfs
# Error: Required tool 'zpool' is missing

Choosing the right backend

The backend decides both performance and features (fast snapshots, compression).

BackendFast snapshotsWhen to choose it
dirno (a copy)tests, simplicity, no prerequisites
ZFSyesrecommended: instant snapshots and clones, compression
btrfsyesalternative to ZFS, built into the kernel
LVMyes (block level)block volumes, existing LVM infrastructure
Cephyesdistributed cluster storage

For serious use, ZFS is the reference choice: its snapshots and clones are near instant and only occupy the differences. dir stays perfect for learning or for a lab.

Managing custom volumes

Beyond instance disks, you create custom volumes to store data independently, for example to share between instances:

Fenêtre de terminal
incus storage volume create data vol1
incus storage volume list data
+--------+-------+--------------+---------+
| TYPE | NAME | CONTENT-TYPE | USED BY |
+--------+-------+--------------+---------+
| custom | vol1 | filesystem | 0 |
+--------+-------+--------------+---------+

You then attach that volume to an instance, at a given mount point:

Fenêtre de terminal
incus storage volume attach data vol1 c1 /mnt/data

The vol1 volume becomes reachable at /mnt/data inside the c1 container. Since it lives in the pool and not inside the instance, it survives the container being deleted.

Volume snapshots

Like instances, volumes can be snapshotted:

Fenêtre de terminal
incus storage volume snapshot create data vol1 before-update
incus storage volume snapshot list data vol1

On a ZFS or btrfs pool those snapshots are instant and cheap; on dir they rest on a full copy.

Key points

  • Incus storage is organised in pools (reservoirs) and volumes (units inside them).
  • incus storage list and show inspect pools; incus storage create creates one.
  • The ZFS, btrfs and LVM backends need their tools installed, otherwise Required tool missing.
  • ZFS is recommended for its instant snapshots and clones; dir for simplicity.
  • A custom volume attaches to an instance and survives its deletion.

FAQ: common questions about Incus storage

Next steps

  • Shared CephFS storage: what storage becomes when instances move between cluster nodes.
  • Terraform provider: declare pools and volumes as code to replay the same storage on another server.
  • Securing Incus: cap the space consumed per instance or per project, before a container saturates the pool.

Is this site useful to you?

Fewer than 1% of readers support this site.

I maintain more than 700 free guides, with no ads and no tracking. Any support, even a symbolic one, helps cover hosting and keeps these resources free. Thank you for the help.

The form does not show? Open Ko-fi in a new tab.

Subscribe and follow my DevSecOps work on LinkedIn