The need for a versatile high performance file system for use with the IRIX operating system saw Silicon Graphics Inc start the development of XFS in 1993. XFS is a 64-bit journaling file system design to provide high performance with particular emphasis for parallel input/output operations. The design allows for a maximum supported data volume size of 16EB and a maximum individual file size of 8EB.
XFS was ported for the Linux operating system in 2000 when the file system was released under the GNU General Public License (GPL) allowing support to be provided the following year. As of 2014 XFS is the default file system for Redhat Linux system for all partitions including the boot partition. Silicon Graphics Inc has released the specifications for XFS which have been used to allow data recovery from any XFS data volume.
Journaling is an essential part of any modern file system including XFS, particularly for use on server system as it enables the recovery of all system metadata following a crash or power failure. In order to allow date and time values beyond the traditional 32 bit Unix limitation of 2038 using 1 second resolution, XFS stores these as a 64 bit value with nanosecond resolution.
XFS allows the pre-allocation of I/O bandwidth at a pre-determined rate a unique feature of the file system particularly suitable for many real-time applications. Support for this feature is however, only available for IRIX servers using specialised hardware.
Internals of XFS Data Volumes
The XFS file system uses Allocation Groups (AG) to as a means of splitting the block allocation. Only the first inode set is pre-allocated when the file system is formatted. All other inodes are dynamically allocated as required being referenced by their AG and position within it. The only other pre-allocated system structures are the superblocks for which a copy is held at the start of each AG, and the AG data block usage bitmap. This allows the volume to be formatted quickly, as well as avoiding the unnecessary allocation of inodes which may not be used, as well as not imposing an arbitrary limitation on the number of files and directories allowed. This avoids the limitations associated with most traditional style Unix file systems.
In order to provide efficient searching and sorting the directories are stored using a BTree. The allocation for files stores each extent in a BTree, which allows fast access to any data block, particularly useful in real time systems.
XFS Data Recovery
XFS is a complex file system, although the development of data recovery tools is relatively simple due to the specification document being readily available. XFS is a very robust file system, so the most common reasons for data recovery are most likely to be due to a failure of the hardware, partition deletion, or the volume having been reformatted.
When files and directories have been lost, due to corruption or unreadable bad sectors, the file system can be scanned to search for the metadata structures, which allows them to be readily collected.
In the event of reformatting an XFS volume, only the initial inode allocation (usually 128 entries) which includes the root directory is overwritten, as well as the data block usage bitmaps. A full scan of the file system can be made to search for all the previously written inodes, which allows an almost complete data recovery with only minimal data loss. This is however dependent upon the amount of data written to the volume following it being reformatted.