linux XFS is a high performance journaling filesystem which originated on the SGI IRIX platform It is completely multi threaded can variable block sizes is extent based and makes extensive use of The SGI XFS Filesystem support large files and large filesystems extended attributes SPDX License Identifier GPL 2 0

Answer:
.. SPDX-License-Identifier: GPL-2.0

======================
The SGI XFS Filesystem
======================

XFS is a high performance journaling filesystem which originated
on the SGI IRIX platform.  It is completely multi-threaded, can
support large files and large filesystems, extended attributes,
variable block sizes, is extent based, and makes extensive use of
Btrees (directories, extents, free space) to aid both performance
and scalability.

Refer to the documentation at https://xfs.wiki.kernel.org/
for further details.  This implementation is on-disk compatible
with the IRIX version of XFS.

Mount Options
=============

When mounting an XFS filesystem, the following options are accepted.

  allocsize=size
	Sets the buffered I/O end-of-file preallocation size when
	doing delayed allocation writeout (default size is 64KiB).
	Valid values for this option are page size (typically 4KiB)
	through to 1GiB, inclusive, in power-of-2 increments.

	The default behaviour is for dynamic end-of-file
	preallocation size, which uses a set of heuristics to
	optimise the preallocation size based on the current
	allocation patterns within the file and the access patterns
	to the file. Specifying a fixed ``allocsize`` value turns off
	the dynamic behaviour.

  attr2 or noattr2
	The options enable/disable an "opportunistic" improvement to
	be made in the way inline extended attributes are stored
	on-disk.  When the new form is used for the first time when
	``attr2`` is selected (either when setting or removing extended
	attributes) the on-disk superblock feature bit field will be
	updated to reflect this format being in use.

	The default behaviour is determined by the on-disk feature
	bit indicating that ``attr2`` behaviour is active. If either
	mount option is set, then that becomes the new default used
	by the filesystem.

	CRC enabled filesystems always use the ``attr2`` format, and so
	will reject the ``noattr2`` mount option if it is set.

  discard or nodiscard (default)
	Enable/disable the issuing of commands to let the block
	device reclaim space freed by the filesystem.  This is
	useful for SSD devices, thinly provisioned LUNs and virtual
	machine images, but may have a performance impact.

	Note: It is currently recommended that you use the ``fstrim``
	application to ``discard`` unused blocks rather than the ``discard``
	mount option because the performance impact of this option
	is quite severe.

  grpid/bsdgroups or nogrpid/sysvgroups (default)
	These options define what group ID a newly created file
	gets.  When ``grpid`` is set, it takes the group ID of the
	directory in which it is created; otherwise it takes the
	``fsgid`` of the current process, unless the directory has the
	``setgid`` bit set, in which case it takes the ``gid`` from the
	parent directory, and also gets the ``setgid`` bit set if it is
	a directory itself.

  filestreams
	Make the data allocator use the filestreams allocation mode
	across the entire filesystem rather than just on directories
	configured to use it.

  ikeep or noikeep (default)
	When ``ikeep`` is specified, XFS does not delete empty inode
	clusters and keeps them around on disk.  When ``noikeep`` is
	specified, empty inode clusters are returned to the free
	space pool.

  inode32 or inode64 (default)
	When ``inode32`` is specified, it indicates that XFS limits
	inode creation to locations which will not result in inode
	numbers with more than 32 bits of significance.

	When ``inode64`` is specified, it indicates that XFS is allowed
	to create inodes at any location in the filesystem,
	including those which will result in inode numbers occupying
	more than 32 bits of significance.

	``inode32`` is provided for backwards compatibility with older
	systems and applications, since 64 bits inode numbers might
	cause problems for some applications that cannot handle
	large inode numbers.  If applications are in use which do
	not handle inode numbers bigger than 32 bits, the ``inode32``
	option should be specified.

  largeio or nolargeio (default)
	If ``nolargeio`` is specified, the optimal I/O reported in
	``st_blksize`` by **stat(2)** will be as small as possible to allow
	user applications to avoid inefficient read/modify/write
	I/O.  This is typically the page size of the machine, as
	this is the granularity of the page cache.

	If ``largeio`` is specified, a filesystem that was created with a
	``swidth`` specified will return the ``swidth`` value (in bytes)
	in ``st_blksize``. If the filesystem does not have a ``swidth``
	specified but does specify an ``allocsize`` then ``allocsize``
	(in bytes) will be returned instead. Otherwise the behaviour
	is the same as if ``nolargeio`` was specified.

  logbufs=value
	Set the number of in-memory log buffers.  Valid numbers
	range from 2-8 inclusive.

	The default value is 8 buffers.

	If the memory cost of 8 log buffers is too high on small
	systems, then it may be reduced at some cost to performance
	on metadata intensive workloads. The ``logbsize`` option below
	controls the size of each buffer and so is also relevant to
	this case.

  logbsize=value
	Set the size of each in-memory log buffer.  The size may be
	specified in bytes, or in kilobytes with a "k" suffix.
	Valid sizes for version 1 and version 2 logs are 16384 (16k)
	and 32768 (32k).  Valid sizes for version 2 logs also
	include 65536 (64k), 131072 (128k) and 262144 (256k). The
	logbsize must be an integer multiple of the log
	stripe unit configured at **mkfs(8)** time.

	The default value for version 1 logs is 32768, while the
	default value for version 2 logs is MAX(32768, log_sunit).

  logdev=device and rtdev=device
	Use an external log (metadata journal) and/or real-time device.
	An XFS filesystem has up to three parts: a data section, a log
	section, and a real-time section.  The real-time section is
	optional, and the log section can be separate from the data
	section or contained within it.

  noalign
	Data allocations will not be aligned at stripe unit
	boundaries. This is only relevant to filesystems created
	with non-zero data alignment parameters (``sunit``, ``swidth``) by
	**mkfs(8)**.

  norecovery
	The filesystem will be mounted without running log recovery.
	If the filesystem was not cleanly unmounted, it is likely to
	be inconsistent when mounted in ``norecovery`` mode.
	Some files or directories may not be accessible because of this.
	Filesystems mounted ``norecovery`` must be mounted read-only or
	the mount will fail.

  nouuid
	Don't check for double mounted file systems using the file
	system ``uuid``.  This is useful to mount LVM snapshot volumes,
	and often used in combination with ``norecovery`` for mounting
	read-only snapshots.

  noquota
	Forcibly turns off all quota accounting and enforcement
	within the filesystem.

  uquota/usrquota/uqnoenforce/quota
	User disk quota accounting enabled, and limits (optionally)
	enforced.  Refer to **xfs_quota(8)** for further details.

  gquota/grpquota/gqnoenforce
	Group disk quota accounting enabled and limits (optionally)
	enforced.  Refer to **xfs_quota(8)** for further details.

  pquota/prjquota/pqnoenforce
	Project disk quota accounting enabled and limits (optionally)
	enforced.  Refer to **xfs_quota(8)** for further details.

  sunit=value and swidth=value
	Used to specify the stripe unit and width for a RAID device
	or a stripe volume.  "value" must be specified in 512-byte
	block units. These options are only relevant to filesystems
	that were created with non-zero data alignment parameters.

	The ``sunit`` and ``swidth`` parameters specified must be compatible
	with the existing filesystem alignment characteristics.  In
	general, that means the only valid changes to ``sunit`` are
	increasing it by a power-of-2 multiple. Valid ``swidth`` values
	are any integer multiple of a valid ``sunit`` value.

	Typically the only time these mount options are necessary if
	after an underlying RAID device has had its geometry
	modified, such as adding a new disk to a RAID5 lun and
	reshaping it.

  swalloc
	Data allocations will be rounded up to stripe width boundaries
	when the current end of file is being extended and the file
	size is larger than the stripe width size.

  wsync
	When specified, all filesystem namespace operations are
	executed synchronously. This ensures that when the namespace
	operation (create, unlink, etc) completes, the change to the
	namespace is on stable storage. This is useful in HA setups
	where failover must not result in clients seeing
	inconsistent namespace presentation during or after a
	failover event.

