Manage Linux Disk Partition With Fdisk Command
Manage Linux Disk Partition With Fdisk Command
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.
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.
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.
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/sdcdisk. Change the disk name with the disk name which you want to use for the
practice.
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.
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.
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.
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.)
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.
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).
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.
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.
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.
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.
As we can see in above output Linux supports several kinds of partitions type. Following table lists some
important Linux partition types.
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.
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.
We have successfully created the partitions. To view the partitions use 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.
Some common supported file systems are ext3, ext4 and xfs. Let’s format the recently created partitions
with these file systems.
Since extended partition is only used to store the logical partitions we cannot create file system in it.
Logical partitions are used to store the data. We have to create the file system in them.
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).
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.
Mount command accepts several options and arguments which I will explain separately in another tutorial. For this tutorial this basic
syntax is sufficient.
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.
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.
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.
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.
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.
Let’s make some directories to mount the partitions which we have created recently
Now open the fstab file and make entries for partitions and save the file.
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.
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.
Above output confirms that we have successfully mounted all partitions. Now it’s time to clean up the
system for next practice.
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
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.
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.
Now reboot the system and use df –h command again to verify that all partitions which we created in
this exercise are gone.
That’s all for this part. In next part we will learn how to create and manage GPT partitions.