SNFS.CFG

Section: File Formats (5)
Updated: June 2019

NAME

snfs.cfg – StorNext File System Configuration File

SYNOPSIS

This page describes the old File System configuration file format, used prior to StorNext 4.0.

A file system name is associated to its configuration file by the file’s prefix. For example, if the file system were named projecta, then its configuration file would be /usr/cvfs/config/projecta.cfg. There may be multiple file systems simultaneously mounted, with an FSM program running for each active file system. Configuration files must reside on the same system as the FSM processes that use them.

DEPRECATED

This format has been deprecated in favor of the cfgx format on all platforms except Windows – see snfs.cfgx(5) for details on the new format.

SYNTAX

Each configuration file has several section headers and section bodies. A section header is enclosed by square brackets as follows:

        [ Keyword Name ]

A section body is the non-bracketed lines of configuration between section headers.

Every configuration file begins with a Global section body; a Global section header is implied. In addition to the implicitly named Global section, other section-header keyword values are AutoAffinity, NoAffinity, DiskType, Disk and StripeGroup. Section-header keywords are case insensitive.

Section names consist of case-sensitive letters, numbers, underscores (_), and dashes (-).

Each line of a section body has the following syntax:

        Keyword Value

Section-body keyword names are section dependent as described below.

Section-body values can be a number, name or any combination of characters enclosed by double quotes (“). A number can be in octal, decimal or hexadecimal. Octal numbers are represented by prefixing the number with 0, and hexadecimal numbers are represented by prefixing the number with 0x.

A suffix of m or M indicates a mega multiplier, which is 2^20 = 1,048,576. For example the value 3M results in an integer value of 3,145,728.

Following is the list of case-insensitive multiplier suffixes:

Suffix    Name    Multiplier
------    ----    ----------
  K       kilo    1,024
  M       mega    1,048,576
  G       giga    1,073,741,824
  T       tera    1,099,511,627,776

In some cases of specifying disk space, a suffix changes the meaning of the parameter. A number alone implies blocks while a number with a suffix implies bytes. Following are the keywords configured in blocks by default, or bytes when a multiplier suffix is used:

Keyword
-------
InodeExpandMin
InodeExpandInc
InodeExpandMax
InodeStripeWidth
PerfectFitSize
StripeAlignSize
StripeBreadth

