RHEL: XFS basic operations

RHEL: XFS basic operations

# Tested on RHEL 6 & 7

# XFS filesystem supports up to 16 EiB filesystems and up to 8 EiB and directory structures
# holding tens of millions entries.
# On the other hand it is a single node filesystem. It comes integrated in RHEL 7, in order
# to use it on RHEL 6 we need a subscription to the Scalable File System Add-ON.

# Although XFS file system supports up to 16 EiB, Red Hat only supports filesystems up to
# 100 TiB

# Other limitations of XFS is that it's less suited for single threads creating and deleting
# a large number of small files; in addition it uses about twice CPU resources that ext4 so
# under those circumstances it is better to use ext4 filesystems.

# In general XFS is best suited for large systems with fast storage.

# As already indicated, to use XFS filesystems we need the "Scalable Filesystems" group /
# 'xfsprogs' package



# Create an xfs filesystem
# ------------------------------------------------------------------------------------------

mkfs.xfs /dev/sdd2


# If we know storage parameters, we can specify chunk size ('su', stripe unit) and/or
# stripe width ('sw') in order to improve xfs fs performance. For example, to create an xfs
# file system with a stripe-unit size of 32 KB and 4 units per stripe, we will specify:

mkfs.xfs -d su=32k,sw=4 /dev/sdd2

   meta-data=/dev/sdd2              isize=256    agcount=4, agsize=655352 blks
            =                       sectsz=512   attr=2
   data     =                       bsize=4096   blocks=2621408, imaxpct=25
            =                       sunit=8      swidth=32 blks
   naming   =version 2              bsize=4096   ascii-ci=0
   log      =internal log           bsize=4096   blocks=2560, version=2
            =                       sectsz=512   sunit=8 blks, lazy-count=1
   realtime =none                   extsz=4096   blocks=0, rtextents=0




# External journal
# ------------------------------------------------------------------------------------------

# By default xfs store journal internally. As synchronous metadata writes to the journal
# must complete successfully before any associated data such a layout can lead to disk
# contention. To improve performance we can consider placing journal on a separate physical
# device. To create an external journal, use the "-l logdev=device,size=size" option during
# xfs creation. If we omit the size parameter, mkfs.xfs selects a size based on the size
# of the file system.

mkfs.xfs -l logdev=/dev/sde2 /dev/sdd2




# Mount an xfs F.S. without/with external journal
# ------------------------------------------------------------------------------------------

# by editing /etc/fstab

   /dev/datavg/lv_xfsdata     /myxfs      xfs   defaults        0 0


# or

   /dev/datavg/lv_xfsdata     /myxfs      xfs   logdev=/dev/datavg/lvxfsjournal     0 0



# via 'mount' command

mount /dev/datavg/lv_xfsdata /myxfs

# or

mount -o logdev=/dev/datavg/lv_xfsjournal /dev/datavg/lv_xfsdata   /myxfs





# Grow an xfs filesystem
# ------------------------------------------------------------------------------------------

# 1.- We CANNOT grow an unmounted xfs
# 2.- An xfs filesystem CANNOT be shrunk

# We can increase the size of a XFS file system if there is enough space on the underlying
# device. If necessary, increase the size of the logical volume (or disk partition or LUN
# and make changes visible to the system).

df -h /myxfs
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/sdf1             2.0G   33M  2.0G   2% /myxfs


# To specify the final size of the xfs, we use the '-D' option. The size is expressed in
# filesystem blocks. With a default block size of 4096 bytes, to grow our xfs up to 3 GiB:

# 3 GiB = 3221225472 byte = 786432 blocks

xfs_growfs  -D 786432 /myxfs
   meta-data=/dev/sdf1              isize=256    agcount=4, agsize=131530 blks
            =                       sectsz=512   attr=2
   data     =                       bsize=4096   blocks=526120, imaxpct=25
            =                       sunit=0      swidth=0 blks
   naming   =version 2              bsize=4096   ascii-ci=0
   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 blocks changed from 526120 to 786432

