Installing an NVMe SSD on Nvidia Jetson Xavier

Ramin Nabati
7 min readOct 6, 2018

--

Fig. 1: Jetson Xavier Developer Kit (Courtesy Nvidia)

The Nvidia Jetson Xavier has a 32 GB eMMC 5.1 Flash Storage. This may be enough to start exploring the Jetson Xavier and running simple deep learning algorithms, but you will probably end up needing more storage capacity and also faster read/write speeds for more serious applications. The Jetson Xavier Developer Kit has a USB3/eSATA port that could be used to power a 2.5" SSD, but the Developer Kit also has an M.2 Key-M connector. This allows us to install an NVMe SSD which has a much smaller form factor. In this tutorial, I’ll go through the process of installing an NVMe M.2 SSD on the Nvidia Jetson Xavier developer kit. I assume you have already flashed the Jetson Xavier using Nvidia JetPack and you are able to power up the device and boot to Ubuntu.

I chose the 512GB Samsung 970 Pro NVMe SSD for my setup. The write speed of the 970 Pro is slightly higher than the 970 Evo model (2700 vs 2500 MB/s) which might be an important factor when using the Jetson Xavier for recording and processing video from multiple cameras in real time. Also the SSD lifespan, measured in Tera Bytes Written (TBW), is significantly higher in the Pro model (600 vs 300 TBW).

Now let’s get started installing the SSD!

Fig. 2: The 512 GB Samsung 970 Pro NVMe SSD and the Jetson Xavier developer kit

The M.2 connector on the Xavier developer kit is located under the heat sink. In order to access this connector, we need to remove the heat sink from the developer board. We start by removing the 4 screws attaching the heat sink to the board using a Phillips screwdriver. Turn the developer kit upside down and locate the screws shown in figure below.

Fig. 3: Heat sink screws that need to be removed are shown in red circles

After removing the screws, we can remove the two stands from the board, as shown in Fig. 4.

Fig. 4: The stands detached from the developer board

Now we need to gently pull the developer board up while holding the heatsink down, to detach the heatsink and Xavier chip from the developer board. There is a wire going from the heatsink to the board, so be careful not to pull the board too hard to damage this wire. You may need to wiggle the board a little bit to detach the connectors between the board and the heat sink. Fig. 5 shows the detached board and heat sink.

Fig. 5: Developer board detached from the heatsink and Xavier chip

Just to make sure the wire is not accidentally damaged, gently remove the cable from the board by pulling the connector with a pair of tweezers. Do not pull the wire itself. Although we don’t really need to detach this connector, it makes installing the SSD much easier. If it is not detached, the developer board cannot lay flat on the desk because the wire is too short.

Fig. 6: Heat sink wire detached from the developer board

There is one screw on the developer board that holds the NVMe SSD device in place after installation. Locate and remove that screw before putting the SSD in place. Now insert the NVMe SSD with a 30 degrees angle in the M.2 connector and gently slide it in. You may need to wiggle it just a little bit to get it past the friction of the M.2 connector. If installed properly, the SSD should be hanging off the developer board as shown in figure below.

Fig. 7: NVMe SSD pushed into the M.2 connector

Gently push the SSD down until it is flat against the developer board and use the screw to hold it onto the board. If the screw holes on the board and SSD do not match perfectly, the SSD is probably not completely pushed into the M.2 connector.

Fig. 8: The SSD installed and secured on the board

Now connect the heat sink connector back to the developer board and put the board on the heatsink. Make sure the Xavier module connector on the heat sink matches the connector on the developer board as shown below.

Fig. 9: Wire connected and board ready to be put back on the heatsink

Gently push the board down until the connectors are completely engaged. Put the two stands back on the board and secure them with the screws. Done! The SSD is now successfully installed and ready to use. Now we just need to power up the board, format the SSD, create a partition and mount it. If you need help doing these steps, continue reading. If not, thanks for reading this tutorial and have fun with the (now even more) powerful Jetson Xavier!

Fig. 10: Stands are put back in place

To set up the newly installed SSD, connect a monitor, keyboard, and mouse to the Xavier developer kit and power it up. Log in to your account in Ubuntu and open the Disks app. You should be able to see your SSD in the list of disks on the left, as shown in figure below. Note that your SSD may have a different name. From this window, you should be able to see the path to the newly installed SSD. In my case, the path is /dev/nvme0n1. We can format the disk and create partitions using the Disks app, but I prefer to do it in a terminal.

Open a terminal and use the following command to specify the partitioning standard we want to use for the new SSD. Make sure you use the right path in this command because the path to your SSD may be different.

sudo parted /dev/nvme0n1 mklabel gpt

You need to confirm the above command by typing yes in terminal when prompted. This command should only take a few seconds to complete. Once completed, go to the Disks application again and select the SSD on the left. Now, there should be a + icon under the Volumes for creating partitions, as shown in figure below.

Click on the + to create a partition and choose the partition size. I want to have only one partition so I choose 512GB as my partition size and click Next.

Now we need to choose a name for the volume and select the partition format. Type in your partition name and choose the Ext 4 format and click on Create.

In my case, the path to the newly created partition is /dev/nvme0n1p1 . We need this path and also the device UUID for the next step, so have the Disks application open to be able to copy them when needed.

Open a terminal and use the following commands to create a mount directory for mounting the partition. I prefer to have the partition mounted in /rootin a directory named xavier_ssd. I also change the mount directory permissions to 755 (readable by User, Group and World, writable by User, executable by User, Group and World). Use your own SSD device path in the mount command as it may be different from mine.

sudo mkdir /xavier_ssd
sudo mount /dev/nvme0n1p1 /xavier_ssd
sudo chmod 755 /xavier_ssd

To mount the partition automatically at boot, we need to add the new partition information to the /etc/fstab file. We don’t want to accidentally damage this file, so let’s make a backup first before editing it:

sudo cp /etc/fstab /etc/fstab.bkup

Now copy the SSD UUID from the Disks app, open the fstab file by typing sudo vim /etc/fstab in terminal. Add the following line at the very end of the file, replacing <uuid> with the device UUID we just copied from Disks:

UUID=<uuid>  /xavier_ssd  ext4  defaults  0  2

Save the changes and close the file. Now to check if everything is working, let’s unmount the device and mount it again:

sudo umount /xavier_ssd
sudo mount -a

You should be able to access the SSD partition now by typing cd /xavier_ssd in a terminal.

--

--

Ramin Nabati

Autonomous Vehicle Sensor Fusion Engineer at Ford Motor Company