Comments start anywhere a pound sign (#) occurs, and continue to the end of that line. The following are valid comment strings:

    # This is a comment line
    #     Text after and including a # sign on any line is ignored.
    #               vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    FsBlockSize 4k  # The file system block size is 4096 bytes.

SECTIONS SUMMARY

The configuration file has six section types that are delimited by square-bracketed section-header lines as described above. The first section type is the Global section, which does not have a section-header line. It occurs only once, at the start of the file, and ends with the first bracketed section-header line. The Global section defines configuration attributes that affect table sizes, file system caches and performance factors for the file system.

The remaining sections are AutoAffinity, NoAffinity, DiskTypes, Disk and StripeGroup. These may occur any number of times and in any order.

Each AutoAffinity section defines a mapping of extensions to the given Affinity.

Each NoAffinity section defines a mapping of extensions to no affinity, i.e. an affinity value of 0.

Each DiskTypes section defines an instance of a valid disk type. This is simply a category of disk device and the disk device’s size in sectors.

The Disk section describes individual disk devices that are configured in the file system. The name of the disk device must be placed in the volume header label using cvlabel(8). This is how the disk devices become associated with an SNFS disk name.

The StripeGroup section describes a group of Disk entities that comprise a stripe group. One or more stripe groups describe the entire file system. Best performance is attained with a minimum of 2 stripe groups per file system with one stripe group used exclusively for metadata/journal and the other for user data. Metadata has an I/O pattern of small random I/O whereas user data is typically of much larger size. Splitting apart metadata and journal into 2 stripe groups is also recommended particularly if latency for file creation, removal and allocation of space is important. A stripe group is the smallest entity that can be manipulated by administration commands, such as cvadmin(8). Even though disk devices may be brought up or down, this has the effect of upping or downing the entire stripe group. The StripeGroup can be either read or write disabled. The stripe group is still up, but one or more of the related group’s disks are disabled. When a stripe group is write disabled, no further allocations are permitted on the group.

NOTE: Several releases ago, there was a section called MediaType that defined Affinity names before they were used in a StripeGroup section. Affinities no longer need to be defined separately from the StripeGroup, and if upgrading from a file system that used the MediaType section, it must be removed or it will cause parser errors.

DEFAULT GLOBAL VALUES

The following defaults, minimums, and maximums are allowed for modifiable global variables. NOTE: the Default Value is in effect when the global variable is absent from the configuration file. Graphical user interfaces and command-line tools such as sncfgedit may create configuration files containing globals variables with initial values that differ from the Default Value below.

Variable Name Default Min Max

AffinityPreference NO NO YES
AllocationStrategy Round Round, Fill, Balance
AllocSessionReservationSize 1024M 128M 1048576M
BrlResyncTimeOut- 20 0 60
BufferCacheSize 256M 32M 500G
CaseInsensitive NO NO YES
CvRootDir- “/” valid dir with < 1024 chars
Debug 0 0 0xFFFFFFFF
DirWarp° YES NO YES
EnableSpotlight NO NO YES
EventFiles- YES NO YES
EventFileDir- special valid dir with < 1024 chars
ExtentCountThreshold 49152 0 0x1FFFC00
FileLocks NO NO YES
ForcePerfectFit- NO NO YES
FsCapacityThreshold 0 0 100
FSMRealtime NO NO YES
FSMMemlock NO NO YES
GlobalShareMode NO NO YES
GlobalSuperUser NO NO YES
HaFsType HaUnmonitored (values in snfs_config(5))
InodeCacheSize 128K 4K 512K
InodeDeleteMax special 10 0xFFFFFFFF
InodeExpandInc° 0 1 32767
InodeExpandMax° 0 1 32768
InodeExpandMin° 0 1 32768
InodeStripeWidth 4096M 0 1099511627776
IoTokens YES NO YES
JournalSize 64M 16M 512M
MaintenanceMode NO NO YES
MaxLogs 4 1 0xFFFFFFFF
MaxLogSize 1M 1M 0xFFFFFFFF
NamedStreams NO NO YES
OpHangLimitSecs 180 0 0xFFFFFFFF
PerfectFitSize 8 1 32768
Quotas NO NO YES
QuotaHistoryDays 7 0 3650
RemoteNotification- NO NO YES
RenameTracking NO NO YES
ReservedSpace- YES NO YES
MetadataArchive- NO NO YES
MetadataArchiveDir- special valid dir with < 1024 chars
MetadataArchiveSearch- YES NO YES
MetadataArchiveCache- 1GB 1GB 500GB
MetadataArchiveDays- 0 0 366
SecurityModel legacy legacy legacy, acl, unixpermbits
StripeAlignSize -1 -1 0xFFFFFFFF
TrimOnClose- 0 0 (2^64)-1
UnixDirectoryCreationModeOnWindows 0755 0 0777
UnixFileCreationModeOnWindows 0644 0 0777
UnixIdMapping none none, algorithmic, winbind
UnixIdFabricationOnWindows * NO YES
UnixNobodyGidOnWindows 60001 0 0x7FFFFFFF
UnixNobodyUidOnWindows 60001 0 0x7FFFFFFF
UseL2bufferCache YES NO YES
WindowsIdMapping ldap ldap, mdc, none

Security Model Variables

UseActiveDirectorySFU YES NO YES
WindowsSecurity YES NO YES

XSan Only Variables

EnforceACLs NO NO YES

* — UnixIdFabricationOnWindows default value is YES on Xsan and NO for all other platforms.

NOTE: Not intended for general use. Only use when recommended by Quantum Support.

° NOTE: Deprecated and will no longer be valid in a future release

AUTOAFFINITY SECTION

Following is the format for a AutoAffinity section:

[AutoAffinity <Affinity>]

Extension <extension name>
 [ One Extension per extension in this mapping ]

NOAFFINITY SECTION

Following is the format for a NoAffinity section:

[NoAffinity]

Extension <extension name>
 [ One Extension per extension in this mapping ]

DISKTYPE SECTION

Following is the format for a DiskType section:

[DiskType <name>]

Sectors <sectors_per_disk>

SectorSize <sector_size>

DISK SECTION

The Disk section syntax is as follows:

[Disk <name>]

Status <UP | DOWN>

Type <disktype_name>


STRIPEGROUP SECTION

The StripeGroup section format is as follows:

[StripeGroup <name>]

Status <UP | DOWN>

Exclusive <Yes | No>

Metadata <Yes | No>

Journal <Yes | No>

Affinity <eight_character_string>
 [ Zero or more affinity entries are allowed ]

Read <Enabled | Disabled>

Write <Enabled | Disabled>

Alloc <Enabled | Disabled>

StripeBreadth <number_of_blocks_per_disk>

MultiPathMethod <Rotate|Static|Sticky|Balance|Cycle>

Node <disk_name> <stripe_group_unit_number>
 [ One Node per disk in stripe group ]

Status If Up, the stripe group is available, if Down it is not.

StripeBreadth Describes the number of file system blocks or bytes that are appended to a file before switching to the next disk in the group. When the value is specified without a multiplier suffix, it is a number of file system blocks. When specified with a multiplier, it is bytes.

Metadata If Yes, this stripe group contains metadata. If No, it does not.

Journal If Yes, this stripe group contains the journal. If No, it does not. Only one stripe group may contain a journal per file system.

Exclusive When the Exclusive variable is set to YES on a stripe group that has Metadata or Journal set to YES, no userdata may reside on that stripe group.

When the Exclusive variable is set to YES on a stripe group that does not have either Metadata or Journal set to YES, and does have Affinity values declared, only the Affinities declared in its StripeGroup section are allowed to reside on this stripe group. This may be preferable for high-bandwidth applications. Because Exclusive is used in two ways, a stripe group cannot have both exclusive Affinity declarations and metadata.

The Exclusive helps to optimize disk striping strategies. For example, in a broadcast video application, an NTSC field is blocked out at 352,256 bytes per field. The optimal and required stripe breadth for a 525 line (NTSC broadcast) stripe group is two fields (a frame), or 43, 16k file system blocks. However, a 625 line (PAL broadcast) stripe group uses 417,792 bytes per field, and the optimal stripe breadth is 51, 16k file system blocks per disk. In order for allocation to work in a mixed mode environment, it is necessary to have one stripe group set up for 525 (NTSC) and another set up for 625 (PAL). See the configuration file example below to see two stripe groups, each configured optimally for NTSC and PAL modes.

Affinity In conjunction with the Exclusive variable, the Affinity variable helps the FSM determine what type of allocation may occur on a stripe group. When Exclusive is YES, only files with matching Affinity values can be allocated. When Exclusive is NO, it is possible that other file types would be allocated on the stripe group. This could have fragmenting effects over time and eventually cause high-bandwidth performance problems. It is recommended that stripe groups are developed to be specialized for each file type used.

The Affinity value can be any string of 8 characters or less.

Rtios The Rtios variable defines the maximum number of disk I/O operations per second (IOs/s) available to real-time applications for the stripe group using the Quality of Service (QoS) API. If both Rtios and Rtmb are set to 0 (the default value), QoS is disabled. If both Rtios and Rtmb are defined, the smaller value (after Rtmb is converted to IOs/s internally) is used. This value should be obtained by real measurement using IO benchmark tool.

RtiosReserve The RtiosReserve variable defines the minimum number of disk I/O operations per second reserved for non-realtime applications when realtime operations have been enabled using the QoS API. This prevents non-realtime clients from IO starvation. If both RtiosReserve and RtmbReserve are set to 0 (the default value), the actual bandwidth reserved is 1MB/s (converting to IO/s), at least 1 IO/s is reserved. If both parameters are defined, the smaller value (RtmbReserve is converted to IOs/s internally) is used. This value should not be greater than Rtios or Rtmb (after being converted to IOs/s).

Rtmb The Rtmb variable defines the maximum number of MBs per second available to real-time applications for the stripe group using the QoS API. Internally the bandwidth is converted to IOs/s based on the size of a well-formed I/Os, i.e. the size of a stripe width. If both Rtios and Rtmb are set to 0 (the default value), QoS is disabled. If both are defined, the smaller value (RtmbReserve is converted to IOs/s internally) is used. This value should be obtained through real measurement using I/O benchmark tools. Note: since the system uses IOs/s internally to throttle I/Os, it is recommended to specify Rtmb only if all I/Os are well formed. Otherwise, the conversion between MB/s and IOs/s using well-formed IOs could lead to unexpected results.

RtmbReserve The RtmbReserve variable defines the minimum number of MBs per second reserved for non-realtime applications when realtime operations have been enabled using the QoS API. This prevents non-realtime clients from IO starvation. Internally this parameter is converted to IOs/s based on the size of a well-formed IO. If both RtiosReserve and RtmbReserve are set to 0 (the default value), the actual bandwidth reserved is 1MB/s (converting to IOs/s), at least 1 IO/s is reserved. If both parameters are defined, the smaller value (RtmbReserve is converted to IOs/s internally) is used. This value should not be greater than the value of Rtmb.

RtTokenTimeout The RtTokenTimeout variable defines the number of seconds for the FSM server to wait for clients to respond to a QoS token callback before timeout. If this parameter is not set or it is set to 0, the default value is 1.5 (seconds). This value may need to be changed for a SAN that has a mixture of client machine types (Linux, Windows, etc.) that all have different TCP/IP characteristics. Also, large numbers of clients (greater than 32) may also require increasing the value of this parameter.

EXAMPLE CONFIGURATION FILE

The following is an example of a fairly complex SNFS file system that supports multiple broadcast video/audio file formats, seven stripe groups and eighteen disk drives.This file system is set up to support both 525 and 625 real-time broadcast formats.

#
# StorNext File System Configuration File Example
#
#
# Names can be of [A-Z][a-Z][0-9] hyphen (-) and a under-bar (_)
#
# Other things, like user defined strings and pathnames must be enclosed
# by double quotes (").
#
# The comment character (#) may start anywhere and persists to the end 
#  of line.
#

# **************************************************************************** 
# A global section for defining file system-wide parameters. 
# 
# For Explanations of Values in this file see the following: 
# 
# UNIX Users:    man snfs_config 
#
# Windows Users: Start > Programs > 
#                    StorNext File System > Help > 
#                        Configuration File Format 
# 
# **************************************************************************** 

AffinityPreference      No
AllocationStrategy      Round 
BufferCacheSize         256M
DataMigration           No      # SNMS Managed File Systems Only
Debug                   0x0 
FileLocks               No 
FsBlockSize             4K 
GlobalShareMode         No
GlobalSuperUser         Yes     # Set to Yes for SNMS Managed File Systems
InodeCacheSize          128K    # 800-1000 bytes each
IoTokens                Yes     # Data coherency model uses tokens
JournalSize             64M 
MaxLogs                 4 
MaxLogSize              16M 
OpHangLimitSecs         300     # Default is 180 secs
Quotas                  No 
QuotaHistoryDays        7
UnixDirectoryCreationModeOnWindows  0755
UnixFileCreationModeOnWindows       0644
UnixIdFabricationOnWindows          No
UnixNobodyGidOnWindows  60001
UnixNobodyUidOnWindows  60001
WindowsSecurity         Yes
SecurityModel           legacy
WindowsIdMapping        ldap
UseActiveDirectorySFU   Yes

[AutoAffinity NTSC]
Extension mov
Extension dpx

[AutoAffinity PALAud]
Extension mp3
Extension WAV

[NoAffinity]
Extension html
Extension txt

# **************************************************************************** 
# A disktype section for defining disk hardware parameters. 
# **************************************************************************** 
[DiskType MetaDrive] ##1+1 Raid 1 Mirrored Pair## 
Sectors    99999999      ## Sectors Per Disk From Command "cvlabel -l" ## 
SectorSize 512 

[DiskType JournalDrive] ##1+1 Raid 1 Mirrored Pair##  
Sectors    99999999      ## Sectors Per Disk From Command "cvlabel -l" ## 
SectorSize 512

[DiskType VideoDrive] ##8+1 Raid 5 LUN for Video##
Sectors    99999999      ## Sectors Per Disk From Command "cvlabel -l" ## 
SectorSize 512 

[DiskType AudioDrive] ##4+1 Raid 3 LUN for Audio##
Sectors    99999999      ## Sectors Per Disk From Command "cvlabel -l" ## 
SectorSize 512 

[DiskType DataDrive] ##4+1 Raid 5 LUN for Regular Data##
Sectors    99999999      ## Sectors Per Disk From Command "cvlabel -l" ## 
SectorSize 512 




# **************************************************************************** 
# A disk section for defining disks in the hardware configuration. 
# **************************************************************************** 

[Disk CvfsDisk0] 
Status UP 
Type MetaDrive

[Disk CvfsDisk1] 
Status UP 
Type JournalDrive 

[Disk CvfsDisk2] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk3] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk4] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk5] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk6] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk7] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk8] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk9] 
Status UP 
Type VideoDrive 

