First off, if you don’t like reading long stories, this probably isn’t the right post for you. I originally was doing this for only my own benefit but I decided to share it, in case my learning would be helpful to anyone in the future.
For the TL:DR version you can read “Background” and then skip all the way to the bottom for “Overall thoughts”
Background
I have three devices on my network providing a variety of services. I have an old minipc running vmware hosting several vms. I have a Synology device which provides NAS services via SMB and NFS as well as hosts a docker with jellyfin. Lastly, I have a physical Linux server that holds my borg backups, a replica of the files on my NAS which are too big for backups and I use it to replicate many zfs snapshots to. It also handles cloud syncs of my backups.
I have been considering on how to improve this situation in a variety of ways:
- The VMware server works fine but it lacks any kind of redundancy. It also seems superfluous since it is an old 6th gen dual-core i3.
- I am increasingly frustrated with Synology’s lack of customizability and some of it’s quirks.
- I am tired of the management involved in managing my own storage/backup server.
With the knowledge that I want something a little more “hands off” than building my own it seemed like my best options were keeping my Synology or switching to one of the off the shelf NAS solutions. After a little investigation and brief testing, I narrowed it down to Unraid or TrueNAS Scale. I already had the Synology so I spent some time looking at TrueNAS Scale and Unraid to see if either of them would be improvement over the Synology or my existing server. What I found surprised me.
The test
I wanted to test both the way I use Synology today as well as what it would take to move my VMs. My VM needs are fairly lightweight with the exception that I need to support multiple vlans. So here is what I am testing:
- Build an array with 3 disks
- Encryption
- Setup shares via SMB to multiple users using both user and group permissions
- Setup NFS shares
- Setup link aggregation
- Install jellyfin in a container
- Setup automated snapshots with retention rules
- Setup multiple VLANs
- Add a VM and connect it to one of the VLANs
- Expand the storage with an additional disk
- Configure snapshots
- Setup an rsync server
Unraid
Install
Unraid is paid software solution that runs off of and is licensed to a physical USB key. It has a reputation for being polished and easy to use. The installation was somewhat of a pain from Linux. They provide an installer which creates the filesystem on a key for both Windows or MacOS. They also provide manual steps if you prefer. I did a search and found a blog post referencing an installer and found a Debian package. I downloaded and opened the package and it contained a monolithic binary. After installing some deps, I was able to run it and create the USB. I passed the USB device through to a VM and booted off it. It provided an ip address which I pointed a web browser to. I was asked to set a password and then forced to create an account so I could access a 30 day trial of Unraid. Then it wrote some activation data to the USB and I was able to start using unraid. So far, not so easy.
Create Array
Once I could actually start using Unraid. I logged into a nice looking dashboard that unsurprisingly had no storage configured. I clicked on the “main” tab of the interface since I didn’t see anything that seemed related to storage. From there I was able to assign the disks to be part of the array or setup up to 2 parity disks. I added a parity disk and two drives to the array. I then clicked on the button to start the array. After running for a short time, the array started and the page rendered in a different view to show the running array. It showed the status of all the drives as well as a set of buttons to control the array. However, both the devices in the array showed an error that read “Unmountable: Unsupported partition layout”. I did a search and found a forum post that pointed out that if you wait, a format button magically appears in the “Array Operation” section at the bottom of the page. Sure enough, when I went back, a new button had appeared. Once I formatted the drives, the array was operational.
Encryption
Enabling encryption was easy. You simply select the encrypted version of the filesystem. You can use a keyfile or a password. If you use a password, the array will not be started after a reboot and you need to enter the password and start the array.
Encryption is managed on a per disk basis.
Encryption is implemented via luks.
Add Users and Groups
There is a tab named “users”. From here you can easily add a user. Basically set a username and password and click “Add”. Very simple.
Of course, it was at this point that I noticed that there didn’t appear to be any way to add groups. A quick search confirmed that.
SMB Share Setup
To setup a share you select shares and then “Add Share”. You enter share name. Since we aren’t using raid here, there is a list of options related to which devices are used for this particular share. The defaults are sane here though so you can pretty much just put the name in and then click the add share button.
This creates a new share at the root level of the array. As far as I can tell there is no way to create shares outside the root.
Once you add the share, it adds a new section called “SMB Security Settings”. By default it creates a public share. There are 3 security levels. Public, Secure and Private. Public is anyone can read and write without an account. Secure means anyone can read but you need an account to write. With Private, you need an account to read or write. If you select something other than public you can say which users have access to the share.
Then I tried to access the share and…I couldn’t connect it.
After some searching, the issue was you have to export the share. Apparently, when most people create SMB shares, they don’t want them to be available…
NFS Shares
OK, back to the Shares tab and…no obvious way to create NFS shares. A little searching and NFS is disabled by default. Head over to settings, enable NFS and then back to Shares. Now our shares have a new section for NFS. Great!
Except…for some reason the NFS section doesn’t have any help or explanations so what do the settings do? Time for some more web searches I guess.
After some searching. The same 3 security levels exist but they have different meanings. Public is basically normal NFS access. Your permissions are based on the POSIX permissions of the files. Secure doesn’t allow writing. Private allows you to write rules that further restrict things.
So, we use public right? Well…probably not. You see, files created via SMB are set to allow other
rw access. So public ends up meaning anyone can do anything. So, I guess we want Private with rules. Not a huge problem except…what goes in the rules field?
After some additional internet searches, I found a forum post stating that the rules is the same as what goes in /etc/exports
. OK. The good news is that gives us a lot of flexibility on what we can do. The bad news is that it is done in the least user friendly way possible.
Setup Link Aggregation
I don’t see anything obvious so let’s check the “Settings” tab. There is a network settings choice. That seem logical. Unraid automatically puts two interfaces in a bond with an active/passive configuration. If you want to change that, it tells you need to first disable the VM and docker services. To do this, you have to go to settings and individually disable them. Then you can make the changes. Unraid is directly exposing the Linux bond modes so you have a lot of flexibility. It also means that you need to know what all those things mean. The change is easily made and then you click apply. After that, you need to go back to settings and re-enable docker and VMs.
Jellyfin Container
First, we head over to the Apps tab for the first time. Wow. There are lot of Apps here. According to the stats, 2193 docker applications. Not sure how well curated the list is but it is impressive list.
Search for Jellyfin and there are 4 of them. Err…one is labeled “Official”, let’s go with that one. After clicking install I get a list of detailed docker options. I ignore them all and click “Apply”. Oops, I ignored some required fields, fair enough. I fill those out and click apply. Some docker output shows up on the page and then it says it is complete.
How do I see the running app now? Clicking on installed apps just shows me the apps. Oh, there is a Docker tab. Let’s look there. OK, there it is.
Can I hit from the outside of the server? Yes, works perfect.
So…that was easy. Honestly, I am not sure it could be much simpler than that.
VLAN setup
OK, now we need to configure some VLANs that I can expose to the VM I will setup in the next step. Back to the network settings. Oh, right, can’t do anything here until I manually shutdown the docker service. Over to Settings->Docker and then back to Settings->Network.
OK, there is an enable VLAN option. Add my VLAN’s click apply and…the network settings tab completely breaks and the USB drive becomes disconnected. OK, let’s reboot the appliance.
After a quick reboot we are back and the network seems to be in a better place. It looks like the VLANs added. They aren’t working though.
I suspect that I am not getting the VLANs into my VM properly and this would work fine on bare metal. They look to be correctly setup so I am going to call this a success.
Create a Linux VM
Over to the VMs tab next. Click a button to add a VM and…whoa. That is a lot of stuff. Looks like a ton of libvirt/QEMU options are exposed. Let’s leave everything at default except the disk size and the ISO to boot off of. Hmm…there are no ISOs on the list. How do I get it an ISO? Do I upload it somewhere? Let’s head back to shares. Oh, it created an isos share, that seems like where it needs to go. Modify the share, export it and set permissions. Copy the ISO over and now I can pick it from the VM screen.
Hmm…it boots but it isn’t booting off the ISO. Let’s check the settings. Oh need to shut it down to change the setting. Select “Stop” and it is shutting down…no it is running again. Try again. Same thing.
OK, how about if we shutdown the VM services completely? OK, that worked. A bit nuclear though.
OK, adjusted the boot order. Now it works but no network. Shutdown the VM from inside this time. Still says running but it clearly isn’t. Oh, I see, the running status doesn’t refresh properly unless I refresh the entire page. Change the network settings and now it is working. No issues. The VM section is not the most user friendly section. You definitely need to know what you are doing there.
There is no support for VM snapshots.
Add an additional disk
Go to the Main tab, stop the array. Assign the disk to the array. Start the array. Wait for the format button to appear, format the drive.
That is it. Since the disks in Unraid are technically independent, this was very easy and intuitive.
Snapshots
Ugh…there is no UI for zfs snapshots. There is apparently a UI for btrfs snapshots but for zfs, you need to install an app and then configure it entirely from the console.
Rsync server
If you want to push from a client to an rsync server, you need to install a container for it. There is an app in the library for this use case.
Other thoughts and considerations
Unraid is not free. You pay for a license with 1 year of version updates or pay for a lifetime license that provides upgrades perpetually. I don’t really have a problem with paying money for things. However, for my use case, Unraid just isn’t a great fit. I found the whole experience quite frustrating.
As someone who has worked with many different NAS/VM/Container solutions over the years, I found Unraid incredibly unintuitive. I had to do way too many web searches to figure out how it worked. I can accept that the target audience is probably someone who doesn’t have the same experience that I do. However, I would ask if that audience would really knows what a parity disk is, how to construct the NFS rules or how to set the many, many options presented on the VM page. Ultimately, it felt like a really strange mix of working hard to make things simple while at the same time exposing a bunch of low level stuff with no filter. It is like Jekyll and Hyde.
That being said, it worked fine for the most part. I was able to setup shares, containers and VMs. I was able to manage my storage. Also, now that I know how it works, it isn’t particularly hard to manage.
I guess this leads us to the first test. Is it better than Synology?
- Ease of use - Not even close. Synology is far more polished and easy to use.
- Functionality - Even. There are things that both can do that the other can’t.
- For my specific use case - Yes. Unraid would be the better choice over Synology for me.
TrueNAS Scale
Install
TrueNAS Scale has a reputation for being a bit harder to use so I am a little concerned after all the little challenges with Unraid that this is going to be quite the adventure.
The install is easy, download an ISO and install it like you would any OS. It then reboots and gives you a menu of functions you can perform from the console.
Create Array
After logging in, I am presented with a mostly empty dashboard since I don’t have any storage created yet. There seems to be a storage option so I click on that. There is a large button in the middle of the screen that says “Create pool”. First I give the pool a name and click the optional checkbox for encryption. Selecting that takes me to a screen where I select my raid type and the disks I want to add to the pool.
Once that is done, I can either click through a bunch of additional steps all clearly marked optional or click on “Save and go to review”. I do the latter. I click create pool and I get a warning that my disks will be erased if I continue. I then get prompted to download a copy of my encryption keys and that is it. The pool is created and online.
Encryption
Encryption was trivially easy. But it is also flexible. It is zfs encryption which means I can encrypt at any level. The pool itself is encrypted with a key but the datasets below that pool can inherit that key, use a different key or a password or not have encryption at all. It can all be configured through the GUI in an obvious and intuitive way.
If you set a password on any dataset, that dataset won’t be unlocked until you enter the password.
Add Users and Groups
There is a section called credentials. Under this we have “local users” and “local groups”.
Here we have a rich interface for configuring users that lets you set granular permissions and groups.
I setup a couple of users for testing SMB in the next step.
SMB Share Setup
I first created a dataset to share. This can be at the root or under another dataset, it makes no difference how you choose to layout your pool. I then switch to the “Shares” section. Once there there are sections for both SMB and NFS sharing. I add an SMB share and select the newly created dataset.
From here you can easily setup the basic share or information or there is an advanced button that hides even more advanced functions. Shares are setups with ACLs by default but you can disable that. Once I added the share I was informed that the SMB service wasn’t running and it asked me if I wanted to start it.
I then clicked on the shield icon to set the permissions for the users.
It pretty much just worked.
NFS Shares
The process for NFS was on the same screen basically worked the same way except this time I enabled NFS-like options.
It supports user mapping. The only problem I have is it doesn’t support different permissions per-host which is a bit limiting.
Setup Link Aggregation
Select the network option, select Add, select Link Aggregation. Select the type of aggregation and then the interfaces you want to aggregate.
Easy.
Jellyfin Container
We have an Apps section here as well. There are only a little over 100 Apps right now though due to their recent switch to Docker. I suspect this will increase over time but it is minimal at the moment. Luckily, Jellyfin was on the list so I selected it and clicked install. I added my media directory with a local path, installed it and it took me directly to the list of running containers.
I accessed it and it worked. Very simple.
VLAN setup
In the network section, select interfaces then Add then VLAN. Set the basic options there.
Simple. It didn’t work but I am still blaming my VM config on this one.
Create a Linux VM
There is a virtualization section. From there you can add a VM. There is more of a stepper approach to configuring the VM one step at a time. The options are the basics of what you need but it is very limited compared to what Unraid offers. On the other hand, it is far easier and more intuitive to use.
I was not able to get the network working in the VM. It is possible this is due to me testing in a VM.
There is no support for VM snapshots. However, TrueNAS deploys each VM to a zvol and you can easily take snapshots of the zvol itself.
Add an additional disk
This is unfortunately not currently available. It is coming in the next version which will hopefully be available later this month.
Snapshots
In the datasets section there is full support for snapshot functionality. Schedules, retention rules, recursive snapshots. They can be configured on a per dataset basis if desired. Manual snapshots are also available. You can setup snapshot replication jobs to push or pull from other devices.
There is also full support for cloning a snapshot or performing a rollback to a prior snapshot.
Rsync server
Both push and pull rsync jobs are available. You can also push from a client using SSH. However, if you want to push from a client to an rsync server, you need to install a docker for it. There is an app in the library for this use case.
Other thoughts and considerations
The RAM cache makes it absurdly fast when transferring smaller amount of data. There is no way to browse the files in the GUI which would be nice to have. The documentation for TrueNAS scale is much better than Unraid, but the in app help for TrueNAS is humorously useless.
One big improvement over Unraid is that the when something is needed, it doesn’t tell you to go find a setting and change it, it asks you if you want to change the setting and does it for you. Also, all the sections are cross-linked. So you can always find the settings you need pretty easily no matter where you are.
You may notice that the section on Unraid is quite a bit more verbose than the section on TrueNAS Scale. The reason for that is, for me, TrueNAS had almost no learning curve at all. I found almost everything exactly where I expected it to be and in most cases, it just worked like I expected it to work. While it isn’t perfect, it lines up very closely with my needs.
Synology
I setup my Synology a long time ago and I am not going to tear down my running array down so I can set it up from scratch but I remember the setup being extremely straightforward. In general, Synology is polished and easy to use. It also supports all the features I have listed above. Snapshots, encryption, containers, VMs, rsync, SMB, NFS, expanding an existing array.
I want to replace it because that the ease of use comes at the cost of flexibility in some cases. Additionally, I use zfs in most of my network and being able to replicate snapshots to the device would be deeply advantageous. Synology supports snapshot replication but it is btrfs which isn’t that helpful for me.
Other products
I also looked briefly at OpenMediaVault, XigmaNAS, RockStor and EasyNAS.
- OMV was not really what I need. As it’s name implies, it was mostly focused on serving media.
- XigmaNAS was not what I was looking for either. It is quite dated at this point.
- Rockstor was the closest to my needs compared to the rest of this group but I would never have chosen it over TrueNAS or Unraid so I didn’t fully investigate it.
- EasyNAS was just a plain NAS.
Overall thoughts
This was an interesting exercise that I have wanted to try for a while. I learned a lot about Unraid and TrueNAS Scale in the process.
If I was to consider the 3 solutions comparatively, it would break down like this for me:
- Unraid has a learning curve but it isn’t awful. TrueNAS is intuitive and easy to use if you have a familiarity with storage technology. Synology is intuitive and easy to use for almost anyone.
- TrueNAS is free. Unraid is paid software. Synology is a physical appliance.
- The Unraid licensing key is kind of a pain.
- For VMs, Unraid offers a ton of options but it isn’t easy to use unless you understand those options. TrueNAS has fewer features but those features are polished and easy to understand. Synology is the weakest in this area. None of them are a replacement for ESX or Proxmox.
- Unraid has a huge selection of applications. It is almost staggering how many there are.
- TrueNAS has excellent options for data protection. Snapshots, snapshot replication, encrypted cloud sync, rsync jobs and more. Synology is similar but the backup solutions there are too often proprietary.
- Unraid makes it very simple to add and remove storage.
- User and group management is best on TrueNAS, followed by Synology with Unraid really lacking in this area.
- Shares are more flexible/powerful on TrueNAS and Synology than Unraid
I am think I am going to replace my Synology with some dedicated hardware running TrueNAS Scale. If that works out I will also use it to replace my Linux server.