In 1993 Silicon Graphics Inc realised that the standard Unix style filesystem being used on their IRIX systems would soon be inadequate, both in speed and maximum capacity, so started the development of XFS. Like most modern filesystems, XFS is 64 bit capable, provides journaling and was optimised for multiple input/output operations performed in parallel, providing a robust, high performance file system. XFS was designed to support a data volume of up to 16EB, while the single maximum size of a file is 16EB.
The port of XFS for the Linux operating system was started in 2000, with the file system available for use the following year under the GNU General Public License (GPL) agreement. After 2014 the Redhat version of Linux uses XFS as the default file system for all partitions including the boot partition. A specification document detailing XFS has been released by Silicon Graphics Inc from which our data recovery software allowed data to be recovered from any XFS data volume.
Key XFS Features
All modern file systems, including XFS, now provide Journaling as a key feature. This allows the file system to be automatically recovered with no data loss when the computer or server is rebooted following a crash or power failure. A limitation of the traditional Unix style filesystems was 32-bit date limitation of 2038, using a resolution of 1 second. XFS using a 64-bit value to store all time stamps using a one nanosecond resolution.
For many real-time applications, it is important that there is always enough bandwidth available, to avoid any unnecessary slowdown. XFS allow the I/0 bandwidth to be pre-allocated a feature only supported using specialised hardware on an IRIX server system.
Internals Data Structures of XFS
XFS splits the file system into chunks, each of which is called an Allocation Group (AG). Traditional Unix file systems pre-allocate a set number of inodes at format time, which are spread across volume, XFS however only pre-allocates the initial set, allowing inodes to be placed into any data block on the disk. Further inodes are created as required and referenced using two values, the AG and its position with the Allocation Group. Each AG also creates a usage bitmap for each block within it. This allows large XFS data volumes to be created extremely quickly and does not place an arbitrary limitation on the number of inodes which can be stored, while not unnecessarily wasting space storing unused inodes.
Fast and efficient sorting and searching of directories is provided using a BTree a well-known computing method of automatically balancing a hierarchical data structure. A BTree is also used for storing the allocation data for each extent of the file, which provides fast access to any position with a file. These are extremely important features for any real-time system.
XFS Volume Data Recovery
Although XFS is a very complex file system, the release of a specification document allows a data recovery tool capable of recovering files a relatively simple process. XFS has also proven to be a very robust file system, which means that most data recovery cases from XFS are due to a hardware failure or an operator error, such a deleting or reformatting a data volume.
All metadata structures, including the system information at the start of each AG, each inode and directory index containing a specified signature, which allows them to easily found by searching the entire contents of the disk.
The process of reformatting an XFS data volume, results in the AG metadata at the start of each AG being recreated, but does not overwrite any data. It is therefore possible to perform a full scan of the file system, searching for the previously stored metadata structures, which can then be used to recovery the data with only a low level of data loss occurring. The results of the unformatting process are depended upon the amount of data if any which has been written to the file system after being reformatted.