Linux logo

I’ve had a few instances in which relocating the HOME directory on either a Linux desktop or server was necessary. This could be because of space or security issues. Either way, it might seem like a rather daunting task to migrate the directory containing all user files and directories from one drive to another. Although it is a bit of a lengthy process, it’s not all that difficult.

With that said, let’s see how it’s done.

SEE: 40+ open source and Linux terms you need to know (TechRepublic Premium)

What you’ll need

To make this work, you’ll need a running instance of Linux with at least two drives installed. I’ll be demonstrating on Ubuntu Server 20.04, but this should work no matter the distribution you’re using.

How to locate the destination drive

The first thing we need to do is locate the drive that will house the HOME directories. You need to make certain you know the exact name of the drive. To do that, log into the server (or desktop) and issue the command:


You should not only see the drive name but the mount point for the target drive (Figure A).

Figure A

Our target drive, /dev/sdb, is listed and ready for the move.
Our target drive, /dev/sdb, is listed and ready for the move.

My drive is already formatted. If this is a new, unformatted drive, you’ll need to first create a partition with:

sudo fdisk /dev/sdb

Type n, for a new partition and then type p to create a primary partition. Following that, type 1 to specify the partition number. Hit Enter to accept the defaults for the next two questions (first sector/last sector). You should now see /dev/sdb1 with the command:

sudo fdisk /dev/sdb

Type p to print out the information for the partition.

Next, you’ll need to partition the drive as ext4 with:

sudo mkfs.ext4 /dev/sdb1

Let’s create a new directory to serve as a mount point for the new partition with:

sudo mkdir -p /data/home

Mount the drive:

sudo mount /dev/sdb1 /data/home

How to copy the files from /home to the new drive

Copy everything from /home to the new drive with:

sudo cp -aR /home/* /data/home

Rename /home with:

sudo mv /home /home.bak

Create a new home directory with:

sudo mkdir /home

Unmount /dev/sdb1 with:

sudo umount /dev/sdb1

Remount /dev/sdb1, only this time to the newly-created /home directory with:

sudo mount /dev/sdb1 /home

How to permanently mount the new partition

We now need to make sure the new partition is mounted, even if the machine is rebooted. For that, we’ll create an entry in /etc/fstab. Before we do that, we have to find the UUID of the partition with the command:

sudo blkid /dev/sdb1

You should see something like UUID=”13557fad-d203-4448-991b-c8011907dc1d” in the output (Figure B).

Figure B

The output from the blkid command shows the UUID of our partition.
The output from the blkid command shows the UUID of our partition.

Open fstab for editing with the command:

sudo nano /etc/fstab

At the bottom of the file (Figure C), add something like the following:

UUID=ID /home /ext4 defaults 0 2

Where ID is the UUID of the new partition.

Figure C

Adding a mount entry for our new partition in /etc/fstab.
Adding a mount entry for our new partition in /etc/fstab.

Save and close the file. Remount the partition with:

sudo mount -a

And there you have it, you’ve successfully moved the /home directory to its own drive. You no longer need to worry that users will consume all of the space on your Linux OS server drive.

Do make sure to practice this on non-production machines to make sure you’ve got the process down, before trying it on a machine necessary to your workflow.

Subscribe to TechRepublic’s How To Make Tech Work on YouTube for all the latest tech advice for business pros from Jack Wallen.