LFS-SETDIRSTRIPE(1)

NAME
lfs setdirstripe, mkdir - set striping pattern of a directory.

SYNOPSIS
lfs setdirstripe [-cdDhHioTxX] DIR...

DESCRIPTION
Create a striped directory with specified striping pattern. This lfs sub-command is similar to lfs setstripe, but is used to create a striped directory or set the default layout for subdirectories. Can also be used to create directory with a foreign (free format) striping pattern (see --foreign and --xattr options). lfs mkdir is an alias for this command.

OPTIONS

-c, -T, --mdt-count=COUNT
    Stripe the new directory over COUNT MDTs.

-h, --help
    Print usage message.

-i, --mdt-index=START_MDT_INDEX[,MDT_INDEX...]
    Use the MDT whose index is START_MDT_INDEX as the master/starting MDT for the directory. If multiple MDT_INDEX values are given, then the stripes will be allocated on the specified MDT indices. If -1 (default) is used, the client will round-robin subdirectory creation across all MDTs if their free space is within lod.*.mdt_qos_threshold_rr percent of each other, otherwise the client will prefer to select COUNT MDT(s) proportional to the free space and inodes on each. Providing mutiple MDT_INDEX values while trying to set the default striping pattern of subdirectories using -D will not load balance subdirectory creation amongst the MDTs. Instead, this will cause all new subdirectories to be striped across all of the specified MDTs. This is discouraged and can lead to filesystem problems if too many striped directories are created. To do this anyway, -c N must also be specified, where N matches the number of MDT indices given.

-H, --mdt-hash=HASH_TYPE
    Use hash_type for the striped directory.

    crush
        CRUSH hash algorithm. This is a consistent hash algorithm, so minimum sub files need to relocate during directory restripe.

    fnv_1a_64
        Fowler-Noll-Vo (FNV-1a) hash algorithm. This provides reasonably uniform, but not cryptographically strong, hashing of the filename. (default)

    all_char
        Sum of ASCII characters modulo number of MDTs. This provides weak hashing of the filename, and is suitable for only testing or when the input is known to have perfectly uniform distribution (e.g. sequential numbers).

-d, --delete
    Delete the default striping layout from the directory. New subdirectories created in this directory will inherit the global default directory layout (by default they will not be striped).

-D, --default
    Set the default striping pattern of subdirectories. Newly created sub-directories will use the new default striping pattern, but existing sub-directories will not be affected. The newly created sub-directories will also inherit the specified default striping pattern. Note that striping all directories across all MDTs by default is not recommended at this time, as the clients will have to do more RPCs to create and access each directory, hurting performance rather than improving it. Default striped directories are preferred only for parent directories where large subdirectories will be created (e.g. file-per-process job output directories). Instead, using -c 1 -i -1 on top-level directories balances mkdir therein over MDTs automatically without causing all subdirectories to be remote by default.

-o, --mode=MODE
    Set the file access permissions of the new directory to the specified numeric MODE (typically octal), as with chmod(1). It is not affected by the current umask(1p).

--foreign[=type]
    Create a directory with a foreign (non-Lustre/free format, see --xattr option) striping. Where type specifies a known foreign type (like none , symlink , ...) or a 32-bit numeric type.

--flags=<hex>
    Specify a numeric bitmask of type-specific layout flags for the foreign layout.

-x, --xattr=STRING
    Specify a string to be used as a foreign (free format) striping.

-X, --max-inherit=MAX_INHERIT
    Set the inherit depth of default directory layout. If non-zero, then MAX_INHERIT is the number of subdirectory levels for which this default layout is inherited, up to a maximum of 250 levels, and is decremented by one when copying the default layout to each new subdirectory, until zero and the default layout is no longer copied. A MAX_INHERIT of -1 means the default layout is inherited for all subdirectories.

--max-inherit-rr=MAX_INHERIT_RR
    Set the round-robin inherit depth of the default directory layout, only when START_MDT_INDEX is -1. If MAX_INHERIT_RR is zero (unset), then new subdirectories are preferentially created on MDTs with more free space and inodes if the MDTs are imbalanced. If non-zero, then MAX_INHERIT_RR is the number of subdirectory levels, up to a maximum of 250 levels, for which new subdirectories will be created in a round-robin manner across all available MDTs, rather than using MDT space balancing for new subdirectories. Otherwise, MAX_INHERIT_RR is decremented by one when copying the default layout to each new subdirectory, until zero and round-robin is no longer used. It may be useful to set MAX_INHERIT_RR to 2 or 3 when setting the default directory layout on the root of a new filesystem, so that top-level subdirectories are immediately spread across MDTs, rather than waiting for the MDTs to become imbalanced. Round-robin subdirectory creation is unlikely to be useful for existing filesystems that already have many files and imbalanced MDTs, since space balancing will already happen, and this will unnecessarily increase the number of remote subdirectories (increasing overhead) without any benefit.

NOTE

If neither -c or -i are specified, lfs mkdir will default to -c 1 -i -1 and create the directory on an MDT that is less full than the others.

The lfs setdirstripe command is only usable by root unless the mdt.*.enable_remote_dir_gid is set on the MDS via lctl set_param to be either a non-zero numeric GID to limit it to a single group (e.g. the operator or admin GID), or -1 to allow any user/group to create remote directories. By default, it is 0 to limit remote/striped directories to only the root user. The root directory of the file system is on MDT0000, and a filesystem-wide default directory layout is set on it by default: lfs setdirstripe -D -i -1 -c 1 --max-inherit -1 --max-inherit-rr 3 , which is a space balanced directory layout, therefore new directories will be created on all MDTs by inode and space usage, and the top three level of new directories will be created in roundrobin mode if system is balanced. If user doesn't want automatic space balance, deleting this default directory layout won't work, because it will be recreated if not set, instead user can run lfs setdirstripe -D -i -1 -c 1 --max-inherit 1 <mountpoint> to limit space balance in the top level, or run lfs setdirstripe -D -i 0 -c 1 --max-inherit 1 <mountpoint> to disable it.

EXAMPLES

$ lfs setdirstripe -c 2 -i 1 -H all_char /mnt/lustre/dir1
    This creates a directory striped on two MDTs, whose first stripe is on MDT0001 (MDT index 1), and whose hash type is all_char.

$ lfs mkdir --foreign=symlink --xattr PUUID/CUUID /mnt/lustre/dir1
    This creates dir1 with foreign (non-lustre/free format) PUUID/CUUID striping/LMV EA value (symlink type).

AVAILABILITY
The lfs setdirstripe command is part of the Lustre filesystem.

SEE ALSO
lctl(8), lfs(1), lfs-getdirstripe(1), lfs-setstripe(1), lustre(7)