Difference between revisions of "XFS"

From ArchWiki
Jump to: navigation, search
(Installation: xfsutils -> xfsprogs)
m (Defragmentation: style)
 
(35 intermediate revisions by 14 users not shown)
Line 1: Line 1:
 
[[Category:File systems]]
 
[[Category:File systems]]
 
[[it:XFS]]
 
[[it:XFS]]
XFS is a high-performance journaling file system created by Silicon Graphics, Inc. XFS is particularly proficient at parallel IO due to its allocation group based design. This enables extreme scalability of IO threads, filesystem bandwidth, file and filesystem size when spanning multiple storage devices.
+
[[ja:XFS]]
 +
{{Related articles start}}
 +
{{Related|File systems}}
 +
{{Related articles end}}
  
{{Stub}}
+
XFS is a high-performance journaling file system created by Silicon Graphics, Inc. XFS is particularly proficient at parallel IO due to its allocation group based design. This enables extreme scalability of IO threads, filesystem bandwidth, file and filesystem size when spanning multiple storage devices.
  
 
== Installation ==
 
== Installation ==
Line 16: Line 19:
  
 
First unmount the XFS filesystem.
 
First unmount the XFS filesystem.
  # unmount /dev/sda3
+
  # umount /dev/sda3
  
Once unmounted, run the ''xfs_repair'' tool.
+
Once unmounted, run the {{man|8|xfs_repair}} tool.
 
  # xfs_repair -v /dev/sda3
 
  # xfs_repair -v /dev/sda3
 +
 +
== Integrity ==
 +
 +
