File Level Redundancy (FLR)

File Level Redundancy (FLR) is a Lustre feature introduced in version 2.11 that allows data mirroring at the file level across multiple OSTs to allow tiering and transparent data migration across storage types, and for improved fault tolerance. Mirrors are managed as PFL components, with a primary/preferred mirror for writes and stale mirrors requiring resync. This guide covers Lustre 2.17.0 (January 2026), based on the Lustre Operations Manual (updated 2025).

Core Concepts

ConceptDescription
Data MirroringFile data duplicated on multiple OSTs; tracked by mirror-count and mirror-id.
Fail-over PairingActive/passive or active/active nodes sharing storage; transparent to clients.
Active/Passive vs Active/ActivePassive: one active, one standby; Active: both active with split/load-balanced OSTs.
Resource SharingShared SAN/NAS/RAID visible as same LUN; RAID-1 for MDT, RAID-5/6 for OST.
Synchronization ModelWrites update primary; others stale until resync/verify.
Fault Domain SeparationMirrors on different pools/racks/OSSs to avoid correlated failures.
Interoperability≤2.9 clients cannot access; 2.10 can read but not open; ≥2.11 full support.
Delayed Write PhaseSecondary mirrors stale post-write; not used until resync.
Changelog TrackingEvents like FLRW (initial write), RESYNC logged.
Progressive File Layout (PFL)Base for FLR; mirrors as non-overlapping components.
Self-Extending Layout (SEL)Can be used as mirror components.
Data on MDT (DoM) / Lazy Size on MDT (LSoM)Compatible but respect size limits.
Server-Side CachingRead/writethrough caching reduces access for mirrored data.
Asynchronous Journal CommitImproves write performance; complements resync.

Commands

CommandPurposeKey Options
lfs mirror createCreate mirrored file/dir-N COUNT, setstripe options, --flags=prefer
lfs mirror extendAdd mirror(s) to existing file-N, --no-verify, -f VICTIM_FILE
lfs mirror splitExtract/destroy mirror--mirror-id ID, -d, -f SPLIT_FILE
lfs mirror resyncSync stale mirrors--only ID
lfs mirror verifyCheck mirror consistency--only ID, -v
lfs findLocate files by mirror count/state--mirror-count, --mirror-state {ro|wp|sp}
lfs setstripeSet striping in mirrors-N, -c, -S, --pool, -E
lfs getstripeView mirror layouts-v, --mirror-id
lfs migrateRestripe file or migrate to other OSTs.Same arguments as setstripe

Examples

# Basic Mirrored File with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool with 2 copies on flash pool, one copy on archive pool
lfs mirror create -N 2 -S 4M -c 2 -p flash -N -c 32 -p archive /mnt/lustre/file1
n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1

n# Resync new file data to stale mirror after file was written
cp data /mnt/lustre/file1
lfs mirror resync /mnt/lustre/file1


# PFL Mirrored
lfs mirror create -N -E 4M -p flash --flags=prefer -E eof -c 2 -N -E 16M -S 8M -c 4 -p archive -E eof -c -1 /mnt/lustre/file2

# Extend Mirror
lfs setstripe -p flash /mnt/lustre/file1
lfs mirror extend -N -S 8M -c -1 -p archive /mnt/lustre/file1

# Extend with Victim
lfs mirror extend --no-verify -N -f /mnt/lustre/victim_file /mnt/lustre/file1

# Split Mirror
lfs mirror split --mirror-id 1 /mnt/lustre/file1

# Destroy Mirror
lfs mirror split --mirror-id 2 -d /mnt/lustre/file1

# Resync
lfs mirror resync --only 2 /mnt/lustre/file1

# Verify
lfs mirror verify -v --only 1,4 /mnt/lustre/file2

# Find Mirrored Files
lfs find --mirror-count +1 --type f /mnt/lustre

# Find Not Read-Only
lfs find --mirror-state=^ro --type f /mnt/lustre


Best Practices

Limitations

Recent Changes (Up to Lustre 2.17.0)

Related Tools & Diagnostics