Deprecation of V4 Format
========================

The V4 filesystem format lacks certain features that are supported by
the V5 format, such as metadata checksumming, strengthened metadata
verification, and the ability to store timestamps past the year 2038.
Because of this, the V4 format is deprecated.  All users should upgrade
by backing up their files, reformatting, and restoring from the backup.

Administrators and users can detect a V4 filesystem by running xfs_info
against a filesystem mountpoint and checking for a string containing
"crc=".  If no such string is found, please upgrade xfsprogs to the
latest version and try again.

The deprecation will take place in two parts.  Support for mounting V4
filesystems can now be disabled at kernel build time via Kconfig option.
The option will default to yes until September 2025, at which time it
will be changed to default to no.  In September 2030, support will be
removed from the codebase entirely.

Note: Distributors may choose to withdraw V4 format support earlier than
the dates listed above.

Deprecated Mount Options
========================

============================    ================
  Name				Removal Schedule
============================    ================
Mounting with V4 filesystem     September 2030
Mounting ascii-ci filesystem    September 2030
ikeep/noikeep			September 2025
attr2/noattr2			September 2025
============================    ================

Removed Mount Options
=====================

===========================     =======
  Name				Removed
===========================	=======
  delaylog/nodelaylog		v4.0
  ihashsize			v4.0
  irixsgid			v4.0
  osyncisdsync/osyncisosync	v4.0
  barrier			v4.19
  nobarrier			v4.19
===========================     =======

sysctls
=======

The following sysctls are available for the XFS filesystem:

  fs.xfs.stats_clear		(Min: 0  Default: 0  Max: 1)
	Setting this to "1" clears accumulated XFS statistics
	in /proc/fs/xfs/stat.  It then immediately resets to "0".

  fs.xfs.xfssyncd_centisecs	(Min: 100  Default: 3000  Max: 720000)
	The interval at which the filesystem flushes metadata
	out to disk and runs internal cache cleanup routines.

  fs.xfs.filestream_centisecs	(Min: 1  Default: 3000  Max: 360000)
	The interval at which the filesystem ages filestreams cache
	references and returns timed-out AGs back to the free stream
	pool.

  fs.xfs.speculative_prealloc_lifetime
	(Units: seconds   Min: 1  Default: 300  Max: 86400)
	The interval at which the background scanning for inodes
	with unused speculative preallocation runs. The scan
	removes unused preallocation from clean inodes and releases
	the unused space back to the free pool.

  fs.xfs.speculative_cow_prealloc_lifetime
	This is an alias for speculative_prealloc_lifetime.

  fs.xfs.error_level		(Min: 0  Default: 3  Max: 11)
	A volume knob for error reporting when internal errors occur.
	This will generate detailed messages & backtraces for filesystem
	shutdowns, for example.  Current threshold values are:

		XFS_ERRLEVEL_OFF:       0
		XFS_ERRLEVEL_LOW:       1
		XFS_ERRLEVEL_HIGH:      5

  fs.xfs.panic_mask		(Min: 0  Default: 0  Max: 511)
	Causes certain error conditions to call BUG(). Value is a bitmask;
	OR together the tags which represent errors which should cause panics:

		XFS_NO_PTAG                     0
		XFS_PTAG_IFLUSH                 0x00000001
		XFS_PTAG_LOGRES                 0x00000002
		XFS_PTAG_AILDELETE              0x00000004
		XFS_PTAG_ERROR_REPORT           0x00000008
		XFS_PTAG_SHUTDOWN_CORRUPT       0x00000010
		XFS_PTAG_SHUTDOWN_IOERROR       0x00000020
		XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040
		XFS_PTAG_FSBLOCK_ZERO           0x00000080
		XFS_PTAG_VERIFIER_ERROR         0x00000100

	This option is intended for debugging only.

  fs.xfs.irix_symlink_mode	(Min: 0  Default: 0  Max: 1)
	Controls whether symlinks are created with mode 0777 (default)
	or whether their mode is affected by the umask (irix mode).

  fs.xfs.irix_sgid_inherit	(Min: 0  Default: 0  Max: 1)
	Controls files created in SGID directories.
	If the group ID of the new file does not match the effective group
	ID or one of the supplementary group IDs of the parent dir, the
	ISGID bit is cleared if the irix_sgid_inherit compatibility sysctl
	is set.

  fs.xfs.inherit_sync		(Min: 0  Default: 1  Max: 1)
	Setting this to "1" will cause the "sync" flag set
	by the **xfs_io(8)** chattr command on a directory to be
	inherited by files in that directory.

  fs.xfs.inherit_nodump		(Min: 0  Default: 1  Max: 1)
	Setting this to "1" will cause the "nodump" flag set
	by the **xfs_io(8)** chattr command on a directory to be
	inherited by files in that directory.

  fs.xfs.inherit_noatime	(Min: 0  Default: 1  Max: 1)
	Setting this to "1" will cause the "noatime" flag set
	by the **xfs_io(8)** chattr command on a directory to be
	inherited by files in that directory.

  fs.xfs.inherit_nosymlinks	(Min: 0  Default: 1  Max: 1)
	Setting this to "1" will cause the "nosymlinks" flag set
	by the **xfs_io(8)** chattr command on a directory to be
	inherited by files in that directory.

  fs.xfs.inherit_nodefrag	(Min: 0  Default: 1  Max: 1)
	Setting this to "1" will cause the "nodefrag" flag set
	by the **xfs_io(8)** chattr command on a directory to be
	inherited by files in that directory.

  fs.xfs.rotorstep		(Min: 1  Default: 1  Max: 256)
	In "inode32" allocation mode, this option determines how many
	files the allocator attempts to allocate in the same allocation
	group before moving to the next allocation group.  The intent
	is to control the rate at which the allocator moves between
	allocation groups when allocating extents for new files.

