XFS is a high-performance 64-bit journaling file system created by Silicon Graphics, Inc (SGI) in 1993.
XFS ensures the consistency of data by employing metadata journaling and supporting write barriers.
Delayed allocation assists in the prevention of file system fragmentation; online defragmentation is also supported.
The tools available from CentOS could operate for that purpose, and Red Hat also provided them to RHEL customers on request.
[15] RHEL 6.0, released in 2010, includes XFS support for a fee as part of Red Hat's "scalable file system add-on".
The journal is a circular buffer of disk blocks that is not read in normal file system operation.
The XFS journal can be stored within the data section of the file system (as an internal log), or on a separate device to minimize disk contention.
In XFS, the journal primarily contains entries that describe the portions of the disk blocks changed by filesystem operations.
Each allocation group manages its own inodes and free space separately, providing scalability and parallelism so multiple threads and processes can perform I/O operations on the same file system simultaneously.
The internal partitioning provided by allocation groups can be especially beneficial when the file system spans multiple physical devices, allowing optimal usage of throughput of the underlying storage components.
Block-oriented file systems manage space allocation with one or more block-oriented bitmaps; in XFS, these structures are replaced with an extent oriented structure consisting of a pair of B+ trees for each file system allocation group.
This dual indexing scheme allows for the highly efficient allocation of free extents for file system operations.
When many small files are expected, a small block size would typically maximize capacity, but for a system dealing mainly with large files, a larger block size can provide a performance efficiency advantage.
This improves the chance that the file will be written in a contiguous group of blocks, reducing fragmentation problems and increasing performance.
XFS provides multiple data streams for files; this is made possible by its implementation of extended attributes.
Names are nul-terminated printable character strings which are up to 256 bytes in length, while their associated values can contain up to 64 KB of binary data.
Extended attributes can be attached to any kind of XFS inode, including symbolic links, device nodes, directories, etc.
This was once a valuable advantage as the ext3 file system could not be suspended[26] and the volume manager was unable to create a consistent "hot" snapshot to back up a heavily busy database.
This feature is typically used in conjunction with volume management, as otherwise the partition holding the filesystem will need enlarging separately.
[30] The XFS guaranteed-rate I/O system provides an API that allows applications to reserve bandwidth to the filesystem.