Virtual NAS: better in theory

I was interested in setting up a network attached server (NAS) without the added expense or clutter of another system running. The concept of a Virtual NAS seems simple, run one of the freely available NAS virtual machines, connect some spare USB drives to the machine, do some simple web based configurations, and you’re done.

The attractiveness of such a system:

  • has all the file transfer protocols you could want already installed
  • isolates the NAS from a host system for security and configuration
  • the virtual machine can quickly be moved to another host in case of a host failure

The two systems I tried were FreeNAS and openfiler, using the pre-made virutal machine images. My setup consisted of three USB drives, 1TB and two 500GB that were given the network share names NAS1, NAS2 and NAS3 respectively. There were a few criteria I desired: reboot robustness, reliability, recovery, speed, and ease of use.

Both had issues of reboot robustness, though the problems with openfiler seemed worse requiring all drives to be re-setup after a power failure. This main issue is more related to the order in which USB devices are discovered by the host system or VMWare on boot. If say drive 2 fails to be discovered at startup due to a drive problem, then the NAS assumed that drive 3 was drive 2 and that drive 3 was missing. This caused problems for network machines mapped to the name ‘NAS2′ but were really connected to NAS3.  It seems the NAS should have a way of mapping by a hardware identifier.

On top of the reboot reconnection issue, the speed of the web UI for openfiler made it a painful experience to do the reconfiguration after the reboot failure.

After rejecting openfiler for the rebooting issues, I went ahead with FreeNAS and started pushing large amounts of data to the server. Unfortnately the system would freeze up after a period of time, on the order of hours, requiring a reboot of the virtual system and restarting of the transfers. This didn’t seem to be due to a specific protocol, as I tried SMB, FTP, and SSH. Perhaps the 256MB system memory allocated to the VM was not enough, but I made no changes to the VMs being tested.

In addition having to restart large transfers after a failure, the speed of the transfers were slow, averaging 4-5MB/s. This takes on the order of days to fully transfer terabytes of data. This compares to an average of 15-20MB/s when transfering to the host machine over 1000Mb ethernet.

Finally, it would be nice, in the case of a NAS failure to be able to plug the USB drives into another machine and get the data off in an emergency. Openfiler supports ext3 so those drives could be plugged into the host Ubuntu system and read, but FreeNAS uses UFS which Ubuntu does not natively support.

So for the home user, it seems as though the potential problems don’t make it worth doing just yet. There are probably ways of working around some of these issues if you want to create/modify the virtual machine properties, but this was a quick and dirty, as-is test. For now, a USB drive mounted on an Ubuntu server with the folder shared is fast, reliable and just works.