Deprecated Sysctls
==================

===========================================     ================
  Name                                          Removal Schedule
===========================================     ================
fs.xfs.irix_sgid_inherit                        September 2025
fs.xfs.irix_symlink_mode                        September 2025
fs.xfs.speculative_cow_prealloc_lifetime        September 2025
===========================================     ================

Removed Sysctls
===============

=============================	=======
  Name				Removed
=============================	=======
  fs.xfs.xfsbufd_centisec	v4.0
  fs.xfs.age_buffer_centisecs	v4.0
=============================	=======

Error handling
==============

XFS can act differently according to the type of error found during its
operation. The implementation introduces the following concepts to the error
handler:

 -failure speed:
	Defines how fast XFS should propagate an error upwards when a specific
	error is found during the filesystem operation. It can propagate
	immediately, after a defined number of retries, after a set time period,
	or simply retry forever.

 -error classes:
	Specifies the subsystem the error configuration will apply to, such as
	metadata IO or memory allocation. Different subsystems will have
	different error handlers for which behaviour can be configured.

 -error handlers:
	Defines the behavior for a specific error.

The filesystem behavior during an error can be set via ``sysfs`` files. Each
error handler works independently - the first condition met by an error handler
for a specific class will cause the error to be propagated rather than reset and
retried.

The action taken by the filesystem when the error is propagated is context
dependent - it may cause a shut down in the case of an unrecoverable error,
it may be reported back to userspace, or it may even be ignored because
there's nothing useful we can with the error or anyone we can report it to (e.g.
during unmount).

The configuration files are organized into the following hierarchy for each
mounted filesystem:

  /sys/fs/xfs/<dev>/error/<class>/<error>/

Where:
  <dev>
	The short device name of the mounted filesystem. This is the same device
	name that shows up in XFS kernel error messages as "XFS(<dev>): ..."

  <class>
	The subsystem the error configuration belongs to. As of 4.9, the defined
	classes are:

		- "metadata": applies metadata buffer write IO

  <error>
	The individual error handler configurations.

Each filesystem has "global" error configuration options defined in their top
level directory:

  /sys/fs/xfs/<dev>/error/

  fail_at_unmount		(Min:  0  Default:  1  Max: 1)
	Defines the filesystem error behavior at unmount time.

	If set to a value of 1, XFS will override all other error configurations
	during unmount and replace them with "immediate fail" characteristics.
	i.e. no retries, no retry timeout. This will always allow unmount to
	succeed when there are persistent errors present.

	If set to 0, the configured retry behaviour will continue until all
	retries and/or timeouts have been exhausted. This will delay unmount
	completion when there are persistent errors, and it may prevent the
	filesystem from ever unmounting fully in the case of "retry forever"
	handler configurations.

	Note: there is no guarantee that fail_at_unmount can be set while an
	unmount is in progress. It is possible that the ``sysfs`` entries are
	removed by the unmounting filesystem before a "retry forever" error
	handler configuration causes unmount to hang, and hence the filesystem
	must be configured appropriately before unmount begins to prevent
	unmount hangs.

Each filesystem has specific error class handlers that define the error
propagation behaviour for specific errors. There is also a "default" error
handler defined, which defines the behaviour for all errors that don't have
specific handlers defined. Where multiple retry constraints are configured for
a single error, the first retry configuration that expires will cause the error
to be propagated. The handler configurations are found in the directory:

  /sys/fs/xfs/<dev>/error/<class>/<error>/

  max_retries			(Min: -1  Default: Varies  Max: INTMAX)
	Defines the allowed number of retries of a specific error before
	the filesystem will propagate the error. The retry count for a given
	error context (e.g. a specific metadata buffer) is reset every time
	there is a successful completion of the operation.

	Setting the value to "-1" will cause XFS to retry forever for this
	specific error.

	Setting the value to "0" will cause XFS to fail immediately when the
	specific error is reported.

	Setting the value to "N" (where 0 < N < Max) will make XFS retry the
	operation "N" times before propagating the error.

  retry_timeout_seconds		(Min:  -1  Default:  Varies  Max: 1 day)
	Define the amount of time (in seconds) that the filesystem is
	allowed to retry its operations when the specific error is
	found.

	Setting the value to "-1" will allow XFS to retry forever for this
	specific error.

	Setting the value to "0" will cause XFS to fail immediately when the
	specific error is reported.

	Setting the value to "N" (where 0 < N < Max) will allow XFS to retry the
	operation for up to "N" seconds before propagating the error.

**Note:** The default behaviour for a specific error handler is dependent on both
the class and error context. For example, the default values for
"metadata/ENODEV" are "0" rather than "-1" so that this error handler defaults
to "fail immediately" behaviour. This is done because ENODEV is a fatal,
unrecoverable error no matter how many times the metadata IO is retried.

Workqueue Concurrency
=====================

