Chapter 9. The XFS File System
XFS is a highly scalable, high-performance file system which was originally designed at Silicon Graphics, Inc. It was created to support extremely large filesystems (up to 16 exabytes), files (8 exabytes) and directory structures (tens of millions of entries).
- Main Features
-
XFS supports metadata journaling, which facilitates quicker crash recovery. The XFS file system can also be defragmented and enlarged while mounted and active. In addition, Red Hat Enterprise Linux 6 supports backup and restore utilities specific to XFS.
- Allocation Features
-
XFS features the following allocation schemes:
Delayed allocation and other performance optimizations affect XFS the same way that they do ext4. Namely, a program's writes to a an XFS file system are not guaranteed to be on-disk unless the program issues an fsync()
call afterwards.
For more information on the implications of delayed allocation on a file system, refer to
Allocation Features in
Chapter 7, The Ext4 File System. The workaround for ensuring writes to disk applies to XFS as well.
- Other XFS Features
-
The XFS file system also supports the following:
-
Extended attributes (xattr
), which allows the system to associate several additional name/value pairs per file.
-
Quota journalling, which avoids the need for lengthy quota consistency checks after a crash.
-
Project/directory quotas, allowing quota restrictions over a directory tree.
-
Subsecond timestamps
9.1. Creating an XFS File System
To create an XFS file system, use the mkfs.xfs /dev/device
command. In general, the default options are optimal for common use.
When using mkfs.xfs
on a block device containing an existing file system, use the -f
option to force an overwrite of that file system.
Below is a sample output of the mkfs.xfs
command:
meta-data=/dev/device isize=256 agcount=4, agsize=3277258 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=13109032, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
For striped block devices (e.g., RAID5 arrays), the stripe geometry can be specified at the time of file system creation. Using proper stripe geometry greatly enhances the performance of an XFS filesystem.
When creating filesystems on lvm or md volumes, mkfs.xfs
chooses an optimal geometry. This may also be true on some hardware RAIDs which export geometry information to the operating system.
To specify stripe geometry, use the following mkfs.xfs
sub-options:
- su=
value
-
Specifies a stripe unit or RAID chunk size. The value
must be specified in bytes, with an optional k
, m
, or g
suffix.
- sw=
value
-
Specifies the number of data disks in a RAID device, or the number of stripe units in the stripe.
The following example specifies a chunk size of 64k on a RAID device containing 4 stripe units:
mkfs.xfs -d su=64k,sw=4 /dev/device
For more information about creating XFS file systems, refer to man mkfs.xfs
.