Manage Linux Disk Partition with fdisk Command

This tutorial explains how to manage MBR disk partition (Primary, Extended and Logical) and GPT disk partition in Linux from fdisk command with practical examples. Learn how to create, list, format, mount (temporary and permanent), remove and delete MBR & GPT partitions step by step in detail.

For this tutorial I assume that you have either non-partitioned disk space or have a separate disk for exercise. If you are using virtual program (such as VMware or Virtual Box) for the practice, I suggest you to add a new virtual hard disk. To learn how to add new virtual disk in VMware please see the first part of this tutorial.

This tutorial is the second part of our article “Linux Disk Management Explained in Easy Language with Examples”. You can read other parts of this article here.

Linux Disk Management Tutorial

This is the first part of this article. This part explains basic concepts of Linux disk management such as BIOS, UEFI, MBR, GPT, SWAP, LVM, RAID, primary partition, extended partition and Linux file system type.

Manage Linux Disk Partition with gdisk Command

This is the third part of this article. This part explains how to create GPT (GUID partition table) partitions from gdisk command in Linux step by step with examples.

Linux Disk Management with parted command

This is the fourth part of this article. This part explains how to create primary, extended, logical and GPT partitions from parted command in Linux step by step with examples.

How to create SWAP partition in Linux

This is the fifth part of this article. This part explains how to create swap partition in Linux with examples including basic swap management tasks such as how to increase, mount or clear swap memory.

Learn how to configure LVM in Linux step by step

This is the sixth part of this article. This part explains basic concepts of LVM in detail with examples including how to configure and manage LVM in Linux step by step.

How to configure RAID in Linux Step by Step Guide

This is the last part of this article. This part explains basic concepts of RAID in detail with examples including how to configure and manage software RAID in Linux step by step.

We can list all attached hard disks with fdisk –l command.

fdisk -l command

As above figure shows there are two un-partitioned disks /dev/sdb and /dev/sdc available. To figure out which disk we added recently check its sequence number. Recently added disk will be the last disk in sequence (sda, sdb and sdc). In our example it is /dev/sdc. We will use this disk for the practice.

Backup before start

We should always take the backup of associate files before making any system change. Backup copy allows us to revert in original state if anything goes wrong. Run following commands to create a backup copy of files which will change in this practice.

dd command

In first command we created a directory to store the backup files.

In second command we took the backup of first megabyte of raw blocks of /dev/sdc hard disk. Let’s understand this command in detail.

dd :- The dd (disk duplicator) command is used to copy or backup the low level data.

if=/dev/sdc :- This is the first option. This option accepts source location as argument. In this example I copied from /dev/sdc disk. Change the disk name with the disk name which you want to use for the practice.

of=/root/backup/mbrbackupfile :- This is the second option. This option accepts destination location as argument. In this example I copied at /root/backup/mbrbackupfile. The mbrbackupfile is the name of file. You can use any descriptive name here.

bs=1 :- This is the third option. It is used to define the size of block. 1M stands for one megabyte.

count=1 :- This is the last option. It is used to define the number of block which we want to copy.

In third command we took the backup of /etc/fstab file. This file contains partitions information. This information is used to mount the file system while system boots.

Now we are ready to create the MBR partitions in /dev/sdc disk.

Creating MBR Partitions

Let’s initiate fdisk command. This command needs the name of disk where we want to create the partition as its argument.

fdisk dev sdc command

There are two messages listed before the fdisk command prompt.

Changes will remain in memory only, until you decide to write them. Be careful before using the write command.

This massage says whatever change we will make here will not apply until we confirm the change with write command. If you make any mistake in this process, exit from fdisk utility without running write command and nothing will change in hard disk.

Device does not contain a recognized partition table building a new DOS disklabel with disk identifier 0x7a53c114.

This message says currently there is not partition table available in this disk. This is true because we are working with a new hard disk. If hard disk already contains partitions, they will be listed here.

We can also use p command to get the overview of hard disk any time in this utility.

fdisk p command

The p command also provides information about available space in hard disk to create a new partition. If last partition ends before the last sector of hard disk, we have available space to create a new partition. As we can see in above output currently no value is available in partition section which means there is no partition available and entire disk space is available for partition.

Type n and press Enter key to create new partition

fdisk new partition

Type p and press Enter key.

As we know in MBR partition scheme we are allowed to create maximum four primary partitions. If more partitions are required, we have to use one primary partition as extended partition. Extended partition allows us to create 15 logical partitions.

To learn more about MBR and GPT partition scheme, see the first part of this tutorial which explains these and other relative topics in detail with examples.

Type the partition number (or keep the default number) and press Enter key.

Type the first available sector for partition (or accept the default sector) and press Enter key.

