RHEL 7 or CentOS 7: How to work with XFS filesystem: Backup/Restore/Create/Extend Operations ?

XFS stand for Extents File System.

XFS was first created by Silicon Graphics INC in 1993. In 2001, its support in included in Linux kernel.

Till RHEL 6, we have ext3/ext4 filesystem i.e. extended file system available.

However from RHEL 7 onwards, we have XFS filesystem available as default root filesystem.

Let us have a look the benefits of XFS filesystem and how to work with this in RHEL 7 or Centos 7.


Features of XFS filesystem
1. High performance Journalling filesystem
2. Supports filesystem size upto 500TB, and individual filesize limit upto 16TB.
3. Consistent File System:- Ability to recover or redo the transaction in case of a crash.
4. Separate disk for journalling:- The metadata journal of XFS filesystem can be saved on the same or different disk to recover the data in case of any issue with disk.
5. Allocation Groups :- Allocation Groups provides an ability to perform multiple application I/O threads simultaneously.
6. Native Backup/Restore:– Filesystem can be backed up while in use and can be restored as well.
xfsdump and xfsrestore utilities are provided for this task by XFS filesystem.
7. Snapshots:– XFS filesystem provides an ability to create an image of current state of filesystem also known as snapshots.
8. Delayed Allocation:– Helps to improve filesystem performance by writing files of unknown size while they are in use.
9. Spare file usage:- XFS provides an excellent feature of sparse files where a large file which contains zeros are eliminated and the data is represented by its metadata saving huge amount of filesystem space.
10. Online Resizing:- XFS filesystem can be resized and its space can be increased. However it can’t be reduced.

11. Atomic disk quotas:– Are available to limit disk space usage for multiple users.
12. DMAPI(Data Managament API) :– Helps to move rarely used data to another drive to save space on current XFS filesystem.


Working with XFS Filesystem
1. Creation of XFS filesystem

[root@ngelinux ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@ngelinux ~]# 

 


2. Mounting XFS filesystem

[root@ngelinux ~]# mkdir /Test
[root@ngelinux ~]# mount /dev/sdb1 /Test/
[root@ngelinux ~]# df -h /Test/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1      1014M   33M  982M   4% /Test
[root@ngelinux ~]# 

 


3. XFS Quota

To enable quota, we need to specify any of the below 
option with mount option of the partition.
uquota/uqnoenforce: User quotas
gquota/gqnoenforce: Group quotas
pquota/pqnoenforce: Project quota 

User Quota Setup example
a. Enable user quota

[root@ngelinux ~]# umount /Test/
[root@ngelinux ~]# mount -o quota /dev/sdb1 /Test/
[root@ngelinux ~]#

 

b. Check quota for a user, say saket.

[root@ngelinux ~]# quota saket
Disk quotas for user saket (uid 1000): none
[root@ngelinux ~]# 

 

c. Set quota limit for users on a XFS filesystem

# Inodes Limit
[root@ngelinux ~]# xfs_quota -x -c 'limit isoft=100 ihard=200 saket' /Test/

# Blocks Limit
[root@ngelinux ~]# xfs_quota -x -c 'limit bsoft=1000m bhard=1200m saket' /Test/

# Check quota report partition wise
[root@ngelinux ~]# xfs_quota -x -c 'report -h' /Test/
User quota on /Test (/dev/sdb1)
                        Blocks              
User ID      Used   Soft   Hard Warn/Grace   
---------- --------------------------------- 
root            0      0      0  00 [------]
saket           0  1000M   1.2G  00 [------]
[root@ngelinux ~]# 

 

d. Get XFS quota details.

[root@ngelinux ~]# xfs_quota -x -c state
User quota state on /Test (/dev/sdb1)
  Accounting: ON
  Enforcement: ON
  Inode: #67 (2 blocks, 2 extents)
Group quota state on /Test (/dev/sdb1)
  Accounting: OFF
  Enforcement: OFF
  Inode: #0 (0 blocks, 0 extents)
Project quota state on /Test (/dev/sdb1)
  Accounting: OFF
  Enforcement: OFF
  Inode: #0 (0 blocks, 0 extents)
Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]

 


4. Extending XFS Filesystem

We need to first increase the size of underlying partition and then grow the XFS filesystem.
[root@ngelinux ~]# xfs_growfs /Test/ -D 362144
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data size 362144 too large, maximum is 262144
[root@ngelinux ~]#

 


5. Repair XFS Filesystem

[root@ngelinux ~]# umount /dev/sdb1
[root@ngelinux ~]# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
Note - quota info will be regenerated on next quota mount.
done
[root@ngelinux ~]# 

 


6. Freeze/Unfreeze a XFS Mount Point

# Freeze with option -f
[root@ngelinux ~]# xfs_freeze -f /Test/
[root@ngelinux ~]# 

# Unfreeze with option -u
[root@ngelinux ~]# xfs_freeze -u /Test
[root@ngelinux ~]# 

 


7. Taking Backup of XFS Filesystem

## Backup the /boot partition to a file.
[root@ngelinux ~]# xfsdump -l 0 -f /Test/boot.xfsdump /boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 ->     
session label entered: ""

 --------------------------------- end dialog ---------------------------------

xfsdump: WARNING: no session label specified
xfsdump: level 0 dump of ngelinux:/boot
xfsdump: dump date: Mon Mar 25 04:21:58 2019
xfsdump: session id: 7d81218c-2bfa-48da-b51c-16680407641b
xfsdump: session label: ""
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 153714368 bytes
xfsdump: /var/lib/xfsdump/inventory created

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> 
media label entered: ""

 --------------------------------- end dialog ---------------------------------

xfsdump: WARNING: no media label specified
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 153318400 bytes
xfsdump: dump size (non-dir files) : 153047648 bytes
xfsdump: dump complete: 27 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /Test/boot.xfsdump OK (success)
xfsdump: Dump Status: SUCCESS
[root@ngelinux ~]# 

## Verifying the Backup.
[root@ngelinux ~]# df -h /Test/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1      1014M  179M  836M  18% /Test

[root@ngelinux ~]# df -h /boot/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1      1014M  179M  836M  18% /boot

[root@ngelinux ~]# du -sh /Test/boot.xfsdump 
147M	/Test/boot.xfsdump
[root@ngelinux ~]# 

 


8. Restoring XFS filesystem

[root@ngelinux ~]# xfsrestore -f /Test/boot.xfsdump /boot/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: ngelinux
xfsrestore: mount point: /boot
xfsrestore: volume: /dev/sda1
xfsrestore: session time: Mon Mar 25 04:21:58 2019
xfsrestore: level: 0
xfsrestore: session label: ""
xfsrestore: media label: ""
xfsrestore: file system id: d4d03e1e-2b47-4756-9027-007716fef8dc
xfsrestore: session id: 7d81218c-2bfa-48da-b51c-16680407641b
xfsrestore: media id: ea790ef7-1b82-43e8-9cd4-a71a6fb1c083
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 12 directories and 382 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 8 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /Test/boot.xfsdump OK (success)
xfsrestore: Restore Status: SUCCESS
[root@ngelinux ~]# 

 

 

References:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/
https://www.linux.com/news/use-xfsfsr-keep-your-xfs-filesystem-optimal
http://www2.cs.uregina.ca/~hamilton/courses/330/notes/memory/paging.html
https://www.rootusers.com/how-to-defragment-an-xfs-file-system/

 

Leave a Reply

Your email address will not be published.