df -h /myxfs
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/sdf1             3.0G   33M  3.0G   2% /myxfs

#
To grow the xfs to the largest size possible:

xfs_growfs -d /myxfs


df -h /myxfs
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/sdf1              10G   33M   10G   1% /myxfs




# Reduce an xfs filesystem
# ------------------------------------------------------------------------------------------

# Unfortunately, it is not possible to reduce an xfs filesystem




# Repair an xfs when file system is not cleanly unmounted, ...
# ------------------------------------------------------------------------------------------

xfs_repair [ -l <logdev> ] /dev/sdd2

# An xfs file system with a dirty log cannot be repaired. To clear out the log you can
# mount, then unmount. If this fails try '-L' option to xfs_repair to force clear the
# log (as a last resort as it may result in a data corruption)




# Display/modify label and UUID of an xfs
# ------------------------------------------------------------------------------------------

# Display existing label:

xfs_admin -l /dev/sde
   label = ""

# Set a new label (filesystem has to be unmounted):

xfs_admin -L "NewLabel" /dev/sde
   writing all SBs
   new label = "NewLabel"


# Display existing UUID:

xfs_admin -u /dev/sde
   UUID = 51b11165-c59d-44a6-8f4e-3616aaf79a4d

# Generate a new UUID
(filesystem has to be unmounted):

xfs_admin -U generate /dev/sde
   Clearing log and setting UUID
   writing all SBs
   new UUID = a05ff818-dc74-4d59-aff8-92b360c2a2ed


# Clear the UUID
(filesystem has to be unmounted):

xfs_admin -U nil /dev/sde
   Clearing log and setting UUID
   writing all SBs
   new UUID = 00000000-0000-0000-0000-000000000000


# Let's see what happens if we try to mount an xfs with a nil UUID:

mount /dev/sde /xfs01
   mount: wrong fs type, bad option, bad superblock on /dev/sde,
          missing codepage or helper program, or other error
          In some cases useful info is found in syslog - try
          dmesg | tail  or so

dmesg | tail -1
   XFS (sde): Filesystem has nil UUID - can't mount




# Defragmenting an xfs
# ------------------------------------------------------------------------------------------

xfs_fsr /dev/sdd2

# To defragment a single file run xfs_fsr <path_to_file>

# If no option is given to 'xfs_fsr' command it will defragment all the xfs on the server.
# Since this can potentially be a very long running operation the 'xfs_fsr' tool will
# stop after a number of seconds specified with the '-t' option (by default 7200 seconds,
# this is 2 hours)
1 (1)
Article Rating (1 Votes)
Rate this article
Attachments
There are no attachments for this article.
Comments
There are no comments for this article. Be the first to post a comment.
Full Name
Email Address
Security Code Security Code
Related Articles RSS Feed
HowTo: Retrieve Email from a POP3 Server using the Command Line
Viewed 12981 times since Mon, Feb 18, 2019
Procedura powiekszania OCFS2 online
Viewed 5957 times since Fri, Jun 8, 2018
Linux Cluster Tutorial
Viewed 2703 times since Sat, Sep 29, 2018
Find All Large Files On A Linux System
Viewed 2810 times since Mon, Oct 29, 2018
RHEL: Services basic management - systemd
Viewed 19521 times since Sat, Jun 2, 2018
Linux Health Check Commands
Viewed 3799 times since Fri, Jun 8, 2018
logrotate How log rotation works with logrotate
Viewed 9639 times since Sun, Jan 12, 2020
Easily Find Bugs In Shell Scripts With ShellCheck
Viewed 3907 times since Thu, Apr 18, 2019
How log rotation works with logrotate
Viewed 5515 times since Fri, Nov 30, 2018
Applescript: Run or Call a Shell Script
Viewed 4864 times since Tue, Aug 6, 2019