Skip to content

RHCSA - Create & Configure File Systems: Create, Mount, Unmount & Use vfat, ext4 & xfs File Systems

File Systems Overview

A file system on Linux is a method for organizing and managing data stored on storage devices, providing a structured way to interact with files and directories. It abstracts the complexities of interacting directly with the physical storage medium, offering a hierarchical structure that organizes data and metadata. The file system manages permissions and access control, ensuring data security.

Linux supports various file system types, and each has its strengths and purposes, allowing users and applications to store, retrieve, and manage data efficiently and reliably. The below table details the three file systems that Red Hat have chosen for this objective:

File System Description
ext4 ext4 is a widely used and mature Linux file system. It supports journaling for data integrity and offers good performance. It's compatible with various Linux distros.
XFS XFS is designed for scalability and high-performance in large-scale environments. It's suitable for big files and provides crash recovery capabilities.
VFAT VFAT is a simple file system with broad compatibility across platforms, making it suitable for portable storage. However, it lacks advanced features and data journaling.

Lesson Setup

To actively participate in the exercises, make sure to attach an additional empty disk to your system. While the exercises assume that the additional disk is 1G in size, feel free to use whatever disk size is available to you.

Do not use a disk with data on as following the exercises will mean that data will be deleted.

Once the disk is attached, you should be able to see it by running the lsblk command, which in this example shows as the sdb device:

After rebooting, the disk may not retain the same device name, making it essential to always run lsblk to verify that you are working with the correct disk.

$ lsblk

NAME           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda              8:0    0   20G  0 disk 
├─sda1           8:1    0  600M  0 part /boot/efi
├─sda2           8:2    0    1G  0 part /boot
└─sda3           8:3    0   17G  0 part 
  ├─os_vg-root 253:0    0   15G  0 lvm  /
  └─os_vg-swap 253:1    0    2G  0 lvm  [SWAP]
sdb              8:16   0    1G  0 disk

You will now need to create three partitions on the /dev/sdb device so that you can practice creating, mounting, using and unmounting file systems.

Create three 100MB partition on disks /dev/sdb:

sudo parted -s /dev/sdb mklabel gpt mkpart ext4 0% 100MB
sudo parted -s /dev/sdb mkpart xfs 100MB 200MB
sudo parted -s /dev/sdb mkpart vfat 200MB 300MB

Confirm the partitions exist:

lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0   1G  0 disk 
├─sdb1   8:17   0  94M  0 part 
├─sdb2   8:18   0  96M  0 part 
└─sdb3   8:19   0  95M  0 part  

Create ext4, xfs & vfat File Systems

To format a partition on top of a partition, logical volume, etc, you use the mkfs command. There are two ways to use this command, either with the -t filesystem option or the mkfs.filesystem method. In the exercises below you will use both.

Create ext4 File System

Create an ext4 filesystem on partition /dev/sdb1:

Create an ext4 filesystem:

sudo mkfs -t ext4 /dev/sdb1

Command output:

mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 96256 1k blocks and 24096 inodes
Filesystem UUID: aa7349ba-7718-45cf-aa88-474ceaf0290d
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Confirm the filesystem type is set:

lsblk -o +FSTYPE /dev/sdb1

Command output shows FSTYPE column of ext4:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS FSTYPE
sdb1   8:17   0  94M  0 part             ext4

Create xfs File System

Create an xfs filesystem on partition /dev/sdb2:

Create an ext4 filesystem:

sudo mkfs.xfs /dev/sdb2

Command output:

meta-data=/dev/sdb2      isize=512    agcount=4, agsize=6144 blks
         =               sectsz=512   attr=2, projid32bit=1
         =               crc=1        finobt=1, sparse=1, rmapbt=0
         =               reflink=1    bigtime=1 inobtcount=1
data     =               bsize=4096   blocks=24576, imaxpct=25
         =               sunit=0      swidth=0 blks