xfsprogs 3.2.0 has introduced a new on-disk format (v5) that includes a metadata checksum scheme called [https://www.kernel.org/doc/Documentation/filesystems/xfs-self-describing-metadata.txt Self-Describing Metadata].
 +
Based upon CRC32 it provides for example additional protection against metadata corruption during unexpected power losses. Checksum is enabled by default when using xfsprogs 3.2.3 or later. If you need read-write mountable xfs for older kernel, It can be easily disable using the {{ic|1=-m crc=0}} switch when calling {{man|8|mkfs.xfs}}.
 +
# mkfs.xfs -m crc=0 /dev/''target_partition''
 +
 +
The XFS v5 on-disk format is considered stable for production workloads starting Linux Kernel 3.15.
 +
 +
{{Note|Unlike [[Btrfs]] and [[ZFS]], the CRC32 checksum only applies to the metadata and not actual data.}}
  
 
== Performance ==
 
== Performance ==
  
The best way to get performance out of XFS is to plan ahead before you create the filesystem. Where is the journal stored?
+
For optimal speed, just create an XFS file system with:
 +
 
 +
# mkfs.xfs /dev/''target_partition''
 +
 
 +
Yep, so simple - since all of the [http://xfs.org/index.php/XFS_FAQ#Q:_I_want_to_tune_my_XFS_filesystems_for_.3Csomething.3E "boost knobs" are already "on" by default].
  
 
{{Warning|Disabling barriers, disabling atime, and other performance enhancements make data corruption and failure much more likely.}}
 
{{Warning|Disabling barriers, disabling atime, and other performance enhancements make data corruption and failure much more likely.}}
  
For more info read: [[Maximizing_Performance#XFS|Maximizing Performance]]
+
As per [http://xfs.org/index.php/XFS_FAQ#Q:_I_want_to_tune_my_XFS_filesystems_for_.3Csomething.3E XFS wiki], consider changing the default CFQ [[Improving performance#Tuning IO schedulers|I/O scheduler]] (for example to [[wikipedia:Deadline_scheduler|Deadline]], [[wikipedia:NOOP_scheduler|Noop]] or [[Linux-ck#How_to_enable_the_BFQ_I.2FO_Scheduler|BFQ]]) to enjoy all of the benefits of XFS, especially on [[SSD]]s.
  
 
=== Stripe size and width ===
 
=== Stripe size and width ===
  
If this filesystem will be on a striped RAID you can gain significant speed improvements by specifying the stripe size to the {{ic|mkfs.xfs}} command.
+
If this filesystem will be on a striped RAID you can gain significant speed improvements by specifying the stripe size to the {{man|8|mkfs.xfs}} command.
  
 
See [http://xfs.org/index.php/XFS_FAQ#Q:_How_to_calculate_the_correct_sunit.2Cswidth_values_for_optimal_performance How to calculate the correct sunit,swidth values for optimal performance]
 
See [http://xfs.org/index.php/XFS_FAQ#Q:_How_to_calculate_the_correct_sunit.2Cswidth_values_for_optimal_performance How to calculate the correct sunit,swidth values for optimal performance]
Line 47: Line 64:
 
=== Defragmentation ===
 
=== Defragmentation ===
  
Although the extent-based nature of XFS and the delayed allocation strategy it uses significantly improves the file system's resistance to fragmentation problems, XFS provides a filesystem defragmentation utility (xfs_fsr, short for XFS filesystem reorganizer) that can defragment the files on a mounted and active XFS filesystem. It can be useful to view XFS fragmentation periodically.
+
Although the extent-based nature of XFS and the delayed allocation strategy it uses significantly improves the file system's resistance to fragmentation problems, XFS provides a filesystem defragmentation utility (''xfs_fsr'', short for XFS filesystem reorganizer) that can defragment the files on a mounted and active XFS filesystem. It can be useful to view XFS fragmentation periodically.
  
'''xfs_fsr''' improves the organization of mounted filesystems. The reorganization algorithm operates on one file at a time, compacting or otherwise improving the layout of the file extents (contiguous blocks of file data).
+
{{man|8|xfs_fsr}} improves the organization of mounted filesystems. The reorganization algorithm operates on one file at a time, compacting or otherwise improving the layout of the file extents (contiguous blocks of file data).
  
 
==== Inspect fragmentation levels ====
 
==== Inspect fragmentation levels ====
Line 58: Line 75:
 
==== Perform defragmentation ====
 
==== Perform defragmentation ====
  
To begin defragmentation, use the {{ic|xfs_fsr}} command which is included with the ''xfsprogs'' package.
+
To begin defragmentation, use the {{man|8|xfs_fsr}} command:
{{bc|# xfs_fsr /dev/sda3}}
+
# xfs_fsr /dev/sda3
 +
 
 +
=== Free inode btree ===
 +
 
 +
Starting Linux 3.16, XFS has added a btree that tracks free inodes. It is equivalent to the existing inode allocation btree with the exception that the free inode btree tracks inode chunks with at least one free inode. The purpose is to improve lookups for free inode clusters for inode allocation. It improves performance on aged filesystems i.e. months or years down the track when you have added and removed millions of files to/from the filesystem. Using this feature doesn't impact overall filesystem reliability level or recovery capabilities.
 +
 
 +
This feature relies on the new v5 on-disk format that has been considered stable for production workloads starting Linux Kernel 3.15. It does not change existing on-disk structures, but adds a new one that must remain consistent with the inode allocation btree; for this reason older kernels will only be able to mount read-only filesystems with the free inode btree feature.
 +
 
 +
The feature enabled by default when using xfsprogs 3.2.3 or later. If you need writable filesystem for older kernel, it can be disable with {{ic|1=finobt=0}} switch when formatting a XFS partition. You will need {{ic|1=crc=0}} together.
 +
# mkfs.xfs -m crc=0,finobt=0 /dev/''target_partition''
 +
or shortly ({{ic|finobt}} depends {{ic|crc}})
 +
# mkfs.xfs -m crc=0 /dev/''target_partition''
  
 
== See also ==
 
== See also ==
Line 65: Line 93:
 
* [http://xfs.org/index.php/XFS_FAQ XFS FAQ]
 
* [http://xfs.org/index.php/XFS_FAQ XFS FAQ]
 
* [http://xfs.org/index.php/Improving_Metadata_Performance_By_Reducing_Journal_Overhead Improving Metadata Performance By Reducing Journal Overhead]
 
* [http://xfs.org/index.php/Improving_Metadata_Performance_By_Reducing_Journal_Overhead Improving Metadata Performance By Reducing Journal Overhead]
* [http://en.wikipedia.org/wiki/XFS XFS Wikipedia Entry]
+
* [[wikipedia:XFS|XFS Wikipedia Entry]]

Latest revision as of 14:18, 8 September 2016

Related articles

XFS is a high-performance journaling file system created by Silicon Graphics, Inc. XFS is particularly proficient at parallel IO due to its allocation group based design. This enables extreme scalability of IO threads, filesystem bandwidth, file and filesystem size when spanning multiple storage devices.

Installation

The tools to manage XFS partions are in the xfsprogs package from the official repositories, which is included in the default base installation.

Data corruption

If for whatever reason you experience data corruption, you will need to repair the filesystem manually.

Repair XFS Filesystem

First unmount the XFS filesystem.

# umount /dev/sda3

Once unmounted, run the xfs_repair(8) tool.

# xfs_repair -v /dev/sda3

Integrity

xfsprogs 3.2.0 has introduced a new on-disk format (v5) that includes a metadata checksum scheme called Self-Describing Metadata. Based upon CRC32 it provides for example additional protection against metadata corruption during unexpected power losses. Checksum is enabled by default when using xfsprogs 3.2.3 or later. If you need read-write mountable xfs for older kernel, It can be easily disable using the -m crc=0 switch when calling mkfs.xfs(8).

# mkfs.xfs -m crc=0 /dev/target_partition

The XFS v5 on-disk format is considered stable for production workloads starting Linux Kernel 3.15.

Note: Unlike Btrfs and ZFS, the CRC32 checksum only applies to the metadata and not actual data.

Performance

For optimal speed, just create an XFS file system with:

# mkfs.xfs /dev/target_partition

Yep, so simple - since all of the "boost knobs" are already "on" by default.

Warning: Disabling barriers, disabling atime, and other performance enhancements make data corruption and failure much more likely.

As per XFS wiki, consider changing the default CFQ I/O scheduler (for example to Deadline, Noop or BFQ) to enjoy all of the benefits of XFS, especially on SSDs.

Stripe size and width

If this filesystem will be on a striped RAID you can gain significant speed improvements by specifying the stripe size to the mkfs.xfs(8) command.

See How to calculate the correct sunit,swidth values for optimal performance

Disable barrier

You can increase performance by disabling barrier usage for the filesystem by adding the nobarrier mount option to the /etc/fstab file.

Access time

On some filesystems you can increase performance by adding the noatime mount option to the /etc/fstab file. For XFS filesystems the default atime behaviour is relatime, which has almost no overhead compared to noatime but still maintains sane atime values. All Linux filesystems use this as the default now (since around 2.6.30), but XFS has used relatime-like behaviour since 2006, so no-one should really need to ever use noatime on XFS for performance reasons.

Also, noatime implies nodiratime, so there is never a need to specify nodiratime when noatime is also specified.

Defragmentation

Although the extent-based nature of XFS and the delayed allocation strategy it uses significantly improves the file system's resistance to fragmentation problems, XFS provides a filesystem defragmentation utility (xfs_fsr, short for XFS filesystem reorganizer) that can defragment the files on a mounted and active XFS filesystem. It can be useful to view XFS fragmentation periodically.

xfs_fsr(8) improves the organization of mounted filesystems. The reorganization algorithm operates on one file at a time, compacting or otherwise improving the layout of the file extents (contiguous blocks of file data).

Inspect fragmentation levels

To see how much fragmentation your file system currently has:

# xfs_db -c frag -r /dev/sda3

Perform defragmentation

To begin defragmentation, use the xfs_fsr(8) command:

# xfs_fsr /dev/sda3

Free inode btree

Starting Linux 3.16, XFS has added a btree that tracks free inodes. It is equivalent to the existing inode allocation btree with the exception that the free inode btree tracks inode chunks with at least one free inode. The purpose is to improve lookups for free inode clusters for inode allocation. It improves performance on aged filesystems i.e. months or years down the track when you have added and removed millions of files to/from the filesystem. Using this feature doesn't impact overall filesystem reliability level or recovery capabilities.

This feature relies on the new v5 on-disk format that has been considered stable for production workloads starting Linux Kernel 3.15. It does not change existing on-disk structures, but adds a new one that must remain consistent with the inode allocation btree; for this reason older kernels will only be able to mount read-only filesystems with the free inode btree feature.

The feature enabled by default when using xfsprogs 3.2.3 or later. If you need writable filesystem for older kernel, it can be disable with finobt=0 switch when formatting a XFS partition. You will need crc=0 together.

# mkfs.xfs -m crc=0,finobt=0 /dev/target_partition

or shortly (finobt depends crc)

# mkfs.xfs -m crc=0 /dev/target_partition

See also