Trying to put together a file server/NAS solution for a small business

Hi guys,

I hope I'm posting this in the right category.
I'm currently trying to figure out a suitable file server or NAS solution for the business I work at and since I'm not at all an expert on this, I'm having some trouble.

Let me first explain the situation we're currently in:

We're a motion design/3D agency with about 10 employees currently working off of a small 10TB FreeNAS box on a gigabit network. Typical workloads consist of video editing directly from the NAS, rendering and saving large PNG sequences to it and moving around large amounts of small files constantly. It's no fun.
The Gigabit network itself obviously limits the speed of our setup significantly, but the biggest issue we're having is with the NAS simply not being able to handle enough users at the same time. We regularly experience huge performance dips when several users are doing NAS-intensive stuff at the same time and it's reached the point where sitting around and waiting for the NAS is starting to cost us real money. Fragmentation is also an issue we're experiencing, although I've been told that's to be expected with ZFS.

As such, I thought of upgrading to a more powerful file server or NAS for our needs and was hoping someone could help me select the right configuration. We will be upgrading our network to 10g in the near future, so it's OK if our current network becomes a bottleneck until then.

I was thinking of buying an old off-lease server with enough drive bays and repurposing it, maybe something like a Poweredge R710 or C2100, but I don't know much about server hardware and so I'm afraid of problems/incompatibilities with things like 10gbe network cards, hardware RAID controllers, SAS vs SATA drives and so on. An additional issue is that we don't have a server room, so I'm going to have to find a way to keep the noise to a minimum somehow. The server/NAS will likely end up right next to someone's desk and whoever that employee ends up being (probably me) is not going to be happy if the thing ends up being as loud as a jet engine.

Then there's the issue of the platform itself. Should I use FreeNAS again? Or are there other options that would perform better for us?

In summary, our requirements are:

