This post is part of a series about my journey towards a low cost and low power home server.

Other articles:


When I first started out on my budget home server journey back in 2016, the most logical choice was the Raspberry Pi 2 micro-computer. This has served me well, but my needs for a server have changed and the Pi just wasn’t keeping up. I want a quicker server but with the small size and low power consumption that made the Pi great!

What’s wrong with a Raspberry Pi as a NAS?

The speed I was getting on my Pi was disapointing.

As I breifly mentioned at the end of my first post, the Raspberry Pi isn’t a very quick as a NAS server.

There are several factors at play here, most notably the fact that the Pi 2 only has USB 2.0 ports and 100mbps ethernet which both cap the max transfer speeds. In addition, the ethernet and USB ports share bandwidth to the CPU so heavy use of these interfaces results in further speed reductions. All this in combination with a pretty limited CPU, results in poor performance as a NAS!

The ODROID HC2

A view of the ODRIOD unit from the side.

The ODROID Home Cloud 2 is a single board computer which houses your hard drive and sports some powerful chips on it’s tiny circuit board. Seriously, this thing is tiny - smaller than a Raspberry Pi! It’s got an octocore ARM processor, 2GB RAM, a built in SATA port and gigabit ethernet. The Home Cloud doesn’t even have any form of video output, it’s simply not needed!

Because it houses the hard drive, the Home Cloud makes a very tidy home server setup and only takes up a single power socket. The only downside with the hardware is that the single USB port only supports USB 2.0, but this is a small complaint given I only use this port for taking backups of the internal hard drive.

A view of the ODRIOD unit from the top.

The unit is cheap, coming in at about $65 USD for the base unit, power adapter and top case - just bring your own hard drive and SD card.

If you have a 2.5” drive, theres also the ODROID Home Cloud 1 which has the same specs but installed in a different case. I happen to own a 3.5” hard drive, but I absolutely love the idea of an even smaller NAS. The Home Cloud’s are also stackable - let me know if you have any ideas of a usecase for this!

Setting up the system

Lets get the basics of a home server configured before getting any applications going.

OpenMediaVault

The OpenMediaVault admin home page.

Just like a Raspberry Pi, the Home Cloud runs it’s operating system off the SD card. There are a variety of operating system images to choose from. I chose the open-source NAS operating system called OpenMediaVault for mine!

OpenMediaVault has an easy to use web interface for configuring your system, comes with all the file servers you need, and has a good plugin system to make installing apps really easy. OpenMediaVault handles much of the manual configuration I had to do on my Pi NAS which meant I could get a working system going sooner!

I went through the following steps to get OpenMediaVault up and running:

  1. Download the OpenMediaVault image for ODROID units.
  2. Clone this image to your SD card, I like to use Etcher for this.
  3. Boot it up and find your device’s IP address on the network.
  4. Type in the IP address of the NAS into your browser and login with the default credentials from the installation guide (under “First time use”).
  5. Change your web-administrator password under “General Settings” > “Web Administration”.
  6. Run updates by clicking “Check” then “Upgrade” in “Update Management”.
  7. Setup your user under “User”. We need SSH access so make sure to tick the boxes for the “sudo” and “ssh” groups.
  8. Login to SSH as your new user and expand your SD card, I personally found the steps outlined in “Resizing the partition online using fdisk” of this guide did the trick.

Docker

The Docker logo.

OpenMediaVault has plenty of plugins which we can use, but for anything else we can use Docker. Docker containerises all your apps which avoids all the setup and depedendeny management mess of installing new software. You can learn more about Docker in my original NAS post).

To get Docker setup:

  1. Under “OMV-Extras”, double click on “Docker” (not “Docker CE”), click “Enable” then “Save”.
  2. Over in “Plugins”, click “Check”. Once this completes, search the plugin list for “docker” and install the “openmediavault-docker-gui” package..
  3. This will give you a handy “Docker” menu to manage your images and containers.
  4. Optionally, if you want Docker Compose to use files to manage your Docker containers, install Docker Compose using pip.

File Access

OpenMediaVault makes it easy to access your files over the network!

Setting up shared folders

Firstly, lets configure the hard dirve to spin down automatically under the “Physical Disks” menu, personally I use the “Intermediate power usage with standby” setting.

Next, configure your partition to mount automatically. Select your drive under “File Systems” and click “Mount”.

The Shared Folders section in OpenMediaVault.

Now lets configure some shared folders! Pop over to the “Shared” folders menu and click “Add”. Give your file shares a name, set the device and path then click “Save”. You need to set your user privileges for each folder by clicking “Privileges” and giving each user either read/write, read only or no access.

Configuring file servers

A file sharing icon.

Lastly, you just need to configure each of your file servers. These are all configured in a pretty similar way - just configure some shares in the “Shares” and flip the “Enable” switch under the “Settings” tab.

OpenMediaVault supports the three common file servers for NAS’s so you get to choose which ones you want to setup!

Apple Filing (AFP)

While no longer the default file sharing server for macOS, AFP is the traditional Mac file server and can only be used by macOS. I personally use a Mac and found AFP to work the fastest for me.

SMB/CIFS

SMB/CIFS is the most widely supported file server with built in support on Windows and macOS in addition to packages like Samba which enable support on Linux systems. I’d highly recommend setting up SMB/CIFS sharing on your NAS even if you don’t intend to use it as your primary file server.

