How to Mount disks larger than 2TB using GPT on Azure Linux VM

In this tutorial we will see how to mount disk of size 8 Terabytes on an Azure Virtual Machine that is running Ubuntu 18.0 Operating System.

How to Attach and Mount Disks larger than 2 TB to Azure Linux VM – TutLinks
How to Attach and Mount Disks larger than 2 TB to Azure Linux VM – TutLinks

Table of Contents

Introduction

During the VM creation, Azure provides the option of attaching extra disk space. But in order to use the attached disk space, you need to mount it manually.

The mounting process is different for disks of size higher than 2TB. It is recommended to make GUID Partition Table (GPT) to perform partitions for disks larger than 2TB. If your disk size attached to an Azure VM Linux is less than 2TB, then I recommend you to go through the video tutorial that walks you through How to attach and mount 1 TB disk to an Azure VM having Ubuntu OS or you can refer to the article Add a disk less than 2 TB to a Linux VM.

The attach and mount disk process is also applicable for typical Virtual Machines and does not necessarily have to be VM deployed on Azure. Also, the step by step tutorial to mount disk of size larger than 2TB is applicable to all Linux distributions viz., Debian and RHEL.

It is highly recommended to take a back up of the VM before proceeding with the following tutorial. If you are not sure about what you are doing or performing this on a production facing VM, ensure you consult IT admin. If you are just practicing on a fresh VM and have little hands on on shell and Linux, you are good to go.

Make Partition of the 8TB disk attached to VM

Lets find the 8TB disk that is attached to our Azure VM running Ubuntu 18 OS.

sudo lsblk -o NAME,HCTL,SIZE,MOUNTPOINT

Output:

NAME    HCTL        SIZE MOUNTPOINT
sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0       7G
└─sdb1                7G /mnt
sdc     3:0:0:0       8T
sr0     5:0:0:0     628K

We will make use of parted to make partition of the 8TB disk. parted is program for creating and manipulating partition tables In my case it is sdc and identified by /dev/sdc. Your disk could be identified by sda or sdb or sdc etc,. Ensure you refer the correct disk all across the tutorial.

sudo parted /dev/sdc

Output:

GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.

You will now enter in to the parted command prompt which can be identified by (parted) at the beginning of each line.

Issue the below commands excluding (parted). In the commands below (parted) is mentioned just to indicate the commands to be entered in the (parted) console.

Make GPT partition by giving mklabel gpt command.

(parted) mklabel gpt
(parted) unit TB
(parted) mkpart primary 0.00TB 8.00TB
(parted) print

Here, I have specified the memory measurement unit type as TB (TeraBytes). Also, I am making only one partition that takes all the size 8TB as mentioned in command mkpart primary 0.00TB 8.00TB.

Output:

Model: Msft Virtual Disk (scsi)
Disk /dev/sdc: 8.80TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      0.00TB  8.00TB  8.00TB               primary

Now that you have successfully created a single partition /dev/sdc1 of size 8TB, exit out of (parted) console by hitting q or quit command.

(parted) quit

Output:

Information: You may need to update /etc/fstab.

You will be informed to update /etc/fstab which we will be doing once we configure the disk partition mounted successfully.

Identify the new disk partition

Generally new partitions will be appended by 1 and then the number increases as we make more partitions of the same disk. You can also provide partition number of your choice that doesn’t collide with the existing partitions of the disk.

sudo lsblk -o NAME,HCTL,SIZE,MOUNTPOINT

Output:

NAME    HCTL        SIZE MOUNTPOINT
sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0       7G
└─sdb1                7G /mnt
sdc     3:0:0:0       8T
└─sdc1              7.3T <-- New Disk Partition 🎉
sr0     5:0:0:0     628K

We can observe the new disk partition sdc1 of size 8TB is created. Lets format and mount disk partition.

Format the disk partition

We need to format the file system of our new disk partition /dev/sdc1. This will take a while depending on the size of partition. I am using ext4 journaling file system to format the disk. Because ext4 is the default file system for many Linux distributions including Debian and Ubuntu.

sudo mkfs.ext4 /dev/sdc1

Output:

mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 1953124864 4k blocks and 244142080 inodes
Filesystem UUID: 43275f96-0636-4a8d-8c2e-18227487c4dd
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544, 1934917632

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

Mount disk partition

