Home / Reference / FlexGroup

FlexGroup deep-dive: one namespace, many nodes

A FlexGroup is ONTAP's scale-out NAS volume: one logical volume, one junction path, one mount point — but the data is striped across constituent FlexVols that live on different nodes and aggregates. That's how a single filesystem escapes the throughput and capacity ceiling of one node. This guide covers how placement works, how to size it, the commands that manage it, and the limitations that still bite.

FlexGroup with constituent volumes across nodes

What a FlexGroup actually is

When you create a FlexGroup, ONTAP silently creates a set of ordinary FlexVols — the constituents — and presents them to clients as a single namespace. Clients see one volume; underneath, files are distributed across the constituents. Nothing about the client experience changes: same NFS/SMB mount, same junction path, same snapshot directory semantics. Everything about performance changes: 8 constituents on 4 nodes can push a lot more aggregate bandwidth than any single FlexVol.

Think of it as RAID at the volume level: instead of striping blocks across disks, you're striping files across volumes.

How files land on constituents

Placement is a hash of the file's directory entry, not a round-robin of writes. A file is assigned to a constituent based on its name (and parent), so the same path always maps to the same constituent — which is what makes the namespace stable across reboots and reconnects. Practical consequences:

Creating a FlexGroup

Creation is a single command; the constituent layout follows from the aggregates you name.

volume create -vserver vs1 -volume datasets -type flexgroup \
  -aggregate-list aggr1,aggr2,aggr3,aggr4 \
  -constituents-per-aggregate 2 \
  -junction-path /datasets -size 40TB

This example spreads the volume across four aggregates with two constituents per aggregate — 8 constituents total. The constituents are named automatically (datasets_0001datasets_0008).

Rules of thumb for the layout:

volume show -volume datasets*          # list the FlexGroup and its constituents
volume show -fields files,files-used -volume datasets*   # inode usage per constituent

Inode planning (the thing people miss)

Each constituent owns its own inode file, and the FlexGroup's total inode capacity is the sum of its constituents'. ONTAP sizes inodes at creation from the default ratio (roughly 1 inode per 32 KB of capacity). For many-small-file workloads — home directories, build trees, code repositories, dataset lakes — that default runs out long before capacity does, and you can't just add inodes to a constituent later (shrinking the file size or rebuilding is the usual remedy, which nobody wants).

So: decide your file-count estimate before creating, and size the volume (or use the inode options at create time) so that total inodes = estimated file count with headroom. From a client, df -i on the mount shows the combined picture; if any constituent reports 100% inode use, the whole namespace starts throwing ENOSPC-style errors for new files even with free capacity elsewhere.

Rebalancing

Placement is statistical, so workloads drift: a project directory that grew fast, a big file that landed on one constituent, deletes that emptied others. Rebalance moves files from heavy constituents to lighter ones, in the background, with the volume online the whole time.

volume rebalance start -vserver vs1 -volume datasets   # kick off a rebalance
volume rebalance show -vserver vs1 -volume datasets     # watch progress

Notes from the field:

When FlexGroup is the right tool

When it's not:

Feature limitations (check your release)

FlexGroup support has been catching up release by release, so this table is directionally right but version-dependent — verify against the ONTAP documentation for the release you run.

FeatureFlexGroup status
SnapMirrorSupported (SnapMirror for FlexGroup) in ONTAP 9.8+; earlier releases: not supported
SnapVaultNot supported (use SnapMirror for FlexGroup instead)
FlexCloneSupported in newer releases (9.6+)
Deduplication / compressionNot supported on FlexGroup constituents
QtreesNot supported (use separate FlexGroups for isolation)
QuotasSupport added in newer releases — verify for your version
NDMPNot supported (snapshot + SnapMirror workflows instead)
Thin provisioning, QoS, snapshotsSupported

The practical rule: if your design needs dedupe, qtrees, or NDMP, FlexGroup isn't the volume for it — build with FlexVols (or FlexGroups per tenant, and accept the dedupe loss).

Quick sizing checklist

  1. Count files, not bytes. Estimate total inodes; size per-constituent inodes for that.
  2. Choose constituent count from parallelism need (8 default; 4 small; 16 high-throughput), not from aesthetics.
  3. Spread constituents across nodes and aggregates, equal-sized.
  4. Plan the hot path: is any single directory or file going to be hot? If yes, assume one constituent carries it.
  5. Schedule rebalance into normal operations, and re-run after major capacity or data changes.
  6. Re-check feature support for the ONTAP release you're actually deploying.