naming   =version 2      bsize=4096   ascii-ci=0, ftype=1
log      =internal log   bsize=4096   blocks=1368, version=2
         =               sectsz=512   sunit=0 blks, lazy-count=1
realtime =none           extsz=4096   blocks=0, rtextents=0    

Confirm the filesystem type is set:

lsblk -o +FSTYPE /dev/sdb2

Command output shows FSTYPE column of xfs:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS FSTYPE
sdb2   8:18   0  96M  0 part             xfs

Create vfat File System

Create a vfat filesystem on partition /dev/sdb3:

Create an ext4 filesystem:

sudo mkfs -t vfat /dev/sdb3

Command output:

mkfs.fat 4.2 (2021-01-31)

Confirm the filesystem type is set:

lsblk -o +FSTYPE /dev/sdb3

Command output shows FSTYPE column of vfat:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS FSTYPE
sdb3   8:19   0  95M  0 part             vfat

Configuring ext4, xfs & vfat File Systems

In this section we will go through some commands to amend and view information for the ext4, xfs and vfat file systems you have created.

There are many configurable items when it comes to file systems. It is important to review the man page if a tasks requires you to perform configuration on a filesystem.

Configure ext4 File System

To configure the ext4 filesystem you can use the tune2fs command.

Working with ext4 file systems:

List the contents of the file system superblock, including the current values of the parameters that can be set via tune2fs:

sudo tune2fs -l /dev/sdb1

Command output:

tune2fs 1.46.5 (30-Dec-2021)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          aa7349ba-7718-45cf-aa88-474ceaf0290d
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize     metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              24096
Block count:              96256
Reserved block count:     4812
Overhead clusters:        11693
Free blocks:              84549
Free inodes:              24085
First block:              1
Block size:               1024
Fragment size:            1024
Group descriptor size:    64
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2008
Inode blocks per group:   502
Flex block group size:    16
Filesystem created:       Fri Aug  4 08:24:41 2023
Last mount time:          n/a
Last write time:          Fri Aug  4 08:24:41 2023
Mount count:              0
Maximum mount count:      -1
Last checked:             Fri Aug  4 08:24:41 2023
Check interval:           0 (<none>)
Lifetime writes:          279 kB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      31ec034a-ce62-4c6d-b6bf-a74a7f9534d9
Journal backup:           inode blocks
Checksum type:            crc32c
Checksum:                 0x0ce28adb

Amend the file system label:

sudo tune2fs -L ext4_label /dev/sdb1

Confirm label ext4_label was set correctly:

lsblk -o +LABEL /dev/sdb1

Command output:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS LABEL
sdb1   8:17   0  94M  0 part             ext4_label

Configure xfs File System

To change parameters of the xfs filesystem you use the xfs_admin command, and to display xfs filesystem geometry information you use the xfs_info command.

Working with xfs file systems:

View filesystem geometry information:

sudo xfs_info /dev/sdb2

Command output:

meta-data=/dev/sdb2              isize=512    agcount=4, agsize=6144 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1
data     =                       bsize=4096   blocks=24576, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1368, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Amend the file system label:

sudo xfs_admin -L xfs_label /dev/sdb2

Command output:

writing all SBs
new label = "xfs_label"

Confirm label xfs_label was set correctly:

sudo xfs_admin -l /dev/sdb2    

Command output:

label = "xfs_label"

Configure vfat File System

There are not many tools for configuring vfat file systems, however you can set the filesystem label using the fatlabel command.

Add label to vfat file system:

sudo fatlabel /dev/sdb3 FAT_LABEL

Display the label of the vfat filesystem:

sudo fatlabel /dev/sdb3

Command output:

FAT_LABEL

Filesystem Repairs

Performing file system checks is crucial for maintaining the integrity, stability, and performance of your system. Over time, file systems can develop inconsistencies due to factors like power disruptions, hardware failures, and software issues. These inconsistencies can lead to data corruption, reduced performance, and even system crashes. Regular file system checks help identify and rectify these problems, preventing data loss and ensuring that your files remain accessible and accurate.

