Skip to main content
RunBook Academy

Proxmox VEV · Storage FundamentalsStorage concepts

Choosing a storage backend: the capability matrix

Intermediate⏱ ~26 minpvesm

What you'll learn

  • Read the documented storage capability matrix and predict what a given backend can do
  • Explain why snapshot support and thin provisioning travel together in Proxmox VE
  • Distinguish shared access from replication, and say what each buys for migration and HA
  • Recognise what changed for LVM in PVE 9 with snapshots as volume chains
  • Choose a backend from four questions rather than from a preference

Prerequisites

Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12

Not yet marked complete on this device.

Storage arguments in virtualisation teams are usually arguments about technology. They are more usefully arguments about capabilities, because a capability is something you either have on a Tuesday afternoon or do not.

Proxmox VE publishes the matrix. This lesson reads it, explains what each column costs, and turns it into four questions.

The documented matrix

Storage typePluginLevelSharedSnapshots
ZFS (local)zfspoolboth — VM disks are zvolsnoyes
Directorydirfilenoqcow2 only
BTRFSbtrfsfilenoyes — technology preview
NFSnfsfileyesqcow2 only
CIFScifsfileyesqcow2 only
Proxmox Backuppbsbothyesn/a
CephFScephfsfileyesyes
LVMlvmblockno — but see belowvolume chains, PVE 9+
LVM-thinlvmthinblocknoyes
iSCSI (kernel)iscsiblockyesvolume chains, PVE 9+
iSCSI (libiscsi)iscsidirectblockyesvolume chains, PVE 9+
FC / SAShandled nativelyblockyesvolume chains, PVE 9+
Ceph / RBDrbdblockyesyes
ZFS over iSCSIzfsblockyesyes

Three footnotes in that table carry most of the operational meaning.

Shared, for LVM over a SAN. LVM’s own “shared” column is no, but the documentation qualifies it: with iSCSI, Fibre Channel or SAS block storage as shared storage in a cluster, LVM splits the LUN into virtual disks. That is the shared-LVM-over-SAN arrangement, and it is genuinely shared — the plugin is not what shares, the LUN is.

Snapshots on file-level backends need qcow2. The documentation is explicit: on file-based storages, snapshots are possible with the qcow2 format, using either the internal snapshot function or snapshots as volume chains — and creating or deleting internal qcow2 snapshots blocks a running VM and is not an efficient operation. A raw file on NFS has no snapshot capability at all.

LVM gained snapshots in PVE 9. Since Proxmox VE 9, snapshots as a volume chain are available for VMs: the snapshot data lives in separate volumes which are layered. This is a real change to a long-standing limitation, and it is the single most likely thing to be out of date in an older runbook or in an engineer’s memory.

What each capability actually buys

Shared

Shared means every node reads and writes the same data. It buys exactly two things, and they are the two biggest operational features in the product:

  • Live migration without copying disks. Memory moves; disks stay. Seconds rather than hours.
  • HA that can restart a guest anywhere. The HA stack needs the guest’s disks to be reachable from whichever node it recovers onto.

Without shared storage neither is impossible, but both change character. Live migration becomes live migration with local disks, which copies. HA becomes HA constrained to nodes that hold a replica.

Snapshots

A snapshot is a rollback point taken in seconds. What it buys is the confidence to change things — an upgrade you can undo, a configuration change you can reverse, a test you can run on the real system.

Two things it is not. It is not a backup: it lives on the same storage as the data, so it does not survive the storage failing, and on most backends it does not survive the guest being deleted. And on file-level backends it is not free: internal qcow2 snapshot creation and deletion block a running VM.

Thin provisioning

Buys density: allocate 100 guests with 100 GB disks on 4 TB of real storage, and pay only for what is written. It is genuinely useful and it is how most estates run.

The cost is that capacity becomes a thing you have to watch rather than a thing you allocated. A thin backend hitting 100% does not politely refuse new allocations — it fails writes to guests that already exist, which is a far worse failure than a provisioning refusal.

Clones

Full clones copy; linked clones reference a base image. Linked clones make template-based provisioning almost instant and almost free, at the price of a dependency: the base image cannot be deleted while linked clones exist, and the clones’ read performance depends on the base image’s.

The four questions

1. Do more than three nodes need to run this guest, and does it need HA? If yes, you need shared storage or replication. Shared: Ceph/RBD, CephFS, NFS, CIFS, or LVM over a SAN LUN. Replication: ZFS with pvesr, with an RPO you have written down.

2. Do you need to roll back? If yes, you need snapshots — which rules out raw on a directory or NFS store, and rules in ZFS, LVM-thin, RBD, CephFS, and qcow2 on file-level storage.

3. Do you have a storage team and a SAN, or do you have servers with disks? This is an organisational question and it decides more designs than the technical ones. A SAN estate leads to LVM over FC/iSCSI. A commodity-server estate leads to Ceph or ZFS. Fighting the organisation’s shape produces a correct design nobody can operate.

4. What happens when it is full, and who finds out? Every thin backend needs this answered before it is deployed. Which alert, at what threshold, to whom.

Read-only / Safewhat capabilities does this cluster actually have today
pvesh get /storage --output-format json \
| jq -r '.[] | [.storage, .type, (.shared // 0), (.content // "-"), (.nodes // "all")] | @tsv'

pvesm status
Read-only / Safe
$ pvesh get /storage --output-format json | jq -r '.[] | [.storage, .type, (.shared // 0), (.content // "-"), (.nodes // "all")] | @tsv'
local	dir	0	iso,vztmpl,backup	all
local-zfs	zfspool	0	images,rootdir	all
shared-rbd	rbd	1	images,rootdir	all
cephfs-shared	cephfs	1	iso,vztmpl,snippets,backup	all
pbs-primary	pbs	1	backup	all

Key takeaways

  • The documented matrix is the starting point, and three footnotes carry the meaning: LVM is shared when the LUN underneath it is; file-level snapshots require qcow2 and internal snapshot operations block a running VM; and PVE 9 added snapshots as volume chains for LVM.
  • Every backend with snapshots also supports thin provisioning, and linked clones follow the same property. Snapshot capability predicts the bundle.
  • Shared storage buys live migration without copying and HA that can recover anywhere. Replication buys an approximation of both, with an RPO equal to the schedule — write the number down.
  • A snapshot is a rollback point, not a backup: same storage, and often the same lifetime as the guest.
  • Thin provisioning converts capacity from an allocation into a thing you monitor. A full thin pool fails writes for existing guests, which is worse than refusing new ones.
  • Choose with four questions: does it need shared access and HA; does it need rollback; what shape is the organisation and its hardware; and what happens when it fills, monitored by whom.
  • Get shared access and rollback right first. Both are hard to change later; density and performance are not.

Knowledge check

Knowledge check · 5 questions

  1. Q1. A guest disk is stored as a raw file on an NFS storage. The team wants to snapshot it before an application upgrade. What is the position?

  2. Q2. Which single documented sentence lets you predict thin-provisioning support from the capability matrix without a separate column?

  3. Q3. A three-node cluster uses local ZFS with pvesr replication every 15 minutes, and the design document says it provides HA. What should the document also state? Select all that apply.

  4. Q4. Since Proxmox VE 9, LVM supports snapshots for VM disks as volume chains, so an LVM-backed design is no longer automatically excluded when rollback is a requirement.

  5. Q5. An LVM-thin pool of 4 TB backs eighty guests provisioned at 500 GB each. Usage crosses 100%. What is the failure and what is the correct preparation?

Passing score: 75%. Answers are checked in this browser.