Type the last available sector for partition. Alternatively we can use KiB, MiB or GiB units to define the size of partition. (To learn what are the differences between KiB, MiB, GiB and KB, MB, GB, please see the first part of this article.)

Following figure illustrates above process step by step

fdisk create new partition

We can verify the creation of partition with p command

fdisk print command

Following same process create two more partitions

fdisk partition

We have created three primary partitions from maximum allowed (four) partitions. Now we can create one more primary partition or can create one extended partition which can be used to create further logical partitions.

Let’s create one allowed extended partition. Since extended partition is used to create all allowed logical partitions, we should allocate the maximum disk space in this partition. We will assign 1GiB disk space in this partition.

fdisk extended partition

At this point we have created all allowed primary partitions. If we use n command again, command mode will automatically set to logical partition (only if one primary partition is created as extended).

fdisk all partition used

We are allowed to create up to 15 logical partitions in extended partition. Since all logical partitions will be created in extended partition, the sum (of size) of all logical partitions cannot go beyond the extended partition. In this example we created an extended partition of 1GiB, so we can create logical partitions up to 1GiB. To understand it more clearly let’s create three logical partitions; first partition of 500MiB, second partition of 500MiB and third partition of remaining size.

fdisk create logical partition

We have used all space of extended partition in three logical partitions. So even we are allowed to create up to 15 logical partitions and free space is available outside the extended partition we cannot create the fourth logical partition. To create fourth logical partition we need free space inside the extended partition not outside the partition. To see it in action let’s try to create fourth logical partition.

no space for logical partition

As above output shows there is no free space available for fourth logical partition. So far we have created all possible partitions including primary, extended and logical partitions. Let’s have a overview of partitions.

fdisk print command

As above output shows there are total 4194304 sectors available in hard disk. From which we used only 2713599 sectors in partitions. 1480705 sectors are still available for partitions but we cannot use them. MBR partition scheme allows us to create only four primary partitions including one extended partition which we have already created.

At first sight this limitation may look alarming, yep it’s an issue but not as much as it looks like. We are allowed to use 2TiB space in each partition. It means 2TiB x 4 = 8TiB hard disk can easily be used with MBR partition scheme.

Each partition uses a special marking known as partition system identifier. This marking is used to identify the purpose of partition. To print all available partition types type l and press Enter key.

linux file system type

As we can see in above output Linux supports several kinds of partitions type. Following table lists some important Linux partition types.

Partition system Identifier Description
82 Linux swap partition
83 Linux Standard partition (Default partition )
85 Linux extended partition
88 Linux plain text partition
8e Linux LVM partition
fd Linux RAID partition

Unless we change the type of any partition, it is marked as Linux Standard partition. But if we want to change it, we can also do the same here. In next part of this tutorial we will learn how to change the partition type, for this part let’s keep the default.

When we started the fdisk utility, we got a message indicating that nothing will be saved on hard disk until we confirm the action.

To accept this partition table type w and press Enter key

save fdisk partition

If you are working with a disk which contains mounted partitions, you may get following warning message.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.

This message indicates that fdisk cannot update the in-memory kernel partition table because disk is busy (mounted). Kernel reads partition table when system boots. So the kernel will be updated about this change at next reboot automatically. Meanwhile if we want to update the kernel immediately, we can use partprobe command which will force the kernel to reread the partition table.

We did not get this warning message because we used a disk which does not contain any mounted partition. Whether we get above message or not we should always run following command.

partprobe command

Replace /dev/sdc with your disk name.

We have successfully created the partitions. To view the partitions use fdisk –l command.

fdisk -l command

These partitions are useless unless we put a file system in them. File system is a logical container which allows us to store files and directories. To learn more about file system see the first part of this tutorial.

How to create file system

To create a file system in partition we have to format it with supported file system. To format a partition following command is used.

#mkfs –t [supported file system type] [partition]

Some common supported file systems are ext3, ext4 and xfs. Let’s format the recently created partitions with these file systems.

File system type ext3 partition /dev/sdc1

mkfs ext3

File system type ext4 partition /dev/sdc2

mkfs ext4

File system type xfs partition /dev/sdc3

mkfs xfs

Since extended partition is only used to store the logical partitions we cannot create file system in it.

extended partition format error

Logical partitions are used to store the data. We have to create the file system in them.

logical partition format

Now partitions have file system, can we use them for data storage now? No, even though partitions are ready to use, we cannot use them until they are connected with primary directory structure (Main Linux file system).

error to access the partition

Linux file system (primary directory structure) starts with root (/) directory and everything goes under it or its subdirectories. We have to mount partitions somewhere under this directory tree. We can mount partitions temporary or permanently.

Mounting partitions temporary

Following command is used to mount the partition temporary.

#mount [what to mount] [where to mount]