[Disk CvfsDisk10] 
Status UP 
Type AudioDrive 

[Disk CvfsDisk11] 
Status UP 
Type AudioDrive 

[Disk CvfsDisk12] 
Status UP 
Type AudioDrive 

[Disk CvfsDisk13] 
Status UP 
Type AudioDrive 

[Disk CvfsDisk14] 
Status UP 
Type DataDrive 

[Disk CvfsDisk15] 
Status UP 
Type DataDrive 

[Disk CvfsDisk16] 
Status UP 
Type DataDrive

[Disk CvfsDisk17] 
Status UP 
Type DataDrive 




# **************************************************************************** 
# A stripe section for defining stripe groups. 
# **************************************************************************** 

[StripeGroup MetaFiles]     
Status UP 
MetaData Yes 
Journal No
Exclusive Yes 
Read Enabled 
Write Enabled 
StripeBreadth 256K
MultiPathMethod Rotate 
Node CvfsDisk0 0 


[StripeGroup JournFiles]     
Status UP 
Journal Yes
MetaData No 
Exclusive Yes 
Read Enabled 
Write Enabled 
StripeBreadth 256K
MultiPathMethod Rotate 
Node CvfsDisk1 0 


[StripeGroup NTSCFiles]  
Status UP
Exclusive Yes           ##Exclusive StripeGroup for Video Files Only##
Affinity NTSC           ##8 character limit##
Read Enabled
Write Enabled
Alloc Enabled
StripeBreadth 688k      ## NTSC frame size
MultiPathMethod Rotate
Node CvfsDisk2 0 
Node CvfsDisk3 1 
Node CvfsDisk4 2 
Node CvfsDisk5 3


