Learn OpenStack · deploy/reference/decision-guides

Storage Decision Guide

Comparison

Feature Ceph LVM NFS
Recommended for Production Dev/test, small deployments Shared storage with existing NFS
Shared storage Yes (distributed) No (local only) Yes (network)
Live migration Yes No (unless shared backend) Yes
Scalability Scales horizontally Single-node only Depends on NFS server
Complexity High (separate Ceph cluster) Low Low-Medium
Redundancy Built-in (3x replication or EC) None (single disk) Depends on NFS server
Performance High (distributed I/O) High (local disk) Variable (network-dependent)
Cinder volumes Yes (RBD) Yes (LVM) Yes (NFS)
Nova ephemeral Yes (RBD) Yes (local) No
Glance images Yes (RBD) File-backed File-backed
Manila (shared FS) CephFS No NFS
Minimum hosts 3 (for replication) 1 1 (NFS server)

Recommendation by Use Case

Production → Ceph

Ceph is the standard production storage backend. It provides: - Shared storage across all compute nodes (enables live migration) - Built-in replication and fault tolerance - Unified backend for block (Cinder), object (RGW), and file (CephFS) storage - Horizontal scaling by adding OSDs

In globals.yml:

enable_ceph: "no"  # kolla deploys don't manage Ceph — use external Ceph
glance_backend_ceph: "yes"
cinder_backend_ceph: "yes"
nova_backend_ceph: "yes"

Note: Kolla-ansible does not deploy Ceph itself. Use cephadm, Rook, or a standalone Ceph deployment. Then configure kolla-ansible to use external Ceph by providing the ceph.conf and keyrings in the config/ directory.

Dev/test / Single-node → LVM

LVM is the simplest storage option. No external dependencies. Good for: - All-in-one (AIO) deployments - Development and testing - Environments where live migration is not needed

In globals.yml:

enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"

Requires a volume group named cinder-volumes on the cinder-volume host. Create it before deploying:

pvcreate /dev/sdX
vgcreate cinder-volumes /dev/sdX

Existing NFS infrastructure → NFS

Use NFS when you have an existing NFS server or NAS appliance and want to avoid the complexity of Ceph. Supports live migration since storage is shared.

In globals.yml:

enable_cinder_backend_nfs: "yes"

Provide NFS share details in config/nfs_shares:

nfs-server:/path/to/share

Migration Paths

From To Path
LVM → Ceph Migrate Cinder volumes with cinder migrate. Requires Ceph cluster to be deployed and configured first.
NFS → Ceph Same as LVM → Ceph. Migrate volumes individually.
LVM → NFS Migrate Cinder volumes. Simpler than Ceph migration but still requires maintenance window.

Key rule: Choose Ceph for production from the start if you can. Migrating storage backends later is possible but involves per-volume data migration and a maintenance window.