Mount command accepts several options and arguments which I will explain separately in another tutorial. For this tutorial this basic syntax is sufficient.

what to mount :- This is the partition.

where to mount :- This is the directory which will be used to access the mounted resource.

Once mounted, whatever action we will perform in mounted directory will be performed in mounted resources. Let’s understand it practically.

  • Create a mount directory in / directory
  • Mount /dev/sdc1 partition
  • List the content
  • Create a test directory and file
  • List the content again
  • Un-mount the /dev/sdc1 partition and list the content again
  • Now mount the /dev/sdc2 partition and list the content
  • Again create a test directory and file. Use different name for file and directory
  • List the content
  • Un-mount the /dev/sdc2 partition and list the content again

Following figure illustrates this exercise step by step

temporary mount exercise

As above figure shows whatever action we performed in mount directory was actually performed in respective partition.

Temporary mount option is good for partitions which we access occasionally. If we access partition on regular basis then this approach will not helpful. Each time we reboot the system all temporary mounted resources are get un-mounted automatically. So if you have a partition which is going to be used regularly, mount it permanently.

Mounting partitions permanently

Each resource in file system has a unique ID called UUID. When mounting a partition permanently we should use UUID instead of its name. From version 7, RHEL also uses UUID instead of device name.

The UUID stands for Universally Unique Identifier. It is a 128-bit number, expressed in hexadecimal (base 16) format.

If you have a static environment, you may use device name. But if you have dynamic environment, you should always use UUID. In dynamic environment device name may change each time when system boot. For example we attached an additional SCSI disk in system; it will be named as /dev/sdb. We mounted this disk permanently with its device name. Now suppose someone else removed this disk and attached new SCSI disk in the same slot. New disk will also be named as /dev/sdb. Since name of old disk and new disk is same, new disk will be mounted at the place of old disk. This way, device name could create a serious problem in dynamic environment. But this issue can solve with UUID. No matter how we attach the resource with system, its UUID will remain always fix.

If you have static environment, you may consider device name to mount the partition. But if you have dynamic environment, you should always use UUID.

To know the UUID of all partitions we can use blkid command. To know the UUID of a specific partition we have to use its name as argument with this command.

blkid command

Once we know the UUID, we can use it instead of device name. We can also use copy and paste option to type the UUID.

  • Use blkid command with partition name to print the UUID of partition.
  • Copy the UUID of partition.
  • Use mount command to mount the partition. Use paste option instead of typing UUID.

Following figure illustrates above steps

blkid command

When system boots, it looks in /etc/fstab file to find out the partitions which need to be mount automatically. By default this file has entry for those partitions which were created during the installation. To mount any additional partition automatically we have to make an entry for that partition in this file. Each entry in this file has six fields.

default fstab

Number Filed Description
1 What to mount Device which we want to mount. We can use device name, UUID and label in this filed to represent the device.
2 Where to mount The directory in main Linux File System where we want to mount the device.
3 File system File system type of device.
4 Options Just like mount command we can also use supported options here to control the mount process. For this tutorial we will use default options.
5 Dump support To enable the dump on this device use 1. Use 0 to disable the dump.
6 Automatic check Whether this device should be checked while mounting or not. To disable use 0, to enable use 1 (for root partition) or 2 (for all partitions except root partition).

Let’s make some directories to mount the partitions which we have created recently

mkdir command

Now open the fstab file and make entries for partitions and save the file.

fstab partition entry

For demonstration purpose I used both device name and UUID to mount the partitions. After saving always check the entries with mount –a command. This command will mount everything listed in /etc/fstab file. So if we made any mistake while updating this file, we will get an error as the output of this command.

If you get any error as the output of mount –a command, correct that before rebooting the system. If there is no error, reboot the system.

reboot command

The df –h command is used to check the available space in all mounted partitions. We can use this command to verify that all partitions are mounted correctly.

df -h command

Above output confirms that we have successfully mounted all partitions. Now it’s time to clean up the system for next practice.

How to delete partitions

We cannot delete a mounted partition. Un-mount all partitions which we created in this exercise

unmount the partition

Run fdisk /dev/sdc command again

fdisk sdc

The d command is used to delete a partition. If there are multiple partitions, command will ask for partition number which we want to delete. Delete all partitions one by one

delete partition

As we know whatever change we made in this utility will not apply until we save them with w command. Let’s save the change and exit from fdisk.

save change fdisk command

Finally remove the mount directory and copy the original fstab file back.

If you haven’t taken the backup of original fstab file, remove all entries from this file which you made.

restore fstab

Now reboot the system and use df –h command again to verify that all partitions which we created in this exercise are gone.

df -h

That’s all for this part. In next part we will learn how to create and manage GPT partitions.

ComputerNetworkingNotes Linux Tutorials Manage Linux Disk Partition with fdisk Command