XFS uses kernel workqueues to parallelize metadata update processes.  This
enables it to take advantage of storage hardware that can service many IO
operations simultaneously.  This interface exposes internal implementation
details of XFS, and as such is explicitly not part of any userspace API/ABI
guarantee the kernel may give userspace.  These are undocumented features of
the generic workqueue implementation XFS uses for concurrency, and they are
provided here purely for diagnostic and tuning purposes and may change at any
time in the future.

The control knobs for a filesystem's workqueues are organized by task at hand
and the short name of the data device.  They all can be found in:

  /sys/bus/workqueue/devices/${task}!${device}

================  ===========
  Task            Description
================  ===========
  xfs_iwalk-$pid  Inode scans of the entire filesystem. Currently limited to
                  mount time quotacheck.
  xfs-gc          Background garbage collection of disk space that have been
                  speculatively allocated beyond EOF or for staging copy on
                  write operations.
================  ===========

For example, the knobs for the quotacheck workqueue for /dev/nvme0n1 would be
found in /sys/bus/workqueue/devices/xfs_iwalk-1111!nvme0n1/.

The interesting knobs for XFS workqueues are as follows:

============     ===========
  Knob           Description
============     ===========
  max_active     Maximum number of background threads that can be started to
                 run the work.
  cpumask        CPUs upon which the threads are allowed to run.
  nice           Relative priority of scheduling the threads.  These are the
                 same nice levels that can be applied to userspace processes.
============     ===========

