Progressive File Layouts (PFL)

Progressive File Layouts (PFL) is a Lustre feature introduced in version 2.10 that enables dynamic, flexible, and scalable file striping through composite layouts, allowing files to be composed of multiple sub-layouts (components) across Object Storage Targets (OSTs) with varying stripe patterns. It supports automatic extension, migration, and management of layouts without requiring file recreation or full data migration. This guide is based on the Lustre Operations Manual (updated 2025) for Lustre 2.17.0 (January 2026).

Core Concepts

ConceptDescription
Composite LayoutsFiles can consist of multiple components (sub-files), each with its own striping (stripe size, count, OST pool, index). Components cover non-overlapping, adjacent extents starting at offset 0.
Dynamic ExtensionPFL allows automatic striping extension to different OSTs when a file component is written for the first time. Unused components do not initialize their OST objects, reducing access overhead and OST inode usage.
Self-Extending Layout (SEL)Introduced in Lustre 2.13, extends PFL with space management in case an OST fills while file is being written. Use --extension-size|-z.
File Level Redundancy (FLR)In Lustre 2.11+, PFL supports mirrored files where each mirror uses different OSTs/pools for storage tiering and/or redundancy. Mirrors are marked stale when the file is modified; requires external resync action to bring mirrors back in sync.
Instantiation DelayOnly the first component is instantiated at layout set. Other components have OST object allocated on first write/truncate to that file offset.
Extents & HolesComponent extents must be adjacent with no gaps. -1 or eof indicates extent to maximum file offset.
Client CompatibilityClients 2.9- cannot create/use PFL. 2.10+ clients can use PFL files, but may not open if incompatible type (e.g., overlapping components).

Commands

CommandPurposeKey Options
lfs setstripeCreate, modify, add/delete components; set defaults for directories.-E COMPONENT_END, -c STRIPE_COUNT, -S STRIPE_SIZE, -i OST_INDEX, -p POOL, --comp-flags FLAGS
lfs getstripeView layout, including PFL components, mirror IDs, flags, extents.-I <comp_id> to show specific component
lfs migrateConvert layouts (normal to composite, composite to composite, composite to normal).Same syntax as setstripe with -E for extents
lfs mirror createCreate mirrored file/dir with PFL layouts per mirror.-N MIRROR_COUNT, setstripe options per mirror, --flags=prefer
lfs mirror extendAdd mirrors to existing file using layout from victim file.-f <victim_file>, --no-verify
lfs mirror splitExtract a mirror as a new file.--mirror-id ID, --delete, -f NEW_FILE
lfs mirror resyncResync stale mirrors from primary.--only <id>
lfs mirror verifyCheck data consistency across mirrors using checksums.--only <id>, -v (verbose)
lfs findLocate files by mirror count/state.--mirror-count, --mirror-state {ro|wp|sp}
tunefs.lustreTune filesystem for PFL (if supported).Post-formatting
lctl lfsck_start -t layoutRun LFSCK to check/repair layout inconsistencies involving PFL.-A (all targets), -o (repair orphans), -n (dry-run)

Examples

# Basic Composite PFL File
lfs setstripe -E 1G -c 1 -E 16G -c 4 -E eof -c -1 -i 4 /mnt/testfs/create_comp

# Add Component to Existing File
lfs setstripe --component-add -E eof -c 4 -o 6-7,0,5 /mnt/testfs/add_comp
# Resync & Verify Specific Mirrors
lfs mirror resync --only 2 /mnt/testfs/file1


# Delete Last Component
lfs setstripe --component-del -I 5 /mnt/testfs/del_comp

# Set Directory Default with PFL
lfs setstripe -E 256M -c 1 -E 16G -c 4 -E eof -S 4M -c -1 /mnt/testfs/pfldir

# Create Mirrored File with PFL
lfs mirror create -N -S 4M -c 2 -p flash -N -c -1 -p archive /mnt/testfs/file1

# Extend Mirror Using Victim File
lfs setstripe -E 1G -c 2 -p none -E eof -c -1 /mnt/testfs/victim_file
lfs mirror extend --no-verify -N -f /mnt/testfs/victim_file /mnt/testfs/file1

# Resync & Verify Specific Mirrors
lfs mirror resync --only 2 /mnt/testfs/file1
lfs mirror verify -vvv /mnt/testfs/file2

Best Practices

Limitations

Recent Changes (Up to Lustre 2.17.0)

Related Tools & Diagnostics