network

Building the fastest Raspberry Pi NAS, with SATA RAID

Since the day I received a pre-production Raspberry Pi Compute Module 4 and IO Board, I've been testing a variety of PCI Express cards with the Pi, and documenting everything I've learned.

The first card I tested after completing my initial review was the IO Crest 4-port SATA card pictured with my homegrown Pi NAS setup below:

Raspberry Pi Compute Module 4 with IOCrest 4-port SATA card and four Kingston SSDs

But it's been a long time testing, as I wanted to get a feel for how the Raspberry Pi handled a variety of storage situations, including single hard drives and SSD and RAID arrays built with mdadm.

I also wanted to measure thermal performance and energy efficiency, since the end goal is to build a compact Raspberry-Pi based NAS that is competitive with any other budget NAS on the market.

Getting the best performance out of Amazon EFS

tl;dr: EFS is NFS. Networked file systems have inherent tradeoffs over local filesystem access—EFS doesn't change that. Don't expect the moon, benchmark and monitor it, and you'll do fine.

On a recent project, I needed to have a shared network file system that was available to all servers, and able to scale horizontally to anywhere between 1 and 100 servers. It needed low-latency file access, and also needed to be able to handle small file writes and file locks synchronously with as little latency as possible.

Amazon EFS, which uses NFS v4.1, checks all of those checkboxes (at least, to a certain extent), and if you're already building infrastructure inside AWS, EFS is a very cost-effective way to manage a scalable NFS filesystem. I'm not going to go too much into the technical details of EFS or NFS v4.1, but I would like to highlight some of the painful lessons my team has learned implementing EFS for a fairly hefty CMS-based project.

Setting up a Pi Hole for whole-home ad/tracker blocking

Pi Hole - Admin DNS query request dashboard page in Safari

Pi Hole is a nifty open source project that allows you to offload the task of blocking advertisements and annoying (and often malicious) trackers to a Raspberry Pi. The installation is deceptively simple (a curl | bash affair), but I wanted to document how I set up mine headless (just plugging the Pi into power and the network).

Set up Raspbian Lite

I bought a Raspberry Pi model 2 B along with the official Raspberry Pi foundation Case. Then I bought a Samsung Evo+ 32GB microSD card (which comes with a full-size SD card adapter), and did the following steps on my MacBook Pro to set up the Pi's OS:

Raspberry Pi (or another device) suddenly not getting a DHCP address?

Tonight, after I made a couple changes to my wired in-house Gigabit network (I recently added a few Cat6 runs after moving my main Wireless router—in this case an AirPort Extreme base station), I noticed the Raspberry Pi webserver that was hosting www.pidramble.com wasn't reachable over the network, and Server Check.in started reporting an outage.

I have that particular device set using a DHCP Reservation based on it's MAC address, and it's been working like a champ for over a year. So something was strange, since I hadn't made any networking configuration changes on the Pi itself in a few months, nor had I unplugged it at all in the past month.

Connecting to a Windows File Share from a Mac

Here's a quickie: A lot of Mac users are on Windows networks, and need to sometimes connect to a shared folder on their network to share/retrieve documents with other Windows users. The easiest way to do this is to type in the path to the shared folder in the "Connect to Server..." dialog box. To do this, just:

  1. Switch to the Finder.
  2. Choose the "Connect to Server..." menu option in the Go menu (or press Command-K).
  3. Type in the path to your windows shared folder as follows:

smb://SERVER_NAME/share-name/folder-name

Hopefully, a dialog box will open up asking you to type in your username and password. If you need to find out the path of your windows shared folder, ask your network administrator. (note: private shared folders usually have a dollar sign after them—for example, smb://SERVER_NAME/share-name/folder-name$).