ext4 Filesystem Repairs

To perform filesystem checks and repairs on ext4 file systems, you use the e2fsck command.

Repair an ext4 filesystem:

The -f option forces checking even if the file system seems clean, which it will be for our exercise. The -v option give verbose output which may be useful in a situation where there is errors.

sudo e2fsck -fv /dev/sdb1

Command output:

e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

          11 inodes used (0.05%, out of 24096)
           0 non-contiguous files (0.0%)
           0 non-contiguous directories (0.0%)
             # of inodes with ind/dind/tind blocks: 0/0/0
             Extent depth histogram: 3
       11707 blocks used (12.16%, out of 96256)
           0 bad blocks
           0 large files

           0 regular files
           2 directories
           0 character device files
           0 block device files
           0 fifos
           0 links
           0 symbolic links (0 fast symbolic links)
           0 sockets
------------
           2 files

xfs Filesystem Repairs

To perform filesystem checks and repairs on xfs file systems, you use the xfs_repair command.

Repair an xfs filesystem:

sudo xfs_repair /dev/sdb2

Command output:

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...
done

vfat Filesystem Repairs

To perform filesystem checks and repairs on vfat file systems, you use the fsck command.

Repair a vfat filesystem:

The -V option give verbose output.

sudo fsck.fat -V /dev/sdb3

Command output:

fsck.fat 4.2 (2021-01-31)
Starting check/repair pass.
Starting verification pass.
/dev/sdb3: 1 files, 0/48531 clusters

Mounting ext4, xfs & vfat File Systems

To mount the file systems, you first need to create the mount points which is the location you want the devices to be accessible under. This will typically be under the /mnt directory but it can be anywhere you want really.

Create mount points for the ext4, xfs & vfat file systems:

sudo mkdir -pv /mnt/{ext4,xfs,vfat}

Command output:

mkdir: created directory '/mnt/ext4'
mkdir: created directory '/mnt/xfs'
mkdir: created directory '/mnt/vfat'

In the previous exercises we added filesystem labels. These labels will be used to mount the file systems. You will notice that we are not using the -t flag with the mount command in the exercise below, which is because the mount command is smart enough to recognize the underlying filesystem type of the device and mount accordingly.

Mount the ext4, xfs & vfat file systems:

sudo mount -L ext4_label /mnt/ext4
sudo mount -L xfs_label /mnt/xfs
sudo mount -L FAT_LABEL /mnt/vfat

Confirm the file systems are mounted. The -h flag gives human readable values and the -T flag shows the filesystem type:

df -hT /mnt/ext4 /mnt/xfs /mnt/vfat

Command output:

Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sdb1      ext4   83M   14K   76M   1% /mnt/ext4
/dev/sdb2      xfs    91M  5.7M   85M   7% /mnt/xfs
/dev/sdb3      vfat   95M     0   95M   0% /mnt/vfat

Mounting at Boot Time

The exercise above shows how to temporarily mount the file systems. To have them mount at boot time, entries need adding to /etc/fstab. Review the following lesson for how to do this:

Unmounting ext4, xfs & vfat File Systems

Unmounting the file systems is straight forward. You just use the umount command for either the; filesystem label, device or mount point. All three methods will be used in the exercise below.

Unmounting ext4, xfs & vfat file systems:

Unmount the ext4 filesystem by label:

sudo umount -v /dev/disk/by-label/ext4_label

Command output:

umount: /mnt/ext4 (/dev/sdb1) unmounted

Unmount the xfs filesystem by device:

sudo umount -v /dev/sdb2

Command output:

umount: /mnt/xfs (/dev/sdb2) unmounted

Unmount the vfat filesystem by mount point:

sudo umount -v /mnt/vfat

Command output:

umount: /mnt/vfat unmounted