-able to handle at least 10 users simultaneously without issue
-enough drive bays (I'd say 6 bays is the minimum)
-able to be adapted into future 10gbe network (which I guess just means that theres a PCIe slot available for a 10g netwrok card)
-should cost less than $4000 overall, I doubt I'll be able to convince my boss to spend more than that, no matter how much that may or may not make sense).

I hope someone here can help me out, this is definitely NOT my area of expertise. If I forgot to add any relevant information, let me know and I'll add it ASAP.

1 Like

What are the specs of the Freenas Box ya are using now?
Brief research i believe we could get you setup with what you are lookig for?
Dell R720 can be had for 800-1000 dollars without hard drives on ebay.
Let me know if you will be able to use old hard drives or if you need new ones and also how much space do we need?

Specs of our current FreeNAS box:

-Asrock C2550D4I motherboard with quad-core Atom
-32GB ECC DDR3
-6x WD Red Pro 3TB in RAIDZ2

We won't be using old HDDs since our current FreeNAS box will likely be repurposed as a backup, so we'd probably be buying 3-4TB HGST drives for the new server.
In terms of space, 10TB is the minimum, but more than that is probably ideal if it fits the budget. We do move files onto our archive after a fixed amount of time so huge amounts of storage aren't the top priority.

160 for 4tb hgst drive on amazon.
So we are looking at 960 for drives. 6x 4TB HGST NAS Drives
Lets add an intel 10gb nic for 250 even though you may be ale to use Mellanox or Chelsio I believe and get cheaper but will have to buy rj45 adapters. You might find a dell r720 with 10gbe nic in it but prob not.
Right now we are at around 2320 bucks for just server.
Possibly have to buy and LSI HBA cause from what I have read the dell R720 raid cards don't work well or flash to it mode so we can get those for around 100 bucks on Ebay. Someone please chime in if you know otherwise.
$2520 for server adding 100 bucks for misc cables and such.
Also we will need to look at if you want to stay with Raidz2.
With Raidz2 we will have around 16tb of space with 2 parity drives.
We can also set it up with few set of mirrors and have 3 mirrors and around 12tb of usable space. Someone will prob correct me but the mirror setup may help with performance also.
Moving the network to 10gbe is gonna be costly because of trying to move every workstation to 10gbe and cabling and switch. I recommend for now we get a switch with 10gbe uplink and gigiabit for all your clients. This should help overall performance.

2 Likes

Not overload you with information but we may even be able to get your current Freenas to get better performance.
We could start with adding a 10gbe nic to it and buying a switch that support 10gbe uplink.
Do we have any more sata ports left on this machine?
Let me know if you are interested in this route.

Sounds good so far. Are there any viable alternatives to FreeNAS and ZFS overall? I am concerned about fragmentation, especially with so many users moving so many small files around. Our current NAS has never been under 30% fragmentation when I check with zpool list.
I honestly don't even want to keep using our current NAS as a primary solution, even if we can get its speeds up to par. The reliability issues of the C2550D4I alone make me want to remove it from its current duty. We've already had the CPU die on us once and I'd hate to repeat that experience.

I am sort of on the ZFS Bandwagon. I believe you should stick with it and if you want easy management than stick with Freenas.
I am pretty sure someone else can chime in on a viable alternative.
Is there anything about my build we need to elaborate on or do you have any other questions?

Does your business stop in its tracks if the NAS is down? How is you backup? Are you the sole support person?

If you answered yes you really need to start looking commercial and not mess around with throwing together a mix of used and new stuff together to get by.

Call IXSystems, Nimble, Synology, or somebody who can give you support and give you what you need. I am all for home built stuff when the application can tolerate it, but I don't know that this is one of those situations. Been there done that.

We are currently looking at a Nimble CS1000 for our small business data center. Our EMC VNX5200 is straining to keep up with our VMware loads on dual 10G links.

I will probably say right now though that 1G network is really a bottle neck with large concurrent data transfers. 10G is really dropping. With 10 clients and the NAS this might fit


Netgear also has affordable units now.

You can also pick up used 10gb mellanox cards on eBay for under $100. I would just buy extra.

Not exactly the ringing endorsement I would want for my mission critical system...but then maybe I'm just weird like that.

Business wouldn't stop completely, but working off of our current backup (a WD MyCloud piece of garbage) would be close to impossible. I am the sole support person, although really I'm just one of the 3D artists who works here, I just happen to be the one who knows a little about hardware and occasionally builds new workstations when they are needed.

I haven't really taken a look at any of the prebuilt solutions, I was just assuming they'd be way out of our budget. I'll give it a look, but if they don't meet our requirements inside our budget then it'll have to be a DIY project one way or the other. There is absolutely no way I'm going to convince my boss to spend more than 5k for the NAS/file server.

I agree, but he seems to be wanting to lowball stuff.

New cards run from $280 and up.

True, considering he's using an quad core atom based system for a high demand environment. I understand that it's a small company...however when your company literally lives or dies by the data it produces...that's the last area to skimp on.

Then you might be sunk. The alternative is to work on the files locally and run backups to the NAS.

Otherwise just explain to him what is possible on that small of a budget and explain it's not going to work any miracles.

1 Like

As much as I hate recommending "work locally" for things like this...it's probably the best option. Combine that with a small investment for a UPS at each workstation and most of the issues will be solved.

I do indeed want the lowball stuff. Having a NIC fail on the connected PCs would be tolerable since if you can always just go back to the onboard NIC until a replacement arrives. We're definitely not above using stuff off ebay if the price is right and the risk is tolerable.

That's not really an option in this line of work, there's way too much moving around of files between different computers and employees. I'd rather keep working with our current setup than work locally.

As much as I understand the dodginess of second-hand hardware, this is still enterprise hardware we're talking about and I find it hard to imagine it being more trouble than our current crappy configuration... is there really no option besides spending metric craptons of money on a full all-in-one solution?

There are other options but whether they are better or not is arguable.

That's why your system is dying when many people access it.

RAIDZ2 is Parity RAID. Parity RAID requires CPU horsepower to calculate the parity bits needed. So accessing storage intensively means pushing the CPU hard.

I'm going to guess you guys use Windows machines. That means you almost certainly use SMB for the Network Share.

SMB is Single Threaded. Meaning, when you are pushing the NAS hard, it only has a single 2.0-2.4 GHz Atom core to handle SMB traffic and three 2.0-2.4GHz Atom cores to handle Parity calculations.

Faster storage means more CPU overhead due to more parity calculations necessary when you are using the extra speed.

Overall, this is what I would do:

Get a new server and install FreeNAS or a flavor of Linux Server edition and use BtrFS.

Here's an article looking into why ZFS and BtrFS are good: https://arstechnica.com/information-technology/2014/01/bitrot-and-atomic-cows-inside-next-gen-filesystems/

Realize BtrFS doesn't have the same requirements ZFS has if you decide to do that instead. I'd recommend FreeNAS unless you are already familiar with Linux in general just because of ease of use. However, ZFS optimization isn't exactly easy to do.

Either way you choose to go, do not use parity RAID. The benefit of Parity RAID isn't worth the costs imo, especially when what you need is performance over reliability but you still need reliability.

RAID 10 (a mirrored then striped RAID array, or vice versa, doesn't matter usually) is better in my opinion. Let's compare the two.

RAIDZ2 is comparable to RAID 6. RAID 6 is parity RAID with two drives worth of redundancy. You can lose two drives without losing access to the data.

RAID 10 has between 1-2 drives of redundancy in a single mirrored array (you can go bigger, but you probably don't want to). It has between 1 and 2 because it depends which drives die. Let me illustrate:

If 1 drive dies: You lose nothing. Ever.

If you lose Disk 1 or 2 and Disk 3 or 4, your array will live and continue to work.
If you lose Disk 1 and 2, or Disk 3 and 4, your array will be lost.
So you can lose 1 of each half but you can't lose both of one half.

So it has more redundancy than RAID 5 but less than RAID 6, effectively.

You're gonna have backups so losing the array isn't a big deal for data at least. The odds of two drives dying at all is very low and even if it happens, it's possible it won't matter. So reliability is pretty good as well.

The bigger reason to choose RAID 10 is because of performance.

Smart Operating Systems like FreeNAS can use all four drives when reading data. Meaning RAID 10 is effectively RAID 00 for Reading data. For writing, it's still RAID 0. So you are using four HDDs to read and two (effectively) to write in terms of "how much performance am I going to get?"

So it gives adequate (in my opinion) reliability and redundancy while giving a boost to performance.

Do not try and use an SSD for caching on ZFS. I say that because it is effort to get that working right and it isn't intuitive at all. Only much larger storage setups would benefit from it, and ZFS already has a cache in the RAM which is fine for smaller storage servers. Smaller here meaning Less Than 30TB. But even then, you'd have to consider number of files VS the size of the files. It gets pretty complicated and isn't worth the effort when there are easier and better options for improving performance.

It also doesn't use Parity so it doesn't put a load on the CPU as much. This means you can dedicate it to other things like checking data for bit rot. If you switch to another network protocol instead of SMB or update to something that can handle SMB 3.0 which is not single-threaded, then that means it should be less of a bottleneck, if any at all.

The biggest concern with RAID 10 is the storage loss.

This setup halves your available storage. So four 4TB drives gives you 8TB of space. So you'd probably want six 4TB drives for 12TB. This means you are reading from six HDDs and writing to three (effectively).

It's a concern but I think since you specifically need performance, it's worth the cost.

I wouldn't expect to spend more than $3,000 on this for multiple reasons. For one, you're a small business. There are small business solutions for these types of problems that aren't nearly "$5,000" expensive.

My biggest reason is simply "you don't need enterprise hardware for what you wish to accomplish, though it would help." A bigger concern is replacement. What happens when something does die? Do you go used shopping again for that specific part?

That's a level of unreliability I don't think you want in your primary workhorse server. Buying parts that are readily available now would be best, I would think.

Considering the "why?" of why your current setup isn't working, you shouldn't need much more, imo, than to reconfigure and simply get a better CPU.

What I would do in your situation.

Get a Prosumer solution. Buy hardware in that weird product area between consumers and professionals. I'd even suggest just getting a RyZen 7 CPU if ITX boards existed for it. mATX would be fine too since you'd need the storage space for six or more HDDs. AM4 motherboards are looking to support ECC RAM, so they're just shy of server hardware anyway. And as you may already know, RyZen 7 is pretty good at Production specific workloads. Which is what servers do.

i.e. I would just get this in this setup and call it good if I were you:

  • RyZen 1700 (To be honest, I feel like for a NAS only, this CPU is overkill, but imo I'd rather have more than less and it's Price:Performance is great).
  • Some mATX board (because servers don't have to be big and there's little reason to go bigger than this).
  • Greater than or equal to 32GB of ECC RAM
  • Whatever mATX case fits everything you need (6 or more 3.5" HDDs)
  • Install FreeNAS 10.
  • Configure with ZFS into a RAID 10 setup (basically create a stripe of 3 drives, then mirror that to the other 3 drives)

The cool thing about RAID 10 in the above configuration is it is easy to expand redundancy and thereby read performance

Just mirror three more drives to have more redundancy. Then you'd have a RAID 10 with three drives striped and two sets of three drives mirroring those. Then 3 drives have to die before any data loss occurs, but you can handle up to 6 drive failures depending on which ones die. This improves performance too because then you're reading from more drives (though I feel like that won't scale well).

To improve writes, or to increase overall storage, you'd have to tear down the array and rebuild it. i.e. undo the RAID then stripe 4 drives instead of 3.

Here's a thread on expanding a RAID 10 in ZFS: https://forums.freenas.org/index.php?threads/need-guide-to-set-up-raid-10-in-freenas-8-3.10652/

Here's a guide for things to not do on FreeNAS for setting things up: http://www.freenas.org/blog/freenas-worst-practices/

That's a RAID 10. If you want to add redundancy/read performance, you make more Columns. If you want more storage/write performance, add more rows.

Columns = mirrors. Rows = stripes.

4 Likes

I would echo everything Vitalius said, with special emphasis on a pool of mirrors. A pool of mirrors offers better flexibility, performance, and/or reliability over RAIDZ*. You lose in storage efficiency, but storage is cheap. Performance isn't.

I'd like to add a little love for the network. If you're going the 10Gb route, and it would serve you well to do so, It will not do you any good to go out and buy the cheapest switch with a 10Gb SFP+ port if that switch is connected to your main switch(es) via a gigabit cable. I only mention this because I've actually seen this happen.

1 Like

if 10 people are moving small sized files onto/off a spinning rust harddrives, my money is on the seek time sinking to low level if you're experiencing dips in performance.
The gigabit network doesn't care wether it moves 1000000 small files, or 1 large file, it just moves a serialized stream of 1's and 0's, the harddrives though requires to mechanically find new positions for each file, and also handle fragmentation etc etc, so the limit is created by the client and server(My guess is mostly server since it is handling 10 times the load the client is).
If your budget is 4k the world is pretty much your oister for a solution, basically it sounds like all you need to make is a few smb shares for your network, and a free distro like ubuntu has alot of software solution for exactly your usecase(And hardware wise smb requires very little as long you dont use NTFS for the harddrives, which can be rough times on your cpu), setting up a lvm pooled network share would take a day, maybe two, including assembly, and setup, and all you really need is 1-2 network adapters, and some raid harddrives, maybe some redundancy, rest is mostly handled by the OS, and if any problems feel free to ask.

I've recently spent quite a bit of time debunking this very statement with some colleagues in regards to virtual machines whose storage is over a dedicated gigabit connection. Spoiler alert: Workload type is a factor. It becomes more important a factor as the size of your data becomes smaller, and the files more numerous.

Here's me moving two sets of 40MB worth of data over gigabit. Set 1 is one 40MB file, set 2 is ten thousand 4KB files. Data generated well in advance of the copy procedure, and sourced from /dev/urandom, transferred via scp using arcfour, confirmed that both systems are capable of sustaining at least 100MB/s scp'ing one multi-gigabyte file.

One 40MB file
Wed Apr 12 15:51:13 CDT 2017
Wed Apr 12 15:51:16 CDT 2017
Total time: 3 seconds

Ten thousand 4KB files
Wed Apr 12 15:52:22 CDT 2017
Wed Apr 12 15:52:39 CDT 2017
Total time: 17 seconds

Now, I just happen to have both machines hooked up to 10Gb. Let's run those copies again. This is technically a little unfair because there is no longer a switch between the two machines. But if the switch adds noticeable latency, it's a very bad switch. If after everything is said and done, you're still not satisfied, I'll jack with my setup to get gigabit directly between the two boxes.

Ten thousand 4KB files
Wed Apr 12 16:09:26 CDT 2017
Wed Apr 12 16:09:34 CDT 2017
Total time: 8 seconds

One 40MB file
Wed Apr 12 16:10:08 CDT 2017
Wed Apr 12 16:10:10 CDT 2017
Total time: 2 seconds

And just to make sure this isn't cache talking, one more time with set 2 over gigabit.

Ten thousand 4KB files
Wed Apr 12 16:13:21 CDT 2017
Wed Apr 12 16:13:37 CDT 2017
Total time: 16 seconds

This becomes even more apparent when you run a virtual machine whose storage is over dedicated gigabit, and test 4KB read/writes. Under the best of circumstances (iSCSI as your storage protocol with VirtIO driving the virtual machine disk, in the case of KVM) you're looking at topping out that dedicated gigabit connection with all of only 10 to 12MB/s worth of load, be that reads, writes, or a mixture of the two.