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.
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
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
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
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.
Hi,
just wanted to let you know, that your article was really helpful. Just one thing you might want to add:
After unmounting the created partition and executing “mount -a” it complained about an altered fstab, and suggested to reload it into memory, using “systemctl daemon-reload”.
FYI: my system: Linux Mint 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux)