FreeNAS is an excellent home Network Attached Storage (NAS,) especially if you’re a bit of a Do It Yourself type. Even if you’re not a DIY type, they have hardware you can buy and just use! First it’s open-source and second, its remarkably flexible. I won’t have any technical how-tos in here, but more of a review of the FreeNAS functionality that I’m using and why it’s awesome!
ZFS is a significant deviant from traditional file systems. This change in fundamental architecture enables ZFS to be far better at solving some difficult file system problems than other solutions. It can scale to absurdly huge amounts of data. It was once backronymed to Zettabyte File System, but isn’t any longer. Additionally, it has very impressive data integrity guarantees. It catches and corrects filesystem integrity problems before the disks fail. This early warning system makes it easy to use inexpensive disks, keeping RAID true to its name, Redundant Array of Inexpensive Disks. ZFS is an excellent choice for a NAS file system. It is an excellent open-source choice to safely store your most important data, and is flexible enough to provide good performance, at small scale or large scale.
I provide disks to my virtual machine server via iSCSI over a 10-gig network connection. It is an open-source protocol well supported by Linux and BSD operating systems. I believe windows has iSCSI drivers as well, but I haven’t tried to do that. iSCSI provides a block level device as if I had physically connected disks. It is perfect for my Xen virtualization server. It is generally good practice to separate your storage from your virtualization, as they’re both ram hungry and have competing desires for that ram. iSCSI is an excellent way to expose block level devices over a network connection for other hosts.
Jails are the docker of BSD. I can run some native software on my FreeNAS where I need direct access to the storage drives. Plex is run this way, as well as a torrent client. It’s substantially easier to mirror torrents for large files when the storage is directly local. Trying to run torrents over NFS is difficult, and performance is poor. Any lightweight program that is compatible with BSD you can run inside a jail in FreeNAS. This flexibility enables me to run a few things directly on the NAS that I would otherwise have to run in a virtual machine with NFS file systems. Performance is far better in a jail. Jails provide a way to run native performance applications on your NAS, saving you the complexity, and resource cost, of a full blown virtual machine.
NFS is pretty much the only game in network filesystems for Linux. Hah. FreeNAS has an excellent web configuration for this that makes it easy to set up NFS shares. The user id synchronization can be done via LDAP, mentioned in more detail later, so that the same User ID exists on all hosts and the NAS itself, if you desire. ZFS is built and designed with NFS support, so it is very simple to create shares for any purpose. FreeNAS gives me easy NFS configuration to reference network drives from Linux servers on my network.
Samba is the open-source windows network filesystem. Most home computers are Windows-based, and this provides connectivity for network drives. It works perfectly. Easy configuration and sensible defaults make it very easy to get yourself a working set of network shares for whatever purpose. It is also possible to share the same volume both with Samba and NFS, great for inter-operating with Linux servers and Windows workstations. FreeNAS provides easy samba share connectivity enabling me to use my storage from my windows workstations.
LDAP integration is valuable for me as a homelabist, because I needed my user ID to be the same on all the servers I set up. I wanted a single location to configure a strong password. Samba can use LDAP as a password store, to ensure that a single password can be used. Unfortunately, I wasn’t able to get user integration beyond the user IDs. FreeNAS wants to set up a full blown Active Directory server, and I wasn’t willing to spend that time. It might be a useful thing to have, but at the setup time I didn’t want to go through that. LDAP integration unifies my user IDs across the entire network providing good synchronization for NFS, local users, and samba shares.