'\" t '\" See man(1) (e.g., on Solaris) about man page preprocessing .\" snfs.cfg.5: auto-generated, DO NOT EDIT .\" .\" Copyright 2009-2025. Quantum Corporation. All Rights Reserved. .\" StorNext is either a trademark or registered trademark of .\" Quantum Corporation in the US and/or other countries. .\" .\" Code start macro .de Cs .sp .ft C .in +0.3i .nf .. .\" Code end macro .de Ce .fi .in -0.3i .ft R .. .\" Not recommended message macro .de Nr \fINOTE\fR: Not intended for general use. Only use when recommended by Apple Support. .. .\" Option header definition (first argument bold, the rest space separated) .de Oh .sp .in -0.2i \(bu .ft B \\$1 .ft R \\$2 .in +0.2i .. .\" Entry definition (first argument underlined, the rest space separated) .de Ah .sp .in -0.2i \(bu .ft B \\$1 .ft R .in +0.2i .. .de Fs .RS .Cs .in 0i .. .de Fe .in 0.3i .Ce .RE .. .TH SNFS.CFG 5 "August 2025" "Xsan File System" .SH NAME snfs.cfg \- Xsan Volume Configuration File .SH SYNOPSIS This page describes the old Volume configuration file format, used prior to Xsan 4.0. .PP A volume name is associated to its configuration file by the file's prefix. For example, if the volume were named \fBprojecta\fR, then its configuration file would be .IR /Library/Preferences/Xsan/projecta.cfg . There may be multiple volumes simultaneously mounted, with an FSM program running for each active volume. Configuration files must reside on the same system as the FSM processes that use them. .SH DEPRECATED This format has been deprecated in favor of the cfgx format on all platforms except Windows - see .BR snfs.cfgx (5) for details on the new format. .SH SYNTAX Each configuration file has several section headers and section bodies. A section header is enclosed by square brackets as follows: .Cs [ Keyword Name ] .Ce .PP A section body is the non-bracketed lines of configuration between section headers. .PP Every configuration file begins with a \fBGlobal\fR section body; a \fBGlobal\fR section header is implied. In addition to the implicitly named \fBGlobal\fR section, other section-header keyword values are \fBAutoAffinity\fP, \fBNoAffinity\fP, \fBDiskType\fR, \fBDisk\fR and \fBStripeGroup\fR. Section-header keywords are case insensitive. .PP Section names consist of case-sensitive letters, numbers, underscores (_), and dashes (-). .PP Each line of a section body has the following syntax: .Cs Keyword Value .Ce .PP Section-body keyword names are section dependent as described below. .PP Section-body values can be a number, name or any combination of characters enclosed by double quotes (\(dq). A number can be in octal, decimal or hexadecimal. Octal numbers are represented by prefixing the number with \fB0\fR, and hexadecimal numbers are represented by prefixing the number with \fB0x\fR. .PP A suffix of \fBm\fR or \fBM\fR indicates a \fBmega\fR multiplier, which is 2^20 = 1,048,576. For example the value \fB3M\fR results in an integer value of 3,145,728. .PP Following is the list of case-insensitive multiplier suffixes: .Cs 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 .Ce .PP 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: .Cs Keyword ------- InodeExpandMin InodeExpandInc InodeExpandMax InodeStripeWidth PerfectFitSize StripeAlignSize StripeBreadth .Ce .PP Comments start anywhere a pound sign (\fB#\fR) occurs, and continue to the end of that line. The following are valid comment strings: .Cs # 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. .Ce .SH 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 \fBGlobal\fR 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 volume. .PP The remaining sections are \fBAutoAffinity\fP, \fBNoAffinity\fP, \fBDiskTypes\fR, \fBDisk\fR and \fBStripeGroup\fR. These may occur any number of times and in any order. .PP Each \fBAutoAffinity\fR section defines a mapping of extensions to the given \fBAffinity\fP. .PP Each \fBNoAffinity\fR section defines a mapping of extensions to no affinity, i.e. an affinity value of 0. .PP Each \fBDiskTypes\fR 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. .PP The \fBDisk\fR section describes individual disk devices that are configured in the volume. The name of the disk device must be placed in the volume header label using .BR cvlabel (8). This is how the disk devices become associated with an \fBXsan\fR disk name. .PP The \fBStripeGroup\fR section describes a group of \fBDisk\fR entities that comprise a storage pool. One or more storage pools describe the entire volume. Best performance is attained with a minimum of 2 storage pools per volume with one storage pool 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 storage pools is also recommended particularly if latency for file creation, removal and allocation of space is important. A storage pool is the smallest entity that can be manipulated by administration commands, such as .BR cvadmin (8). Even though disk devices may be brought up or down, this has the effect of upping or downing the entire storage pool. The \fBStripeGroup\fR can be either read or write disabled. The storage pool is still up, but one or more of the related group's disks are disabled. When a storage pool is write disabled, no further allocations are permitted on the group. .PP \fINOTE\fR: Several releases ago, there was a section called \fBMediaType\fR that defined \fBAffinity\fR names before they were used in a \fBStripeGroup\fR section. \fBAffinities\fR no longer need to be defined separately from the \fBStripeGroup\fR, and if upgrading from a volume that used the \fBMediaType\fR section, it must be removed or it will cause parser errors. .SH DEFAULT GLOBAL VALUES The following defaults, minimums, and maximums are allowed for modifiable global variables. \fINOTE:\fR 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. .PP .RS -0.5i .TS tab(:); l r r r. Variable Name:Default:Min:Max _ AffinityPreference:NO:NO:YES .T& l r r s l r r r. AllocationStrategy:Round:Round, Fill, Balance AllocSessionReservationSize:1024M:128M:1048576M BrlResyncTimeOut\(dg:20:0:60 BufferCacheSize:256M:32M:500G CaseInsensitive:NO:NO:YES .T& l r l s l r r r. CvRootDir\(dg:"/":valid dir with < 1024 chars Debug:0:0:0xFFFFFFFF DirWarp\(de:YES:NO:YES DisableRecycleBin:NO:NO:YES EnableSpotlight:NO:NO:YES EventFiles\(dg:YES:NO:YES .T& l r r s l r r r. EventFileDir\(dg:special:valid dir with < 1024 chars ExtentCountThreshold:49152:0:0x1FFFC00 FileLocks:NO:NO:YES ForcePerfectFit\(dg:NO:NO:YES FsCapacityThreshold:0:0:100 GlobalShareMode:NO:NO:YES GlobalSuperUser:NO:NO:YES .T& l l s s l r r r. HaFsType:HaUnmonitored (values in snfs_config(5)) InodeCacheSize:128K:4K:512K InodeDeleteMax:special:10:0xFFFFFFFF InodeExpandInc\(de:0:1:32767 InodeExpandMax\(de:0:1:32768 InodeExpandMin\(de:0:1:32768 InodeStripeWidth:4096M:0:1099511627776 IoTokens:YES:NO:YES JournalSize:256M:16M:512M MaintenanceMode:NO:NO:YES MaxLogs:4:1:1000 MaxLogSize:16M:1M:1073741824 NamedStreams:NO:NO:YES OpHangLimitSecs:180:0:0xFFFFFFFF PerfectFitSize:8:1:32768 Quotas:NO:NO:YES QuotaHistoryDays:7:0:3650 RemoteNotification\(dg:NO:NO:YES RenameTracking:NO:NO:YES ReservedSpace\(dg:YES:NO:YES MetadataArchive\(dg:NO:NO:YES .T& l r l s l r r r. MetadataArchiveDir\(dg:special:valid dir with < 1024 chars MetadataArchiveSearch\(dg:YES:NO:YES MetadataArchiveCache\(dg:2GB:1GB:500GB MetadataArchiveDays\(dg:0:0:366 SecurityModel:legacy:legacy:legacy, acl, unixpermbits StripeAlignSize:-1:-1:0xFFFFFFFF TrimOnClose\(dg:0:0:(2^64)-1 UnixDirectoryCreationModeOnWindows:0755:0:0777 UnixFileCreationModeOnWindows:0644:0:0777 UnixIdMapping:none::none, algorithmic, winbind UnixIdFabricationOnWindows:YES: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 _ .TE .RE .PP \(dg .Nr .PP \(de \fINOTE:\fR Deprecated and will no longer be valid in a future release .SH AUTOAFFINITY SECTION Following is the format for a \fBAutoAffinity\fR section: .Cs \fB[AutoAffinity ]\fR .sp \fBExtension\fR [ One Extension per extension in this mapping ] .Ce .SH NOAFFINITY SECTION Following is the format for a \fBNoAffinity\fR section: .Cs \fB[NoAffinity]\fR .sp \fBExtension\fR [ One Extension per extension in this mapping ] .Ce .SH DISKTYPE SECTION Following is the format for a \fBDiskType\fR section: .Cs \fB[DiskType ]\fR .sp \fBSectors\fR .sp \fBSectorSize\fR .Ce .SH DISK SECTION The \fBDisk\fR section syntax is as follows: .Cs \fB[Disk ]\fR .sp \fBStatus\fR .sp \fBType\fR .sp .Ce .SH STRIPEGROUP SECTION The \fBStripeGroup\fR section format is as follows: .Cs \fB[StripeGroup ]\fR .sp \fBStatus\fR .sp \fBExclusive\fR .sp \fBMetadata\fR .sp \fBJournal\fR .sp \fBAffinity\fR [ Zero or more affinity entries are allowed ] .sp \fBRead\fR .sp \fBWrite\fR .sp \fBAlloc\fR .sp \fBStripeBreadth\fR .sp \fBMultiPathMethod\fR .sp \fBNode\fR [ One Node per disk in storage pool ] .Ce .PP .Ah Status If \fBUp\fR, the storage pool is available, if \fBDown\fR it is not. .Ah StripeBreadth Describes the number of volume 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 volume blocks. When specified with a multiplier, it is bytes. .Ah Metadata If \fBYes\fR, this storage pool contains metadata. If \fBNo\fR, it does not. .Ah Journal If \fBYes\fR, this storage pool contains the journal. If \fBNo\fR, it does not. Only one storage pool may contain a journal per file system. .Ah Exclusive When the \fBExclusive\fR variable is set to \fBYES\fR on a storage pool that has \fBMetadata\fR or \fBJournal\fR set to \fRYES\fR, no userdata may reside on that storage pool. .PP When the \fBExclusive\fR variable is set to \fBYES\fR on a storage pool that does not have either \fBMetadata\fR or \fBJournal\fR set to \fBYES\fR, and does have \fBAffinity\fR values declared, only the \fBAffinities\fR declared in its \fBStripeGroup\fR section are allowed to reside on this storage pool. This may be preferable for high-bandwidth applications. Because \fBExclusive\fR is used in two ways, a storage pool cannot have both exclusive \fBAffinity\fR declarations and metadata. .PP The \fBExclusive\fR 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) storage pool is two fields (a frame), or 43, 16k volume blocks. However, a 625 line (PAL broadcast) storage pool uses 417,792 bytes per field, and the optimal stripe breadth is 51, 16k volume blocks per disk. In order for allocation to work in a mixed mode environment, it is necessary to have one storage pool set up for 525 (NTSC) and another set up for 625 (PAL). See the configuration file example below to see two storage pools, each configured optimally for NTSC and PAL modes. .Ah Affinity In conjunction with the \fBExclusive\fR variable, the \fBAffinity\fR variable helps the FSM determine what type of allocation may occur on a storage pool. When \fBExclusive\fR is \fBYES\fR, only files with matching \fBAffinity\fR values can be allocated. When \fBExclusive\fR is \fBNO\fR, it is possible that other file types would be allocated on the storage pool. This could have fragmenting effects over time and eventually cause high-bandwidth performance problems. It is recommended that storage pools are developed to be specialized for each file type used. .PP The \fBAffinity\fR value can be any string of 8 characters or less. .Ah Rtios The \fBRtios\fR 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 \fBQuality of Service (QoS)\fR API. If both \fBRtios\fR and \fBRtmb\fR are set to \fB0\fR (the default value), \fBQoS\fR is disabled. If both \fBRtios\fR and \fBRtmb\fR are defined, the smaller value (after \fBRtmb\fR is converted to IOs/s internally) is used. This value should be obtained by real measurement using IO benchmark tool. .Ah RtiosReserve The \fBRtiosReserve\fR 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 \fBQoS\fR API. This prevents non-realtime clients from IO starvation. If both \fBRtiosReserve\fR and \fBRtmbReserve\fR are set to \fB0\fR (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 (\fBRtmbReserve\fR is converted to IOs/s internally) is used. This value should not be greater than \fBRtios\fR or \fBRtmb\fR (after being converted to IOs/s). .Ah Rtmb The \fBRtmb\fR variable defines the maximum number of MBs per second available to real-time applications for the stripe group using the \fBQoS\fR 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 \fBRtios\fR and \fBRtmb\fR are set to \fB0\fR (the default value), \fBQoS\fR is disabled. If both are defined, the smaller value (\fBRtmbReserve\fR 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 \fBRtmb\fR 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. .Ah RtmbReserve The \fBRtmbReserve\fR variable defines the minimum number of MBs per second reserved for non-realtime applications when realtime operations have been enabled using the \fBQoS\fR 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 \fBRtiosReserve\fR and \fBRtmbReserve\fR are set to \fB0\fR (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 (\fBRtmbReserve\fR is converted to IOs/s internally) is used. This value should not be greater than the value of \fBRtmb\fR. .Ah RtTokenTimeout The \fBRtTokenTimeout\fR variable defines the number of seconds for the \fBFSM\fR server to wait for clients to respond to a \fBQoS\fR 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. .PP .SH EXAMPLE CONFIGURATION FILE The following is an example of a fairly complex Xsan volume that supports multiple broadcast video/audio file formats, seven storage pools and eighteen disk drives.This volume is set up to support both 525 and 625 real-time broadcast formats. .PP .Fs # # Xsan Volume 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 (\(dq). # # 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 DisableRecycleBin No 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 256M 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 # .Fe .SH FILES .I /Library/Preferences/Xsan/*.cfg .br .IR /Library/Logs/Xsan/data/ /config_history/*.cfg. .SH "SEE ALSO" .BR snfs_config (5), .BR snfs.cfgx (5)