[StripeGroup PALFiles]  
Status UP
Exclusive Yes           ##Exclusive StripeGroup for Video Files Only##
Affinity PAL            ##8 character limit##
Read Enabled
Write Enabled
Alloc Enabled
StripeBreadth 816k      ## PAL frame size
Node CvfsDisk6 4 
Node CvfsDisk7 5 
Node CvfsDisk8 6 
Node CvfsDisk9 7 


## CCIR-601 525 Audio is read/written in 65536 byte blocks
[StripeGroup AudioFiles1]  
Status UP
Exclusive Yes           ##Exclusive StripeGroup for Audio File Only##
Affinity NTSCAud        ##8 character limit##
Read Enabled
Write Enabled
Alloc Enabled
StripeBreadth 64k       
MultiPathMethod Rotate
Node CvfsDisk10 0 
Node CvfsDisk11 1 


## CCIR-601 625 Audio is read/written in 61440 byte blocks
## We put 4 blocks per stripe so that it's divisible by 16k fs block size
[StripeGroup AudioFiles2]  
Status UP
Exclusive Yes           ##Exclusive StripeGroup for Audio File Only##
Affinity PALAud         ##8 character limit##
Read Enabled
Write Enabled
Alloc Enabled
StripeBreadth 240k
Node CvfsDisk12 2 
Node CvfsDisk13 3 


[StripeGroup RegularFiles]  
Status UP
Exclusive No            ##Non-Exclusive StripeGroup for all Files##
Read Enabled 
Write Enabled 
Alloc Enabled
StripeBreadth 256K
MultiPathMethod Rotate 
Node CvfsDisk14 0 
Node CvfsDisk15 1 
Node CvfsDisk16 2 
Node CvfsDisk17 3 

#
# End
#



FILES

/usr/cvfs/config/*.cfg
/usr/cvfs/data/<file_system_name>/config_history/*.cfg.<TIMESTAMP>

SEE ALSO

snfs_config(5), snfs.cfgx(5)