I Built My Ultimate TrueNAS Storage Setup for Proxmox

Truenas proxmox setup

As you all know if you have been following here, I have been knee deep with TrueNAS with the new Proxmox plugin the last couple of weeks and have been having a blast testing out and trying new things with it. I had been running the first installation in my home lab on a nested virtualization setup that allowed me to try things out with the benefit of snapshots to rinse and repeat if needed. But since I was fairly comfortable with the solution, I decided to load TrueNAS on my TerraMaster F8 SDD Plus storage that I had been using previously with just traditional iSCSI LUN storage on top of Terra OS. I think this could be my ultimate TrueNAS storage setup for Proxmox in the home lab and really happy with how it is performing. Let me show you the details.

Terramaster F8 SSD Plus for TrueNAS

First, just a brief overview of the NAS I am using for the TrueNAS Proxmox plugin. I first wrote about the F8 SSD Plus about two years ago. You can read my initial post on this little all NVMe NAS here: Terramaster F8 SSD Plus Review: All Flash NAS with NVMe. I have really enjoyed this little NAS and even though you don’t get full speed out of the PCI lanes for the NVMe drives, I have still found performance to be really good with the unit since it has 10 gig networking and all NVMe.

I have ran VMware vSphere environments on this NAS as well as traditional Proxmox iSCSI on top of TOS from TerraMaster. But, since I have been experimenting a lot with TrueNAS with the new plugin, I wanted to load it up with TrueNAS and put it through the paces there.

Loading up the f8 ssd plus with nvme for truenas
Loading up the f8 ssd plus with nvme for truenas

Also, what I like about the F8 SSD Plus is that it is not a huge, power hungry NAS device. It sips power very efficiently which is cool to think you can have a low wattage NAS that can deliver 50-75K IOPS!

My TrueNAS setup

Inside of the F8 SSD Plus, I have (8) drives configured. I have two older Samsung 960 EVO 1TBs for the TrueNAS installation. Then I have (6) Samsung 980 Pro 2TB drives for the data pool. Here is how I configured everything.

This is during the installation process on the Terramaster F8 SSD Plus:

Choosing the 960 evos for the boot drives loaded with truenas
Choosing the 960 evos for the boot drives loaded with truenas

After getting TrueNAS installed and getting the network configured on my storage VLAN, I logged in and started configuring the storage that would be used for Proxmox VMs. So, I decided on (3) two-drive mirror VDEVs.

I chose this because this TrueNAS pool is going to be used only for Proxmox VM disks. With this, I want to make sure I have the most responsive random I/O capabilities. This is where the mirrors really shine. I am not as worried about maximum capacity out of the drives. ZFS can also spread work across the three mirrors. It gives me about 6TB of useable storage that is geared towards performance.

Also, in case you are wondering, it shows up as one pool with three mirrored VDEVs, so Proxmox sees one storage location through the plugin, not three.

Choosing 3 two drive mirrors for 3 vdevs for best performance
Choosing 3 two drive mirrors for 3 vdevs for best performance

Why not just put all the drives into a RAIDZ array for more space? Well again, for Proxmox workloads, three mirrored VDEVs give your ZFS more places to handle the types of small random VM reads and writes that happen, when you compare this to a single six-drive RAIDZ VDEV.

Useable capacity for the 3 vdevs in truenas
Useable capacity for the 3 vdevs in truenas

One of the things I like also about mirrors is they make replacing and resilvering a failed drive easier. I don’t mind to give up the capacity to get those benefits: a six-drive RAIDZ layout would hold more data, but the mirrors better match my priority of responsive VM storage

Another look at the truenas vdevs i have configured
Another look at the truenas vdevs i have configured

Loading the TrueNAS plugin on my cluster

You may have seen my detailed blog post on this, so I am not going into all the details of installing the plugin. I just went through the plugin TUI workflow on all (5) of my cluster nodes in the home lab.