NFS

NFS stands for Network File System. It’s pretty old school and is pretty common for Linux systems. It’s different from the modern alternatives in that it doesn’t have any authentication by default and expects a user’s ID’s to match across the server and client systems. NFS works great but as it requires a few more considerations I’d only configure it if you really know what you’re doing.

Remote Access

A cloud icon.

Another key part of my NAS server infastructure is to enable remote access from anywhere in the world. I went a bit far with my remote access requirements, so I like to be able to access my NAS from anywhere in the world no matter what internet connection I’m using at home.

I’ve posted about how I do this in the past, check out how I got access to my home services from anywhere without port forwarding.

Local Access Convinence

192.168.1.?

This was another overkill requirement of mine, but when I access my NAS locally I don’t want to have to remember it’s IP address or the port numbers of the services it runs.

This is something else I’ve posted about in the past so check out how I get easy access to my home server on a local network.

USB File Backup

One of the downsides to having only one SATA port is that you lose out on the multi-drive data redundancy provided by most commerical NAS setups. While data redundancy is nice to ensure continuity in the event of a drive failure, I’m only using my NAS at home so I can manage without immediate access to my data in the event of a drive failure.

However, I don’t want to lose all my files completely so I have a second hard drive which is kept offline most of the time as a cold backup. I sync this at regular intervals so in the event of a drive failure I’ll just buy a new drive and restore from this backup.

The USB Backup section in OpenMediaVault.

I use the OpenMediaVault “USB Backup” plugin to automatically sync to my backup drive whenever it’s connected. This is based on rsync but has an easy web-interface to configure the backup mode, shared folder and backup device.

Configuring applications

Now that all the basics are setup, it’s time to configure some applications on the system!

Plex

The Plex icon.

Plex is a server for your personal media collection. It collects brilliant metadata about your content and allows it to be played pretty much anywhere with the web, desktop, TV and mobile apps.

For remote access to Plex I just use Plex’s Relay feature, but to get around the bandwith limitations you could also run it through my custom remote access solution.

The OpenMediaVault plugin for Plex is very simple, all I need to do is select a physical disk for it to store the Plex data files on.

Metadata storage

The OpenMediaVault plugin for Plex lets you configure the drive to store the metadata on but it won’t let you use the boot volume.

I figured that it made sense to store all the Plex metadata and such on the SD card as it didn’t need to spin up and SD cards are better suited to random reads like database and metadata accesses.

I went through a lot of effort trying to partition my SD card in order to store my metadata here, only to find that the benefit was negligible (and in fact, with the SD card I was using, significantly worse!). So, a word of wisdom, just don’t bother and store the Plex database on the hard drive!

Deluge

The Deluge icon.

Deluge is a torrent client with a web-interface. This allows you to download torrents directly on your NAS. I used the OpenMediaVault plugin for this and it works great!

Time Machine Backup

The Time Machine icon.

Time Machine is a feature built into macOS which backs up your computer every hour with file snapshots. Generally you’ll need an Apple Time Capsule to do this over the network, but OpenMediaVault’s Apple Filing server lets you enable Time Machine support for a network share! All you need to do is configure a share and tick “Time Machine support”.

This is completely optional, but I also configured a quota for this volume. This is a pretty awesome feature of OpenMediaVault where I can configure the Time Machine volume with an artificial capacity in order to prevent backups from filling up my entire drive. Set the quota option in the share (I used about 500GB for mine) and Time Machine will start clearing out old backups when it hits this point.

Cloud Storage Backup

The Google Drive icon.

I store a lot of my commonly accessed files in my Google Drive account. I have so many files there that I can’t sync them all with my computer so I use the Google Drive File Stream app to access everything else via the internet as needed. However, if my internet goes out at home or my Drive account is somehow compromised then I still want to have a copy of these files.

I use the rclone tool to do a one-way backup of my cloud storage to my NAS. I run this using Docker and the tloxipeuhca/rpi-rclone image.

I use OpenMediaVault’s built in “Scheduled Jobs” mechanisim to run this job once a week. To ensure I’m alerted if this backup ever stops working, I’ve configured healthchecks.io to notify me if my cloud backup doesn’t run once a week.

The scheduled job uses a command like to run the backup and log the successful run: docker start --attach [docker container name] && curl [healthcheck link]

How does it compare to the Pi?

Now for the moment of truth, how much better is my latest generation of NAS in comparison to the Raspberry Pi? Well I did some not-so-scientific tests. The first of which is another run of Blackmagic Disk Speed Test, followed by a real-world transfer of a 3.85GB file.

The Disk Speed test and file copy results compared between the Raspberry Pi and ODROID servers.

The results show that the ODROID unit is significantly faster than the Pi! I can’t believe it took over 40 minutes to copy a 3.85GB file to the Pi and back - the ODROID managed this task in under 2 minutes!

All the best for your projects! I’d love to hear how your projects go in the comments 😀

Monitoring an off-grid system with Kauri

I've built a system which monitors a renewable energy system and I discuss the lessons the project has taught me. Continue reading

Combining phone and web technologies

Published on February 04, 2018

Using tinc to access a home server

Published on October 29, 2017