Chapter 11. Getting started with XFS
This is an overview of how to create and maintain XFS file systems.
11.1. The XFS file system
XFS is a highly scalable, high-performance, robust, and mature 64-bit journaling file system that supports very large files and file systems on a single host. It is the default file system in Red Hat Enterprise Linux 8. XFS was originally developed in the early 1990s by SGI and has a long history of running on extremely large servers and storage arrays.
The features of XFS include:
- Reliability
- Metadata journaling, which ensures file system integrity after a system crash by keeping a record of file system operations that can be replayed when the system is restarted and the file system remounted
- Extensive run-time metadata consistency checking
- Scalable and fast repair utilities
- Quota journaling. This avoids the need for lengthy quota consistency checks after a crash.
- Scalability and performance
- Supported file system size up to 1024 TiB
- Ability to support a large number of concurrent operations
- B-tree indexing for scalability of free space management
- Sophisticated metadata read-ahead algorithms
- Optimizations for streaming video workloads
- Allocation schemes
- Extent-based allocation
- Stripe-aware allocation policies
- Delayed allocation
- Space pre-allocation
- Dynamically allocated inodes
- Other features
- Reflink-based file copies (new in Red Hat Enterprise Linux 8)
- Tightly integrated backup and restore utilities
- Online defragmentation
- Online file system growing
- Comprehensive diagnostics capabilities
-
Extended attributes (
xattr
). This allows the system to associate several additional name/value pairs per file. - Project or directory quotas. This allows quota restrictions over a directory tree.
- Subsecond timestamps
Performance characteristics
XFS has a high performance on large systems with enterprise workloads. A large system is one with a relatively high number of CPUs, multiple HBAs, and connections to external disk arrays. XFS also performs well on smaller systems that have a multi-threaded, parallel I/O workload.
XFS has a relatively low performance for single threaded, metadata-intensive workloads: for example, a workload that creates or deletes large numbers of small files in a single thread.
11.2. Creating an XFS file system
As a system administrator, you can create an XFS file system on a block device to enable it to store files and directories.
11.2.1. Creating an XFS file system with mkfs.xfs
This procedure describes how to create an XFS file system on a block device.
Procedure
To create the file system:
If the device is a regular partition, an LVM volume, an MD volume, a disk, or a similar device, use the following command:
# mkfs.xfs block-device
-
Replace block-device with the path to the block device. For example,
/dev/sdb1
,/dev/disk/by-uuid/05e99ec8-def1-4a5e-8a9d-5945339ceb2a
, or/dev/my-volgroup/my-lv
. - In general, the default options are optimal for common use.
-
When using
mkfs.xfs
on a block device containing an existing file system, add the-f
option to overwrite that file system.
-
Replace block-device with the path to the block device. For example,
To create the file system on a hardware RAID device, check if the system correctly detects the stripe geometry of the device:
If the stripe geometry information is correct, no additional options are needed. Create the file system:
# mkfs.xfs block-device
If the information is incorrect, specify stripe geometry manually with the
su
andsw
parameters of the-d
option. Thesu
parameter specifies the RAID chunk size, and thesw
parameter specifies the number of data disks in the RAID device.For example:
# mkfs.xfs -d su=64k,sw=4 /dev/sda3
Use the following command to wait for the system to register the new device node:
# udevadm settle
Additional resources
-
The
mkfs.xfs(8)
man page.
11.2.2. Creating an XFS file system on a block device using RHEL System Roles
This section describes how to create an XFS file system on a block device on multiple target machines using the storage
role.
Prerequisites
An Ansible playbook that uses the
storage
role exists.For information on how to apply such a playbook, see Applying a role.
11.2.2.1. Example Ansible playbook to create an XFS file system on a block device
This section provides an example Ansible playbook. This playbook applies the storage
role to create an XFS file system on a block device using the default parameters.
The storage
role can create a file system only on an unpartitioned, whole disk or a logical volume (LV). It cannot create the file system on a partition.
Example 11.1. A playbook that creates XFS on /dev/sdb
--- - hosts: all vars: storage_volumes: - name: barefs type: disk disks: - sdb fs_type: xfs roles: - rhel-system-roles.storage
-
The volume name (
barefs
in the example) is currently arbitrary. Thestorage
role identifies the volume by the disk device listed under thedisks:
attribute. -
You can omit the
fs_type: xfs
line because XFS is the default file system in RHEL 8. To create the file system on an LV, provide the LVM setup under the
disks:
attribute, including the enclosing volume group. For details, see Example Ansible playbook to manage logical volumes.Do not provide the path to the LV device.
Additional resources
-
For details about the parameters used in the
storage
system role, see the/usr/share/ansible/roles/rhel-system-roles.storage/README.md
file.
11.2.2.2. Additional resources
-
For more information about the
storage
role, see Section 2.1, “Introduction to the storage role”.
11.3. Backing up an XFS file system
As a system administrator, you can use the xfsdump
to back up an XFS file system into a file or on a tape. This provides a simple backup mechanism.
11.3.1. Features of XFS backup
This section describes key concepts and features of backing up an XFS file system with the xfsdump
utility.
You can use the xfsdump
utility to:
Perform backups to regular file images.
Only one backup can be written to a regular file.
Perform backups to tape drives.
The
xfsdump
utility also enables you to write multiple backups to the same tape. A backup can span multiple tapes.To back up multiple file systems to a single tape device, simply write the backup to a tape that already contains an XFS backup. This appends the new backup to the previous one. By default,
xfsdump
never overwrites existing backups.Create incremental backups.
The
xfsdump
utility uses dump levels to determine a base backup to which other backups are relative. Numbers from 0 to 9 refer to increasing dump levels. An incremental backup only backs up files that have changed since the last dump of a lower level:- To perform a full backup, perform a level 0 dump on the file system.
- A level 1 dump is the first incremental backup after a full backup. The next incremental backup would be level 2, which only backs up files that have changed since the last level 1 dump; and so on, to a maximum of level 9.
- Exclude files from a backup using size, subtree, or inode flags to filter them.
Additional resources
-
The
xfsdump(8)
man page.
11.3.2. Backing up an XFS file system with xfsdump
This procedure describes how to back up the content of an XFS file system into a file or a tape.
Prerequisites
- An XFS file system that you can back up.
- Another file system or a tape drive where you can store the backup.
Procedure
Use the following command to back up an XFS file system:
# xfsdump -l level [-L label] \ -f backup-destination path-to-xfs-filesystem
-
Replace level with the dump level of your backup. Use
0
to perform a full backup or1
to9
to perform consequent incremental backups. -
Replace backup-destination with the path where you want to store your backup. The destination can be a regular file, a tape drive, or a remote tape device. For example,
/backup-files/Data.xfsdump
for a file or/dev/st0
for a tape drive. -
Replace path-to-xfs-filesystem with the mount point of the XFS file system you want to back up. For example,
/mnt/data/
. The file system must be mounted. -
When backing up multiple file systems and saving them on a single tape device, add a session label to each backup using the
-L label
option so that it is easier to identify them when restoring. Replace label with any name for your backup: for example,backup_data
.
-
Replace level with the dump level of your backup. Use
Example 11.2. Backing up multiple XFS file systems
To back up the content of XFS file systems mounted on the
/boot/
and/data/
directories and save them as files in the/backup-files/
directory:# xfsdump -l 0 -f /backup-files/boot.xfsdump /boot # xfsdump -l 0 -f /backup-files/data.xfsdump /data
To back up multiple file systems on a single tape device, add a session label to each backup using the
-L label
option:# xfsdump -l 0 -L "backup_boot" -f /dev/st0 /boot # xfsdump -l 0 -L "backup_data" -f /dev/st0 /data
Additional resources
-
The
xfsdump(8)
man page.
11.3.3. Additional resources
-
The
xfsdump(8)
man page.
11.4. Restoring an XFS file system from backup
As a system administrator, you can use the xfsrestore
utility to restore XFS backup created with the xfsdump
utility and stored in a file or on a tape.
11.4.1. Features of restoring XFS from backup
This section describes key concepts and features of restoring an XFS file system from backup with the xfsrestore
utility.
The xfsrestore
utility restores file systems from backups produced by xfsdump
. The xfsrestore
utility has two modes:
- The simple mode enables users to restore an entire file system from a level 0 dump. This is the default mode.
- The cumulative mode enables file system restoration from an incremental backup: that is, level 1 to level 9.
A unique session ID or session label identifies each backup. Restoring a backup from a tape containing multiple backups requires its corresponding session ID or label.
To extract, add, or delete specific files from a backup, enter the xfsrestore
interactive mode. The interactive mode provides a set of commands to manipulate the backup files.
Additional resources
-
The
xfsrestore(8)
man page.
11.4.2. Restoring an XFS file system from backup with xfsrestore
This procedure describes how to restore the content of an XFS file system from a file or tape backup.
Prerequisites
- A file or tape backup of XFS file systems, as described in Section 11.3, “Backing up an XFS file system”.
- A storage device where you can restore the backup.
Procedure
The command to restore the backup varies depending on whether you are restoring from a full backup or an incremental one, or are restoring multiple backups from a single tape device:
# xfsrestore [-r] [-S session-id] [-L session-label] [-i] -f backup-location restoration-path
-
Replace backup-location with the location of the backup. This can be a regular file, a tape drive, or a remote tape device. For example,
/backup-files/Data.xfsdump
for a file or/dev/st0
for a tape drive. -
Replace restoration-path with the path to the directory where you want to restore the file system. For example,
/mnt/data/
. -
To restore a file system from an incremental (level 1 to level 9) backup, add the
-r
option. To restore a backup from a tape device that contains multiple backups, specify the backup using the
-S
or-L
options.The
-S
option lets you choose a backup by its session ID, while the-L
option lets you choose by the session label. To obtain the session ID and session labels, use thexfsrestore -I
command.Replace session-id with the session ID of the backup. For example,
b74a3586-e52e-4a4a-8775-c3334fa8ea2c
. Replace session-label with the session label of the backup. For example,my_backup_session_label
.To use
xfsrestore
interactively, use the-i
option.The interactive dialog begins after
xfsrestore
finishes reading the specified device. Available commands in the interactivexfsrestore
shell includecd
,ls
,add
,delete
, andextract
; for a complete list of commands, use thehelp
command.
-
Replace backup-location with the location of the backup. This can be a regular file, a tape drive, or a remote tape device. For example,
Example 11.3. Restoring Multiple XFS File Systems
To restore the XFS backup files and save their content into directories under
/mnt/
:# xfsrestore -f /backup-files/boot.xfsdump /mnt/boot/ # xfsrestore -f /backup-files/data.xfsdump /mnt/data/
To restore from a tape device containing multiple backups, specify each backup by its session label or session ID:
# xfsrestore -L "backup_boot" -f /dev/st0 /mnt/boot/ # xfsrestore -S "45e9af35-efd2-4244-87bc-4762e476cbab" \ -f /dev/st0 /mnt/data/
Additional resources
-
The
xfsrestore(8)
man page.
11.4.3. Informational messages when restoring an XFS backup from a tape
When restoring a backup from a tape with backups from multiple file systems, the xfsrestore
utility might issue messages. The messages inform you whether a match of the requested backup has been found when xfsrestore
examines each backup on the tape in sequential order. For example:
xfsrestore: preparing drive xfsrestore: examining media file 0 xfsrestore: inventory session uuid (8590224e-3c93-469c-a311-fc8f23029b2a) does not match the media header's session uuid (7eda9f86-f1e9-4dfd-b1d4-c50467912408) xfsrestore: examining media file 1 xfsrestore: inventory session uuid (8590224e-3c93-469c-a311-fc8f23029b2a) does not match the media header's session uuid (7eda9f86-f1e9-4dfd-b1d4-c50467912408) [...]
The informational messages keep appearing until the matching backup is found.
11.4.4. Additional resources
-
The
xfsrestore(8)
man page.
11.5. Increasing the size of an XFS file system
As a system administrator, you can increase the size of an XFS file system to utilize larger storage capacity.
It is not currently possible to decrease the size of XFS file systems.
11.5.1. Increasing the size of an XFS file system with xfs_growfs
This procedure describes how to grow an XFS file system using the xfs_growfs
utility.
Prerequisites
- Ensure that the underlying block device is of an appropriate size to hold the resized file system later. Use the appropriate resizing methods for the affected block device.
- Mount the XFS file system.
Procedure
While the XFS file system is mounted, use the
xfs_growfs
utility to increase its size:# xfs_growfs file-system -D new-size
- Replace file-system with the mount point of the XFS file system.
With the
-D
option, replace new-size with the desired new size of the file system specified in the number of file system blocks.To find out the block size in kB of a given XFS file system, use the
xfs_info
utility:# xfs_info block-device ... data = bsize=4096 ...
-
Without the
-D
option,xfs_growfs
grows the file system to the maximum size supported by the underlying device.
Additional resources
-
The
xfs_growfs(8)
man page.
11.6. Comparison of tools used with ext4 and XFS
This section compares which tools to use to accomplish common tasks on the ext4 and XFS file systems.
Task | ext4 | XFS |
---|---|---|
Create a file system |
|
|
File system check |
|
|
Resize a file system |
|
|
Save an image of a file system |
|
|
Label or tune a file system |
|
|
Back up a file system |
|
|
Quota management |
|
|
File mapping |
|
|