How to create filesystem on a Linux partition or logical volume

Storage, How To, Linux, Tips and Tricks

In this article I will share the steps to create filesystem on a linux partition or a logical volume and mount it persistently or non-persistently in your Linux system.

On a UNIX system, everything is a file; if something is not a file, it is a process

This statement is true because there are special files that are more than just files (named pipes and sockets, for instance), but to keep things simple, saying that everything is a file is an acceptable generalization. A Linux system, just like UNIX, makes no difference between a file and a directory, since a directory is just a file containing names of other files. Programs, services, texts, images, and so forth, are all files. Input and output devices, and generally all devices, are considered to be files, according to the system.

How to create a filesystem on a Linux partition or logical volume in Linux

In computing, a filesystem controls how data is stored and retrieved and helps organize the files on the storage media. Without a filesystem, information in storage would be one large block of data, and you couldn't tell where one piece of information stopped and the next began. A filesystem helps manage all of this by providing names to files that store data and maintaining a table of files and directories—along with their start/end location, total size, etc.—on disks within the filesystem.


Create filesystem

Before we create filesystem we need a partition. For the sake of this article I have added a virtual disk to my vm and created a partition /dev/sdb. You can verify the list of available partitions using below command

[root@node1 ~]# lsblk
sda               8:0    0   30G  0 disk
├─sda1            8:1    0  512M  0 part  /boot
└─sda2            8:2    0 27.5G  0 part
  ├─centos-root 253:0    0 25.5G  0 lvm   /
  └─centos-swap 253:1    0    2G  0 lvm   [SWAP]
sdb               8:16   0    2G  0 disk
└─sdb1            8:17   0    2G  0 part
sr0              11:0    1 1024M  0 rom

You can also get the list of available disks and partitions using lsblk

[root@node1 ~]# cat /proc/partitions
major minor  #blocks  name

  11        0    1048575 sr0
   8        0   31457280 sda
   8        1     524288 sda1
   8        2   28844032 sda2
   8       16    2097152 sdb
   8       17    2096128 sdb1
 253        0   26738688 dm-0
 253        1    2097152 dm-1
   9        0    2094080 md0

Decide what kind of filesystem you want to create, such as ext4, XFS, or anything else. Here are a few options:

[root@node1 ~]# mkfs. 
mkfs         mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs
mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat

For this article I will use mkfs.ext4 to create filesystem with ext4 type.

[root@node1 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524032 blocks
26201 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
If you wish to use a different filesystem then use respective command in the above step.


Mount a filesystem

After you create filesystem using mkfs, you must mount it in your operating system to be able to use it for storing data.

First, identify the UUID of your new filesystem. Issue the blkid command to list all known block storage devices and look for /dev/sdb1 in the output:

[root@node1 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="dac636ff-cde2-4f26-8bfc-a2d7b7ab5aa4" TYPE="ext4"

Create a mount point for this newly created filesystem

[root@node1 ~]# mkdir /mount_point_for_sdb1

Next mount your partition /dev/sdb1 on this mount point

[root@node1 ~]# mount -t ext4 /dev/sdb1 /mount_point_for_sdb1

The df -h command shows which filesystem is mounted on which mount point.

[root@node1 ~]# df -h /mount_point_for_sdb1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.0G  6.0M  1.9G   1% /mount_point_for_sdb1

Substitute it with the UUID identified in the blkid command. Also, note that a new directory was created to mount /dev/sdb1 under /mount_point_for_sdb1.

A problem with using the mount command directly on the command line (as in the previous step) is that the mount won't persist across reboots. To mount the filesystem persistently, edit the /etc/fstab file to include your mount information:

UUID=dac636ff-cde2-4f26-8bfc-a2d7b7ab5aa4   /mount_point_for_sdb1   ext4    defaults     0 0

After you edit /etc/fstab, you can umount /mnt/mount_point_for_dev_sda1 and run the command mount -a to mount everything listed in /etc/fstab.

[root@node1 ~]# umount /mount_point_for_sdb1/

Next check if /dev/sdb1 is unmounted properly

[root@node1 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   25G  4.0G   20G  17% /
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G  9.2M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1                488M  198M  255M  44% /boot
tmpfs                    379M   12K  379M   1% /run/user/42
tmpfs                    379M     0  379M   0% /run/user/0

Next run mount -a to mount all the partitions declared in fstab

[root@node1 ~]# mount -a

If everything went right, you can still list df -h and see your filesystem mounted:

[root@node1 ~]# df -h /mount_point_for_sdb1/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.0G  6.0M  1.9G   1% /mount_point_for_sdb1


Lastly I hope the steps from the article to create filesystem and mount it persistently or non-persistently on Linux was helpful. So, let me know your suggestions and feedback using the comment section.


Views: 421
Deepak Prasad

Deepak Prasad

He is the founder of GoLinuxCloud and brings over a decade of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive experience, he excels in various domains, from development to DevOps, Networking, and Security, ensuring robust and efficient solutions for diverse projects. You can connect with him on his LinkedIn profile.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to

Thank You for your support!!

Leave a Comment