Check out the full blog post on the walkthrough here: I Installed the New TrueNAS Proxmox Plugin in My Home Lab. Here’s the Setup.

Installing the truenas proxmox plugin on my proxmox ve server cluster nodes
Installing the truenas proxmox plugin on my proxmox ve server cluster nodes

Be sure also to update your TrueNAS plugin to the latest version. The cool thing is it has a built in menu choice to update the plugin and it will do it across all of your cluster nodes as well.

Updating the truenas plugin across all cluster nodes
Updating the truenas plugin across all cluster nodes

After updating all the cluster nodes and clusterwide installation complete.

Cluster wide installation of the truenas plugin on proxmox completes successfully
Cluster wide installation of the truenas plugin on proxmox completes successfully

Provisioning the TrueNAS storage as NVMe/TCP (modern, lower latency) storage. I wanted to try this, especially on the all NVMe NAS.

Choosing nvme over tcp instead of iscsi
Choosing nvme over tcp instead of iscsi

Final storage configuration overview of the new storage provisioned in my proxmox cluster.

Adding the configuration to the proxmox nodes
Adding the configuration to the proxmox nodes

The storage configuration is finalized.

Truenas proxmox storage configured successfully
Truenas proxmox storage configured successfully

One detail I missed or the auto provisioning got wrong?

One of the details I missed or that the storage plugin should do but doesn’t is when I tried to create a virtual machine in Proxmox, even though it was successful in adding the storage, etc. It failed with the following: “TrueNAS NVMe-oF service is not running…. This was interesting since I hadn’t seen any other errors.

Nvme over tcp service not running error in proxmox ve server
Nvme over tcp service not running error in proxmox ve server

So, I went back over to TrueNAS and started the NVMe-oF service.

Turn on the nvme over tcp service in truenas if using this in truenas plugin
Turn on the nvme over tcp service in truenas if using this in truenas plugin

Benchmark test

After starting the service, I returned back over to Proxmox and was able to create the VM without any other issues. Here are the details fo the virtual machine that I created.

Details of the ubuntu 26.04 virtual machine used for the benchmarks for disk performance
Details of the ubuntu 26.04 virtual machine used for the benchmarks for disk performance

The next thing I did after intalling Ubuntu 26.04 in the virtual machine I created was login to Ubuntu and install fio for benchmarking purposes:

sudo apt install -y fio
Loading fio on a test ubuntu workstation vm
Loading fio on a test ubuntu workstation vm

The tests that I ran inside the VM

First, I ran a 70/30 mixed random test, which is a really typical mix for VM workloads.

fio --name=vm-mixed --filename="$HOME/truenas-benchmark/testfile" \
  --size=4G --rw=randrw --rwmixread=70 --bs=4k \
  --ioengine=libaio --iodepth=16 --direct=1 \
  --time_based --runtime=60 --ramp_time=10 --group_reporting
Mixed workload test in proxmox targeting the truenas zfs storage
Mixed workload test in proxmox targeting the truenas zfs storage

Next, I ran a sequential write test:

fio --name=seq-write --filename="$HOME/truenas-benchmark/testfile" \
  --size=4G --rw=write --bs=1M --ioengine=libaio --iodepth=16 \
  --direct=1 --end_fsync=1 --group_reporting

Finally, a sequential read test:

fio --name=seq-read --filename="$HOME/truenas-benchmark/testfile" \
  --size=4G --rw=read --bs=1M --ioengine=libaio --iodepth=16 \
  --direct=1 --readonly --group_reporting

During testing, this is what I saw with the CPU:

Cpu usage in truenas during the benchmark tests
Cpu usage in truenas during the benchmark tests

This was networking during the random mix IO test:

Network activity in truenas during the proxmox benchmark
Network activity in truenas during the proxmox benchmark

Benchmark results measured from the TrueNAS pool

