
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:
incus storage listincus storage show defaultconfig: source: /var/lib/incus/storage-pools/defaultname: defaultdriver: dirused_by: - /1.0/instances/c1 - /1.0/instances/vm1Here 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:
incus storage create data dir# Storage pool data createdFor a ZFS or btrfs backend, the matching tools have to be installed on the host, otherwise Incus refuses:
incus storage create fast zfs# Error: Required tool 'zpool' is missingChoosing the right backend
The backend decides both performance and features (fast snapshots, compression).
| Backend | Fast snapshots | When to choose it |
|---|---|---|
| dir | no (a copy) | tests, simplicity, no prerequisites |
| ZFS | yes | recommended: instant snapshots and clones, compression |
| btrfs | yes | alternative to ZFS, built into the kernel |
| LVM | yes (block level) | block volumes, existing LVM infrastructure |
| Ceph | yes | distributed 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:
incus storage volume create data vol1incus 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:
incus storage volume attach data vol1 c1 /mnt/dataThe 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:
incus storage volume snapshot create data vol1 before-updateincus storage volume snapshot list data vol1On 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 listandshowinspect pools;incus storage createcreates one.- The ZFS, btrfs and LVM backends need their tools installed, otherwise
Required tool missing. - ZFS is recommended for its instant snapshots and clones;
dirfor simplicity. - A custom volume attaches to an instance and survives its deletion.
FAQ: common questions about Incus storage
Five backends
An Incus pool rests on a backend:
| Backend | Characteristic |
|---|---|
| dir | a directory, no prerequisites |
| ZFS | instant snapshots and clones, compression |
| btrfs | alternative to ZFS, built into the kernel |
| LVM | block volumes |
| Ceph | distributed storage (cluster) |
ZFS is the most recommended for serious use; dir to get started or for a lab.
ZFS as the reference
- ZFS: the reference choice, with instant snapshots and clones that only occupy the differences, plus compression;
- btrfs: a kernel-integrated alternative;
- LVM: for an existing block infrastructure;
- Ceph: for distributed cluster storage;
- dir: perfect for a lab or for learning, with no prerequisites.
For production, go with ZFS; to learn, dir is enough.
The backend is missing its tools
The ZFS, btrfs and LVM backends rely on system tools:
Error: Required tool 'zpool' is missing
Install the matching package:
- ZFS:
apt install zfsutils-linux; - btrfs:
apt install btrfs-progs; - LVM:
apt install lvm2.
The dir backend requires no tool and works everywhere.
A custom volume, attached
incus storage volume create data vol1
incus storage volume attach data vol1 c1 /mnt/data
The vol1 volume becomes reachable at /mnt/data inside the container. It can be attached to several instances.
Since it lives in the pool and not inside an instance, it survives container deletion: handy for shared or persistent data.
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.