SPDX License Identifier  GPL 2 0                         The SGI XFS Filesystem                         XFS is a high performance journaling filesystem which originated on the SGI IRIX platform   It is completely multi threaded  can support large files and large filesystems  extended attributes  variable block sizes  is extent based  and makes extensive use of Btrees  directories  extents  free space  to aid both performance and scalability   Refer to the documentation at https   xfs wiki kernel org  for further details   This implementation is on disk compatible with the IRIX version of XFS    Mount Options                When mounting an XFS filesystem  the following options are accepted     allocsize size  Sets the buffered I O end of file preallocation size when  doing delayed allocation writeout  default size is 64KiB    Valid values for this option are page size  typically 4KiB   through to 1GiB  inclusive  in power of 2 increments    The default behaviour is for dynamic end of file  preallocation size  which uses a set of heuristics to  optimise the preallocation size based on the current  allocation patterns within the file and the access patterns  to the file  Specifying a fixed   allocsize   value turns off  the dynamic behaviour     attr2 or noattr2  The options enable disable an  opportunistic  improvement to  be made in the way inline extended attributes are stored  on disk   When the new form is used for the first time when    attr2   is selected  either when setting or removing extended  attributes  the on disk superblock feature bit field will be  updated to reflect this format being in use    The default behaviour is determined by the on disk feature  bit indicating that   attr2   behaviour is active  If either  mount option is set  then that becomes the new default used  by the filesystem    CRC enabled filesystems always use the   attr2   format  and so  will reject the   noattr2   mount option if it is set     discard or nodiscard  default   Enable disable the issuing of commands to let the block  device reclaim space freed by the filesystem   This is  useful for SSD devices  thinly provisioned LUNs and virtual  machine images  but may have a performance impact    Note  It is currently recommended that you use the   fstrim    application to   discard   unused blocks rather than the   discard    mount option because the performance impact of this option  is quite severe     grpid bsdgroups or nogrpid sysvgroups  default   These options define what group ID a newly created file  gets   When   grpid   is set  it takes the group ID of the  directory in which it is created  otherwise it takes the    fsgid   of the current process  unless the directory has the    setgid   bit set  in which case it takes the   gid   from the  parent directory  and also gets the   setgid   bit set if it is  a directory itself     filestreams  Make the data allocator use the filestreams allocation mode  across the entire filesystem rather than just on directories  configured to use it     ikeep or noikeep  default   When   ikeep   is specified  XFS does not delete empty inode  clusters and keeps them around on disk   When   noikeep   is  specified  empty inode clusters are returned to the free  space pool     inode32 or inode64  default   When   inode32   is specified  it indicates that XFS limits  inode creation to locations which will not result in inode  numbers with more than 32 bits of significance    When   inode64   is specified  it indicates that XFS is allowed  to create inodes at any location in the filesystem   including those which will result in inode numbers occupying  more than 32 bits of significance      inode32   is provided for backwards compatibility with older  systems and applications  since 64 bits inode numbers might  cause problems for some applications that cannot handle  large inode numbers   If applications are in use which do  not handle inode numbers bigger than 32 bits  the   inode32    option should be specified     largeio or nolargeio  default   If   nolargeio   is specified  the optimal I O reported in    st blksize   by   stat 2    will be as small as possible to allow  user applications to avoid inefficient read modify write  I O   This is typically the page size of the machine  as  this is the granularity of the page cache    If   largeio   is specified  a filesystem that was created with a    swidth   specified will return the   swidth   value  in bytes   in   st blksize    If the filesystem does not have a   swidth    specified but does specify an   allocsize   then   allocsize     in bytes  will be returned instead  Otherwise the behaviour  is the same as if   nolargeio   was specified     logbufs value  Set the number of in memory log buffers   Valid numbers  range from 2 8 inclusive    The default value is 8 buffers    If the memory cost of 8 log buffers is too high on small  systems  then it may be reduced at some cost to performance  on metadata intensive workloads  The   logbsize   option below  controls the size of each buffer and so is also relevant to  this case     logbsize value  Set the size of each in memory log buffer   The size may be  specified in bytes  or in kilobytes with a  k  suffix   Valid sizes for version 1 and version 2 logs are 16384  16k   and 32768  32k    Valid sizes for version 2 logs also  include 65536  64k   131072  128k  and 262144  256k   The  logbsize must be an integer multiple of the log  stripe unit configured at   mkfs 8    time    The default value for version 1 logs is 32768  while the  default value for version 2 logs is MAX 32768  log sunit      logdev device and rtdev device  Use an external log  metadata journal  and or real time device   An XFS filesystem has up to three parts  a data section  a log  section  and a real time section   The real time section is  optional  and the log section can be separate from the data  section or contained within it     noalign  Data allocations will not be aligned at stripe unit  boundaries  This is only relevant to filesystems created  with non zero data alignment parameters    sunit      swidth    by    mkfs 8        norecovery  The filesystem will be mounted without running log recovery   If the filesystem was not cleanly unmounted  it is likely to  be inconsistent when mounted in   norecovery   mode   Some files or directories may not be accessible because of this   Filesystems mounted   norecovery   must be mounted read only or  the mount will fail     nouuid  Don t check for double mounted file systems using the file  system   uuid     This is useful to mount LVM snapshot volumes   and often used in combination with   norecovery   for mounting  read only snapshots     noquota  Forcibly turns off all quota accounting and enforcement  within the filesystem     uquota usrquota uqnoenforce quota  User disk quota accounting enabled  and limits  optionally   enforced   Refer to   xfs quota 8    for further details     gquota grpquota gqnoenforce  Group disk quota accounting enabled and limits  optionally   enforced   Refer to   xfs quota 8    for further details     pquota prjquota pqnoenforce  Project disk quota accounting enabled and limits  optionally   enforced   Refer to   xfs quota 8    for further details     sunit value and swidth value  Used to specify the stripe unit and width for a RAID device  or a stripe volume    value  must be specified in 512 byte  block units  These options are only relevant to filesystems  that were created with non zero data alignment parameters    The   sunit   and   swidth   parameters specified must be compatible  with the existing filesystem alignment characteristics   In  general  that means the only valid changes to   sunit   are  increasing it by a power of 2 multiple  Valid   swidth   values  are any integer multiple of a valid   sunit   value    Typically the only time these mount options are necessary if  after an underlying RAID device has had its geometry  modified  such as adding a new disk to a RAID5 lun and  reshaping it     swalloc  Data allocations will be rounded up to stripe width boundaries  when the current end of file is being extended and the file  size is larger than the stripe width size     wsync  When specified  all filesystem namespace operations are  executed synchronously  This ensures that when the namespace  operation  create  unlink  etc  completes  the change to the  namespace is on stable storage  This is useful in HA setups  where failover must not result in clients seeing  inconsistent namespace presentation during or after a  failover event   Deprecation of V4 Format                           The V4 filesystem format lacks certain features that are supported by the V5 format  such as metadata checksumming  strengthened metadata verification  and the ability to store timestamps past the year 2038  Because of this  the V4 format is deprecated   All users should upgrade by backing up their files  reformatting  and restoring from the backup   Administrators and users can detect a V4 filesystem by running xfs info against a filesystem mountpoint and checking for a string containing  crc     If no such string is found  please upgrade xfsprogs to the latest version and try again   The deprecation will take place in two parts   Support for mounting V4 filesystems can now be disabled at kernel build time via Kconfig option  The option will default to yes until September 2025  at which time it will be changed to default to no   In September 2030  support will be removed from the codebase entirely   Note  Distributors may choose to withdraw V4 format support earlier than the dates listed above   Deprecated Mount Options                                                                              Name    Removal Schedule                                                  Mounting with V4 filesystem     September 2030 Mounting ascii ci filesystem    September 2030 ikeep noikeep   September 2025 attr2 noattr2   September 2025                                                    Removed Mount Options                                                                  Name    Removed                                       delaylog nodelaylog  v4 0   ihashsize   v4 0   irixsgid   v4 0   osyncisdsync osyncisosync v4 0   barrier   v4 19   nobarrier   v4 19                                          sysctls          The following sysctls are available for the XFS filesystem     fs xfs stats clear   Min  0  Default  0  Max  1   Setting this to  1  clears accumulated XFS statistics  in  proc fs xfs stat   It then immediately resets to  0      fs xfs xfssyncd centisecs  Min  100  Default  3000  Max  720000   The interval at which the filesystem flushes metadata  out to disk and runs internal cache cleanup routines     fs xfs filestream centisecs  Min  1  Default  3000  Max  360000   The interval at which the filesystem ages filestreams cache  references and returns timed out AGs back to the free stream  pool     fs xfs speculative prealloc lifetime   Units  seconds   Min  1  Default  300  Max  86400   The interval at which the background scanning for inodes  with unused speculative preallocation runs  The scan  removes unused preallocation from clean inodes and releases  the unused space back to the free pool     fs xfs speculative cow prealloc lifetime  This is an alias for speculative prealloc lifetime     fs xfs error level   Min  0  Default  3  Max  11   A volume knob for error reporting when internal errors occur   This will generate detailed messages   backtraces for filesystem  shutdowns  for example   Current threshold values are     XFS ERRLEVEL OFF        0   XFS ERRLEVEL LOW        1   XFS ERRLEVEL HIGH       5    fs xfs panic mask   Min  0  Default  0  Max  511   Causes certain error conditions to call BUG    Value is a bitmask   OR together the tags which represent errors which should cause panics     XFS NO PTAG                     0   XFS PTAG IFLUSH                 0x00000001   XFS PTAG LOGRES                 0x00000002   XFS PTAG AILDELETE              0x00000004   XFS PTAG ERROR REPORT           0x00000008   XFS PTAG SHUTDOWN CORRUPT       0x00000010   XFS PTAG SHUTDOWN IOERROR       0x00000020   XFS PTAG SHUTDOWN LOGERROR      0x00000040   XFS PTAG FSBLOCK ZERO           0x00000080   XFS PTAG VERIFIER ERROR         0x00000100   This option is intended for debugging only     fs xfs irix symlink mode  Min  0  Default  0  Max  1   Controls whether symlinks are created with mode 0777  default   or whether their mode is affected by the umask  irix mode      fs xfs irix sgid inherit  Min  0  Default  0  Max  1   Controls files created in SGID directories   If the group ID of the new file does not match the effective group  ID or one of the supplementary group IDs of the parent dir  the  ISGID bit is cleared if the irix sgid inherit compatibility sysctl  is set     fs xfs inherit sync   Min  0  Default  1  Max  1   Setting this to  1  will cause the  sync  flag set  by the   xfs io 8    chattr command on a directory to be  inherited by files in that directory     fs xfs inherit nodump   Min  0  Default  1  Max  1   Setting this to  1  will cause the  nodump  flag set  by the   xfs io 8    chattr command on a directory to be  inherited by files in that directory     fs xfs inherit noatime  Min  0  Default  1  Max  1   Setting this to  1  will cause the  noatime  flag set  by the   xfs io 8    chattr command on a directory to be  inherited by files in that directory     fs xfs inherit nosymlinks  Min  0  Default  1  Max  1   Setting this to  1  will cause the  nosymlinks  flag set  by the   xfs io 8    chattr command on a directory to be  inherited by files in that directory     fs xfs inherit nodefrag  Min  0  Default  1  Max  1   Setting this to  1  will cause the  nodefrag  flag set  by the   xfs io 8    chattr command on a directory to be  inherited by files in that directory     fs xfs rotorstep   Min  1  Default  1  Max  256   In  inode32  allocation mode  this option determines how many  files the allocator attempts to allocate in the same allocation  group before moving to the next allocation group   The intent  is to control the rate at which the allocator moves between  allocation groups when allocating extents for new files   Deprecated Sysctls                                                                                Name                                          Removal Schedule                                                                  fs xfs irix sgid inherit                        September 2025 fs xfs irix symlink mode                        September 2025 fs xfs speculative cow prealloc lifetime        September 2025                                                                    Removed Sysctls                                                          Name    Removed                                         fs xfs xfsbufd centisec v4 0   fs xfs age buffer centisecs v4 0                                        Error handling                 XFS can act differently according to the type of error found during its operation  The implementation introduces the following concepts to the error handler     failure speed   Defines how fast XFS should propagate an error upwards when a specific  error is found during the filesystem operation  It can propagate  immediately  after a defined number of retries  after a set time period   or simply retry forever     error classes   Specifies the subsystem the error configuration will apply to  such as  metadata IO or memory allocation  Different subsystems will have  different error handlers for which behaviour can be configured     error handlers   Defines the behavior for a specific error   The filesystem behavior during an error can be set via   sysfs   files  Each error handler works independently   the first condition met by an error handler for a specific class will cause the error to be propagated rather than reset and retried   The action taken by the filesystem when the error is propagated is context dependent   it may cause a shut down in the case of an unrecoverable error  it may be reported back to userspace  or it may even be ignored because there s nothing useful we can with the error or anyone we can report it to  e g  during unmount    The configuration files are organized into the following hierarchy for each mounted filesystem      sys fs xfs  dev  error  class   error    Where     dev   The short device name of the mounted filesystem  This is the same device  name that shows up in XFS kernel error messages as  XFS  dev             class   The subsystem the error configuration belongs to  As of 4 9  the defined  classes are        metadata   applies metadata buffer write IO     error   The individual error handler configurations    Each filesystem has  global  error configuration options defined in their top level directory      sys fs xfs  dev  error     fail at unmount   Min   0  Default   1  Max  1   Defines the filesystem error behavior at unmount time    If set to a value of 1  XFS will override all other error configurations  during unmount and replace them with  immediate fail  characteristics   i e  no retries  no retry timeout  This will always allow unmount to  succeed when there are persistent errors present    If set to 0  the configured retry behaviour will continue until all  retries and or timeouts have been exhausted  This will delay unmount  completion when there are persistent errors  and it may prevent the  filesystem from ever unmounting fully in the case of  retry forever   handler configurations    Note  there is no guarantee that fail at unmount can be set while an  unmount is in progress  It is possible that the   sysfs   entries are  removed by the unmounting filesystem before a  retry forever  error  handler configuration causes unmount to hang  and hence the filesystem  must be configured appropriately before unmount begins to prevent  unmount hangs   Each filesystem has specific error class handlers that define the error propagation behaviour for specific errors  There is also a  default  error handler defined  which defines the behaviour for all errors that don t have specific handlers defined  Where multiple retry constraints are configured for a single error  the first retry configuration that expires will cause the error to be propagated  The handler configurations are found in the directory      sys fs xfs  dev  error  class   error      max retries    Min   1  Default  Varies  Max  INTMAX   Defines the allowed number of retries of a specific error before  the filesystem will propagate the error  The retry count for a given  error context  e g  a specific metadata buffer  is reset every time  there is a successful completion of the operation    Setting the value to   1  will cause XFS to retry forever for this  specific error    Setting the value to  0  will cause XFS to fail immediately when the  specific error is reported    Setting the value to  N   where 0   N   Max  will make XFS retry the  operation  N  times before propagating the error     retry timeout seconds   Min    1  Default   Varies  Max  1 day   Define the amount of time  in seconds  that the filesystem is  allowed to retry its operations when the specific error is  found    Setting the value to   1  will allow XFS to retry forever for this  specific error    Setting the value to  0  will cause XFS to fail immediately when the  specific error is reported    Setting the value to  N   where 0   N   Max  will allow XFS to retry the  operation for up to  N  seconds before propagating the error     Note    The default behaviour for a specific error handler is dependent on both the class and error context  For example  the default values for  metadata ENODEV  are  0  rather than   1  so that this error handler defaults to  fail immediately  behaviour  This is done because ENODEV is a fatal  unrecoverable error no matter how many times the metadata IO is retried   Workqueue Concurrency                        XFS uses kernel workqueues to parallelize metadata update processes   This enables it to take advantage of storage hardware that can service many IO operations simultaneously   This interface exposes internal implementation details of XFS  and as such is explicitly not part of any userspace API ABI guarantee the kernel may give userspace   These are undocumented features of the generic workqueue implementation XFS uses for concurrency  and they are provided here purely for diagnostic and tuning purposes and may change at any time in the future   The control knobs for a filesystem s workqueues are organized by task at hand and the short name of the data device   They all can be found in      sys bus workqueue devices   task    device                                   Task            Description                                 xfs iwalk  pid  Inode scans of the entire filesystem  Currently limited to                   mount time quotacheck    xfs gc          Background garbage collection of disk space that have been                   speculatively allocated beyond EOF or for staging copy on                   write operations                                 For example  the knobs for the quotacheck workqueue for  dev nvme0n1 would be found in  sys bus workqueue devices xfs iwalk 1111 nvme0n1    The interesting knobs for XFS workqueues are as follows                                  Knob           Description                                max active     Maximum number of background threads that can be started to                  run the work    cpumask        CPUs upon which the threads are allowed to run    nice           Relative priority of scheduling the threads   These are the                  same nice levels that can be applied to userspace processes