Before we mount the new disk partition that we just created /dev/sdc1, we will see the existing file system and other details by running the following command.

df -h

Output:

Filesystem      Size  Used Avail Use% Mounted on
udev            1.7G     0  1.7G   0% /dev
tmpfs           341M  668K  340M   1% /run
/dev/sda1        29G  1.4G   28G   5% /
tmpfs           1.7G     0  1.7G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           1.7G     0  1.7G   0% /sys/fs/cgroup
/dev/sda15      105M  3.6M  101M   4% /boot/efi
/dev/sdb1       6.9G   32M  6.5G   1% /mnt
tmpfs           341M     0  341M   0% /run/user/1000

We notice that /dev/sdc1 is not shown which indicates it is not yet mounted on to the file system. We will be mounting the 8TB disk to a directory named 8tbdrive at the top level directory /. Lets create a directory with the name 8tbdrive

mkdir /8tbdrive

Now lets mount disk partition /dev/sdc1 to point to /8tbdrive

sudo mount /dev/sdc1 /8tbdrive

Verify the disk /dev/sdc1 mounted on /8tbdrive

df -Th

Output:

Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  1.7G     0  1.7G   0% /dev
tmpfs          tmpfs     341M  668K  340M   1% /run
/dev/sda1      ext4       29G  1.4G   28G   5% /
tmpfs          tmpfs     1.7G     0  1.7G   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     1.7G     0  1.7G   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4      6.9G   32M  6.5G   1% /mnt
tmpfs          tmpfs     341M     0  341M   0% /run/user/1000
/dev/sdc1      ext4      7.3T   93M  6.9T   1% /8tbdrive

We see the disk partition /dev/sdc1 successfully mounted on the directory /8tbdrive we just created.

Automount disk partition

After the disk mounted successfully, we will Update /etc/fstab so that the OS reboots will automount disk partition. Run the command to obtain the UUID of the disk partition.

sudo blkid | grep -i "/dev/sdc1"

Output:

/dev/sdc1: UUID="43275f96-0636-4a8d-8c2e-18227487c4dd" TYPE="ext4" PARTLABEL="primary" PARTUUID="5bec9fdb-f0fe-435c-8318-11c5f6dd7bad"

We will place the UUID in the /etc/fstab along with partition and mount details. PARTUUID is also printed in the output but ensure you copy the value of UUID. In my case, the UUID is 43275f96-0636-4a8d-8c2e-18227487c4dd. Your UUID will be different.

Open the /etc/fstab in editor of your choice. I will be using nano.

sudo nano /etc/fstab

At the last line of the /etc/fstab add the following line. Be sure to change your UUIDmount directory and file system as ext4

UUID=43275f96-0636-4a8d-8c2e-18227487c4dd   /8tbdrive   ext4   defaults,nofail   1   2

nofail lets the OS continue to boot without any fail in case of any discrepancies.

Save and exit out of nano by hitting Ctrl + XY and hit return.

Run the following command to see there are no errors.

sudo mount -a

You should not see any output generated by this command which indicates no errors and you have non-breakable configuration mentioned in the /etc/fstab.

Congratulations🎉 , you have successfully mounted a disk partition of size higher than 2 Terabytes, an actual of 8TB disk on Azure VM with Ubuntu 18.0 OS. Bookmark this page ( Ctrl + D ) for quick future reference.

Summary

To summarize what we did,

  • Made a Partition of the 8TB disk attached to VM using parted and GPT.
  • Identified the new disk partition /dev/sdc1
  • Did the disk partition Format using mkfs.ext4
  • Mounted the disk partition /dev/sdc1 to a directory /8tbdrive
  • Configured the disk partition to Automount on reboots in /etc/fstab.

Navule Pavan Kumar Rao

I am a Full Stack Software Engineer with the Product Development experience in Banking, Finance, Corporate Tax and Automobile domains. I use SOLID Programming Principles and Design Patterns and Architect Software Solutions that scale using C#, .NET, Python, PHP and TDD. I am an expert in deployment of the Software Applications to Cloud Platforms such as Azure, GCP and non cloud On-Premise Infrastructures using shell scripts that become a part of CI/CD. I pursued Executive M.Tech in Data Science from IIT, Hyderabad (Indian Institute of Technology, Hyderabad) and hold B.Tech in Electonics and Communications Engineering from Vaagdevi Institute of Technology & Science.

Leave a Reply