How to Convert a /Home Directory to Partition in Linux

This topic might seem a bit peculiar. I mean, why should you convert your home directory into a separate partition?

Whenever you are installing Linux, the installer already selects the ‘guided‘ partitioning by default. When you go with this option, the installer places the home directory plus all the other system directories under the root ( / ) partition.

While this setup works quite well, it presents a huge risk. If your system crashes or something corrupts the root partition, all your personal files residing in the home directory are lost.

For this reason, it is important to create a separate home partition during installation. This guarantees the safety of your personal files during reinstallation of an operating system or in case the root partition crashes.

If you accepted the default option while partitioning your hard drive such that all our directories fall under the root partition, then this guide is for you.

In this guide, we will transfer the home directory to a separate partition on a newly added disk. For demonstration purposes, we will use a removable USB drive to serve the purpose of an additional drive. In the real world, this could be an SSD drive or an additional HDD that you want to be the home partition.

Let’s begin!

Step 1: Identify the Added New Drive

Before plugging in the removable drive, we only have a single hard drive (/dev/sda) with a home folder and all the system partitions mounted on the / or root partition.

Here is a glance of your hard drive configuration using the df command.

$ df -Th
Check Linux PartitionCheck Linux Partition
Check Linux Partition

Next, we will plug in the 8GB removable USB drive. This is identified as /dev/sdb and is mounted on the /media/tecmint/USB mountpoint.

To confirm this, we will run the lsblk command.

$ lsblk
Check Mounted Linux PartitionCheck Mounted Linux Partition
Check Mounted Linux Partition

The partition and mountpoint might vary according to your setup. For instance, a third drive will be indicated as /dev/sdc, a fourth one /dev/sdd and so on.

Step 2: Create a New Partition in Linux

We have newly added our second drive to our system, but in order to use it as a separate partition for our home directory, we need to create a partition on it. At the moment it doesn’t have one since it is a new drive.

The fdisk command confirms it as shown.

$ sudo fdisk -l
Check New Drive in LinuxCheck New Drive in Linux
Check New Drive in Linux

In the highlighted section, you can see that the new drive does not have any partition associated with it unlike the first drive which has /dev/sda1, /dev/sda2, and /dev/sda5.

Now, we will create a partition using the command:

$ sudo fdisk /dev/sdb

When prompted, press 'n' to create a new partition. Then press 'p' to specify the creation of a primary partition, and hit '1' to specify the partition number. For the next two prompts, hit ‘ENTER‘ to accept the defaults in specifying the first and last sectors.

Since my removable drive comes with the NTFS filesystem, I will remove it by pressing 'Y'. To save all the changes made, press 'w', as this writes all the changes made to the partition.

Create New Partition in LinuxCreate New Partition in Linux
Create New Partition in Linux

To confirm the changes made, once again, run the command:

$ sudo fdisk /dev/sdb

When prompted, press 'p' for print. This prints out the partition’s information. From the output, you can see that a new partition /dev/sdb1 has been created with Linux as the filesystem type. We need to format it to the ext4 filesystem type which we will do so in the next section.

List New Partition Info in LinuxList New Partition Info in Linux
List New Partition Info in Linux

Step 3: Format a New Partition in Linux

The next step is to format the /dev/sdb1 partition using the ext4 filesystem format. Take note that we are formatting /dev/sdb1 (the partition) and not /dev/sdb which is the removable drive.

$ sudo mkfs.ext4 /dev/sdb1
Format New Partition in LinuxFormat New Partition in Linux
Format New Partition in Linux

Step 4: Mount New Partition in Linux

For the drive to be accessible to the system, we need to mount it on the system’s filesystem. But first, we will create a mount point on which we will mount the partition.

$ sudo mkdir -p /srv/home

Next, we will mount the partition on the mountpoint as follows. This, in effect, makes the drive available to the system.

$ sudo mount /dev/sdb1 /srv/home

To confirm this, run the df command as shown:

$ sudo df -Th
Confirm Mounted New PartitionConfirm Mounted New Partition
Confirm Mounted New Partition

Step 5: Copy Home Directory Files to New Partition

We now need to copy the contents of the home directory to the mount point which is now located on the drive. So, we will run the command:

$ sudo cp -aR /home/* /srv/home/

Just to confirm that everything went all we will check the contents of the home directory.

$ ls -l /srv/home/tecmint

From the output, you can clearly see that all the default directories expected to be in the home directory are present.

Copy Home Directory Files to New PartitionCopy Home Directory Files to New Partition
Copy Home Directory Files to New Partition

Step 6: Create a New Home Directory and Mount Drive

We now need to create another home directory on which we will mount our home partition. To avoid confusion, we will rename our current home directory to /home.bak shown.

$ sudo mv /home /home.bak

Next, we will create a new home directory.

$ sudo mkdir /home

We will then unmount the /dev/sdb1 filesystem and mount it to the newly created home directory

$ sudo umount /dev/sdb1
$ sudo mount /dev/sdb1 /home

To confirm that the /home directory contains the default directories, we will navigate into and list its contents:

$ cd /home
$ ls -l tecmint
List Home Directory ContentsList Home Directory Contents
List Home Directory Contents

Additionally, you can verify that our filesystem is mounted on the /home mount point using the df command as follows.

$ sudo df -Th /dev/sdb1
Confirm Home Linux PartitionConfirm Home Linux Partition
Confirm Home Linux Partition

The output confirms that the /dev/sdb1 filesystem on our drive is mounted on the /home partition. However, this will not survive a reboot. To make this persistent, an additional step is required and that is to modify the /etc/fstab file with the filesystem information.

Step 7: Permanent Partition Mount in Linux

To automatically ensure that the filesystem is mounted every time upon system startup, we are going to modify the /etc/fstab file. But first, let us get the UUID of the filesystem as follows.

$ sudo blkid /dev/sdb1
Check Partition UUID in LinuxCheck Partition UUID in Linux
Check Partition UUID in Linux

Copy and paste the UUID somewhere on a text editor as this will be used in the next step.

Next, open the /etc/fstab file.

$ sudo vim /etc/fstab 

Append this line to the file as shown. Replace the uid in the square brackets with the actual UUID of the /dev/sdb1 filesystem that you copied and pasted earlier on the text editor.

UUID=[ uid ]     /home	   ext4	   defaults	0	2
Mount Partition Permanently in LinuxMount Partition Permanently in Linux
Mount Partition Permanently in Linux

Save the changes and close the file. Then run the following command to mount all the partitions.

$ sudo mount -a

Now, your drive will be mounted every time on system startup on the /home partition.

$ df  -h /dev/sdb1
Confirm Home Partition MountConfirm Home Partition Mount
Confirm Home Partition Mount

To avoid going through all these steps, it’s always advised to have a separate home partition from the rest of the system partitions during installation in order to separate your personal files from system files. This makes it easy to recover your data should something go wrong.

Leave a Comment