The first test as I showed above with the FIO command was a 4K random I/O test. This consists of 70% reads and 30% writes in a mixed test. The queue depth is 16 and I tested with a 4 GB file. Each run I did lasted for 60 seconds. What were the results?

  • The first run delivered 36,400 read IOPS and 15,600 write IOPS, or about 52,000 combined IOPS.
  • A second run came in at 35,200 read IOPS and 15,100 write IOPS, or about 50,300 combined IOPS.

Both runs happened without any I/O errors. And both kept average read and write latency around 0.3 milliseconds which is awesome. At the 99th percentile, latency stayed below 0.9 milliseconds in the second run. There were a few slower requests, but the overall result looked strong for a single VM accessing the TrueNAS network storage.

I then looked at testing sequential throughput using 1 MB blocks. So, with this test, writing the 4GB test file averaged about 857 MiB/s, or 899 MB/s. Reading it back averaged bout 1,113 MiB/s, or 1,167 MB/s. This number is roughly 93% of the theoretical 1,250 MB/s carried by a 10GbE link before protocol overhead.

Here is a table that helps to show the test results in a bit easier to read format.

Test from the Ubuntu VMResult
4K random I/O, 70% read, first runAround 52,000 combined IOPS
4K random I/O, 70% read, second runAround 50,300 combined IOPS
Average random I/O latencyAround 0.3 ms
Sequential write857 MiB/s (899 MB/s)
Sequential read1,113 MiB/s (1,167 MB/s)

The limitation with the F8 SSD Plus is that it has PCIe 3.0 x1 connections to its NVMe slots. So my Samsung 980 Pros can’t run at their PCIe 4.0 capable speeds in the NAS. It also has a single 10GbE port, which gives you a hard limit on traffic potential between the NAS and Proxmox. All in all though, I think these benchmark results are really good for a single VM considering but they don’t really show the potential across several VMs. However, I have experience with this NAS running multiple VMs in the past, and it works well.

Keep in mind too, my test file was 4 GB, and my F8 SSD Plus came with the stock 16 GB of RAM. TrueNAS may have served some of the reads from ARC cache instead of from the SSDs just as a note. The sequential tests also finished in under five seconds each, so they show the short-burst throughput instead of the performance over a long transfer.

I am happy with the results and what I am seeing. The workloads on this little NAS “feel” snappy. The plugin provisioned disk is giving my Ubuntu VM roughly 50,000 to 52,000 mixed 4K IOPS with low average latency. The sequential benchmarks also helped to stress the networking to the limit of what the 10 GbE can do.

Wrapping up

Honestly, I am liking my iSCSI configuration and setup with Proxmox VE Server and TrueNAS better than when I was running this NAS with VMware vSphere. To me, the layers have come together in a way that we haven’t seen before now with Proxmox and TrueNAS storage. And I think the admin side of things now is getting much smoother for running shared storage between your Proxmox VE Server cluster nodes. Also, I like the flexibility with the 8 slots that I get with the F8 SSD Plus since I can do things like creating 3 mirrors of 2 drives each for 3 VDEVs which give you better performance for virtual machine workloads. What about you? Are you rethinking your TrueNAS configuration? Definitely check out running TrueNAS on your NAS with the new TrueNAS plugin.

Google
Add as a preferred source on Google

Google is updating how articles are shown. Don’t miss our leading home lab and tech content, written by humans, by setting Virtualization Howto as a preferred source.

About The Author

Brandon Lee

Brandon Lee

Brandon Lee is the Senior Writer, Engineer and owner at Virtualizationhowto.com, and a 7-time VMware vExpert, with over two decades of experience in Information Technology. Having worked for numerous Fortune 500 companies as well as in various industries, He has extensive experience in various IT segments and is a strong advocate for open source technologies. Brandon holds many industry certifications, loves the outdoors and spending time with family. Also, he goes through the effort of testing and troubleshooting issues, so you don't have to.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted