Skip to main content

Configuring NVME Flash Drives

Equinix Metal™ offers server configurations that include NVMe drives, which are PCI-e attached flash cards. With NVMe drives, the common Linux disk utility, fdisk can not recognize or partition them. You can, however, use GNU parted to partition NVMe drives.

Currently, the m3.large.x86, s3.xlarge.x86, n2.xlarge.x86, m2.xlarge.x86, and x2.xlarge.x86 servers all come with NVMe drives.

This documentation provides an example for partitioning, formatting, and mounting an NVMe drive on an m3.large.x86 running Ubuntu 20.04 to help get you started using NVMe drives.

Checking the Drives

First, run lsblk to list all the block storage devices.

lsblk

You should see a response that lists the block storage devices in a tree. The NVME drives should show up as nvme0n1 and nvme1n1.

NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 1.9G 0 part [SWAP]
└─sda3 8:3 0 221.7G 0 part /
sdb 8:16 0 223.6G 0 disk
nvme0n1 259:0 0 3.5T 0 disk
nvme1n1 259:1 0 3.5T 0 disk

Installing parted

If it is not already installed, you will need to get GNU parted.

sudo apt update
sudo apt install parted

Creating the Partition Table

Use parted to create a new GUID partition table (GPT) on nvme0n1.

parted -a optimal /dev/nvme0n1 mklabel gpt

The option -a optimal sets the alignment-type for the new partition to optimal, and the mklabel gpt is what creates the GPT partition.

Creating the ext4 Partition

To create the EXT4 partition, use parted <drive> mkpart primary ext4. This example command creates a single, large EXT4 partition.

parted -a optimal /dev/nvme0n1 mkpart primary ext4 0% 100%

You can then use (parted) print in interactive mode to check that the partitioning was successful.

parted /dev/nvme0n1
>
GNU Parted 2.3
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print

The response should look something like:

Model: Micron_9300_MTFDHAL3T8TDP (nvme)
Disk /dev/nvme0n1: 3841GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 3841GB 3841GB primary

(parted)

Entering (parted) quit will exit interactive mode.

Creating a EXT4 Filesystem

Then, create an EXT4 filesystem with mkfs.ext4.

mkfs.ext4 /dev/nvme0n1p1

Mounting the Drive

Once partitioning and filesystem formatting is complete, you can mount the drive.

mkdir /mnt/drive
mount /dev/nvme0n1p1 /mnt/drive -t ext4

Persisting the Configuration

In order to make the new volume persistent you will need to update /etc/fstab with the drives UUID.

First, the blkid command can be used to get a list of UUIDs for your devices.

blkid
>
/dev/sda2: UUID="b82f7e7d-b0c2-4c70-b7b7-c8627d95f8c3" TYPE="swap" PARTLABEL="SWAP" PARTUUID="727a1e48-958c-4a14-9833-4a2bd234ce0a"
/dev/sda3: LABEL="ROOT" UUID="ca604de1-d7d3-48fd-9a98-ee49ae890871" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="ROOT" PARTUUID="9606a493-e18b-4322-8665-25fd5d980ca5"
/dev/nvme0n1p1: UUID="ed876ef8-0726-43d5-9c06-db7ad33b3d79" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="1dbfc394-61ad-4e77-ad7f-286fc1c491c8"
/dev/sda1: PARTLABEL="BIOS" PARTUUID="796a0e77-35e8-44dc-a77c-2086babeebe1"

Once you have the correct UUID for the NVMe drive, add it to your fstab file. For example, add the line:

UUID=ed876ef8-0726-43d5-9c06-db7ad33b3d79   /mnt/drive  ext4    defaults    0   0

Your drive should be mounted on subsequent reboots.