prometheus sortrank 3 Console templates allow for creation of arbitrary consoles using the Go from the Prometheus server Console templates templating language http golang org pkg text template These are served title Console templates

Answer:
---
title: Console templates
sort_rank: 3
---

# Console templates

Console templates allow for creation of arbitrary consoles using the [Go
templating language](http://golang.org/pkg/text/template/). These are served
from the Prometheus server.

Console templates are the most powerful way to create templates that can be
easily managed in source control. There is a learning curve though, so users new
to this style of monitoring should try out
[Grafana](/docs/visualization/grafana/) first.

## Getting started

Prometheus comes with an example set of consoles to get you going. These can be
found at `/consoles/index.html.example` on a running Prometheus and will
display Node Exporter consoles if Prometheus is scraping Node Exporters with a
`job="node"` label.

The example consoles have 5 parts:

1. A navigation bar on top
1. A menu on the left
1. Time controls on the bottom
1. The main content in the center, usually graphs
1. A table on the right

The navigation bar is for links to other systems, such as other Prometheis
<sup>[1](/docs/introduction/faq/#what-is-the-plural-of-prometheus)</sup>,
documentation, and whatever else makes sense to you. The menu is for navigation
inside the same Prometheus server, which is very useful to be able to quickly
open a console in another tab to correlate information. Both are configured in
`console_libraries/menu.lib`.

The time controls allow changing of the duration and range of the graphs.
Console URLs can be shared and will show the same graphs for others.

The main content is usually graphs. There is a configurable JavaScript graphing
library provided that will handle requesting data from Prometheus, and rendering
it via [Rickshaw](https://shutterstock.github.io/rickshaw/).

Finally, the table on the right can be used to display statistics in a more
compact form than graphs.

## Example Console

This is a basic console. It shows the number of tasks, how many of them are up,
the average CPU usage, and the average memory usage in the right-hand-side
table. The main content has a queries-per-second graph.

```

<tr>
  <th>MyJob</th>
  <th>{{ template "prom_query_drilldown" (args "sum(up{job='myjob'})") }}
      / {{ template "prom_query_drilldown" (args "count(up{job='myjob'})") }}
  </th>
</tr>
<tr>
  <td>CPU</td>
  <td>{{ template "prom_query_drilldown" (args
      "avg by(job)(rate(process_cpu_seconds_total{job='myjob'}[5m]))"
      "s/s" "humanizeNoSmallPrefix") }}
  </td>
</tr>
<tr>
  <td>Memory</td>
  <td>{{ template "prom_query_drilldown" (args
       "avg by(job)(process_resident_memory_bytes{job='myjob'})"
       "B" "humanize1024") }}
  </td>
</tr>

<h1>MyJob</h1>

<h3>Queries</h3>
<div id="queryGraph"></div>
<script>
new PromConsole.Graph({
  node: document.querySelector("#queryGraph"),
  expr: "sum(rate(http_query_count{job='myjob'}[5m]))",
  name: "Queries",
  yAxisFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
  yHoverFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
  yUnits: "/s",
  yTitle: "Queries"
})
</script>

```

The `prom_right_table_head` and `prom_right_table_tail` templates contain the
right-hand-side table. This is optional.

`prom_query_drilldown` is a template that will evaluate the expression passed to it, format it,
and link to the expression in the [expression browser](/docs/visualization/browser/). The first
argument is the expression. The second argument is the unit to use. The third
argument is how to format the output. Only the first argument is required.

Valid output formats for the third argument to `prom_query_drilldown`:

* Not specified: Default Go display output.
* `humanize`: Display the result using [metric prefixes](http://en.wikipedia.org/wiki/Metric_prefix).
* `humanizeNoSmallPrefix`: For absolute values greater than 1, display the
  result using [metric prefixes](http://en.wikipedia.org/wiki/Metric_prefix). For
  absolute values less than 1, display 3 significant digits. This is useful
  to avoid units such as milliqueries per second that can be produced by
  `humanize`.
* `humanize1024`: Display the humanized result using a base of 1024 rather than 1000.
  This is usually used with `B` as the second argument to produce units such as `KiB` and `MiB`.
* `printf.3g`: Display 3 significant digits.

Custom formats can be defined. See
[prom.lib](https://github.com/prometheus/prometheus/blob/main/console_libraries/prom.lib) for examples.

## Graph Library

The graph library is invoked as:

```
<div id="queryGraph"></div>
<script>
new PromConsole.Graph({
  node: document.querySelector("#queryGraph"),
  expr: "sum(rate(http_query_count{job='myjob'}[5m]))"
})
</script>
```

The `head` template loads the required Javascript and CSS.

Parameters to the graph library:

| Name          | Description
| ------------- | -------------
| expr          | Required. Expression to graph. Can be a list.
| node          | Required. DOM node to render into.
| duration      | Optional. Duration of the graph. Defaults to 1 hour.
| endTime       | Optional. Unixtime the graph ends at. Defaults to now.
| width         | Optional. Width of the graph, excluding titles. Defaults to auto-detection.
| height        | Optional. Height of the graph, excluding titles and legends. Defaults to 200 pixels.
| min           | Optional. Minimum x-axis value. Defaults to lowest data value.
| max           | Optional. Maximum y-axis value. Defaults to highest data value.
| renderer      | Optional. Type of graph. Options are `line` and `area` (stacked graph). Defaults to `line`.
| name          | Optional. Title of plots in legend and hover detail. If passed a string, `[[ label ]]` will be substituted with the label value. If passed a function, it will be passed a map of labels and should return the name as a string. Can be a list.
| xTitle        | Optional. Title of the x-axis. Defaults to `Time`.
| yUnits        | Optional. Units of the y-axis. Defaults to empty.
| yTitle        | Optional. Title of the y-axis. Defaults to empty.
| yAxisFormatter | Optional. Number formatter for the y-axis. Defaults to `PromConsole.NumberFormatter.humanize`.
| yHoverFormatter | Optional. Number formatter for the hover detail. Defaults to `PromConsole.NumberFormatter.humanizeExact`.
| colorScheme   | Optional. Color scheme to be used by the plots. Can be either a list of hex color codes or one of the [color scheme names](https://github.com/shutterstock/rickshaw/blob/master/src/js/Rickshaw.Fixtures.Color.js) supported by Rickshaw. Defaults to `'colorwheel'`.

If both `expr` and `name` are lists, they must be of the same length. The name
will be applied to the plots for the corresponding expression.

Valid options for the `yAxisFormatter` and `yHoverFormatter`:

* `PromConsole.NumberFormatter.humanize`: Format using [metric prefixes](http://en.wikipedia.org/wiki/Metric_prefix).
* `PromConsole.NumberFormatter.humanizeNoSmallPrefix`: For absolute values
  greater than 1, format using using [metric prefixes](http://en.wikipedia.org/wiki/Metric_prefix).
  For absolute values less than 1, format with 3 significant digits. This is
  useful to avoid units such as milliqueries per second that can be produced by
  `PromConsole.NumberFormatter.humanize`.
* `PromConsole.NumberFormatter.humanize1024`: Format the humanized result using a base of 1024 rather than 1000.

title  Console templates sort rank  3        Console templates  Console templates allow for creation of arbitrary consoles using the  Go templating language  http   golang org pkg text template    These are served from the Prometheus server   Console templates are the most powerful way to create templates that can be easily managed in source control  There is a learning curve though  so users new to this style of monitoring should try out  Grafana   docs visualization grafana   first      Getting started  Prometheus comes with an example set of consoles to get you going  These can be found at   consoles index html example  on a running Prometheus and will display Node Exporter consoles if Prometheus is scraping Node Exporters with a  job  node   label   The example consoles have 5 parts   1  A navigation bar on top 1  A menu on the left 1  Time controls on the bottom 1  The main content in the center  usually graphs 1  A table on the right  The navigation bar is for links to other systems  such as other Prometheis  sup  1   docs introduction faq  what is the plural of prometheus   sup   documentation  and whatever else makes sense to you  The menu is for navigation inside the same Prometheus server  which is very useful to be able to quickly open a console in another tab to correlate information  Both are configured in  console libraries menu lib    The time controls allow changing of the duration and range of the graphs  Console URLs can be shared and will show the same graphs for others   The main content is usually graphs  There is a configurable JavaScript graphing library provided that will handle requesting data from Prometheus  and rendering it via  Rickshaw  https   shutterstock github io rickshaw     Finally  the table on the right can be used to display statistics in a more compact form than graphs      Example Console  This is a basic console  It shows the number of tasks  how many of them are up  the average CPU usage  and the average memory usage in the right hand side table  The main content has a queries per second graph           tr     th MyJob  th     th    template  prom query drilldown   args  sum up job  myjob                    template  prom query drilldown   args  count up job  myjob             th    tr   tr     td CPU  td     td    template  prom query drilldown   args        avg by job  rate process cpu seconds total job  myjob   5m            s s   humanizeNoSmallPrefix          td    tr   tr     td Memory  td     td    template  prom query drilldown   args         avg by job  process resident memory bytes job  myjob             B   humanize1024          td    tr       h1 MyJob  h1    h3 Queries  h3   div id  queryGraph    div   script  new PromConsole Graph     node  document querySelector   queryGraph      expr   sum rate http query count job  myjob   5m        name   Queries     yAxisFormatter  PromConsole NumberFormatter humanizeNoSmallPrefix    yHoverFormatter  PromConsole NumberFormatter humanizeNoSmallPrefix    yUnits    s     yTitle   Queries       script           The  prom right table head  and  prom right table tail  templates contain the right hand side table  This is optional    prom query drilldown  is a template that will evaluate the expression passed to it  format it  and link to the expression in the  expression browser   docs visualization browser    The first argument is the expression  The second argument is the unit to use  The third argument is how to format the output  Only the first argument is required   Valid output formats for the third argument to  prom query drilldown      Not specified  Default Go display output     humanize   Display the result using  metric prefixes  http   en wikipedia org wiki Metric prefix      humanizeNoSmallPrefix   For absolute values greater than 1  display the   result using  metric prefixes  http   en wikipedia org wiki Metric prefix   For   absolute values less than 1  display 3 significant digits  This is useful   to avoid units such as milliqueries per second that can be produced by    humanize      humanize1024   Display the humanized result using a base of 1024 rather than 1000    This is usually used with  B  as the second argument to produce units such as  KiB  and  MiB      printf 3g   Display 3 significant digits   Custom formats can be defined  See  prom lib  https   github com prometheus prometheus blob main console libraries prom lib  for examples      Graph Library  The graph library is invoked as        div id  queryGraph    div   script  new PromConsole Graph     node  document querySelector   queryGraph      expr   sum rate http query count job  myjob   5m          script       The  head  template loads the required Javascript and CSS   Parameters to the graph library     Name            Description                                   expr            Required  Expression to graph  Can be a list    node            Required  DOM node to render into    duration        Optional  Duration of the graph  Defaults to 1 hour    endTime         Optional  Unixtime the graph ends at  Defaults to now    width           Optional  Width of the graph  excluding titles  Defaults to auto detection    height          Optional  Height of the graph  excluding titles and legends  Defaults to 200 pixels    min             Optional  Minimum x axis value  Defaults to lowest data value    max             Optional  Maximum y axis value  Defaults to highest data value    renderer        Optional  Type of graph  Options are  line  and  area   stacked graph   Defaults to  line     name            Optional  Title of plots in legend and hover detail  If passed a string      label     will be substituted with the label value  If passed a function  it will be passed a map of labels and should return the name as a string  Can be a list    xTitle          Optional  Title of the x axis  Defaults to  Time     yUnits          Optional  Units of the y axis  Defaults to empty    yTitle          Optional  Title of the y axis  Defaults to empty    yAxisFormatter   Optional  Number formatter for the y axis  Defaults to  PromConsole NumberFormatter humanize     yHoverFormatter   Optional  Number formatter for the hover detail  Defaults to  PromConsole NumberFormatter humanizeExact     colorScheme     Optional  Color scheme to be used by the plots  Can be either a list of hex color codes or one of the  color scheme names  https   github com shutterstock rickshaw blob master src js Rickshaw Fixtures Color js  supported by Rickshaw  Defaults to   colorwheel     If both  expr  and  name  are lists  they must be of the same length  The name will be applied to the plots for the corresponding expression   Valid options for the  yAxisFormatter  and  yHoverFormatter       PromConsole NumberFormatter humanize   Format using  metric prefixes  http   en wikipedia org wiki Metric prefix      PromConsole NumberFormatter humanizeNoSmallPrefix   For absolute values   greater than 1  format using using  metric prefixes  http   en wikipedia org wiki Metric prefix     For absolute values less than 1  format with 3 significant digits  This is   useful to avoid units such as milliqueries per second that can be produced by    PromConsole NumberFormatter humanize      PromConsole NumberFormatter humanize1024   Format the humanized result using a base of 1024 rather than 1000