tiny home server

Cover image

It's nice to run a relatively low power home server 24/7, one consisting of a small single board computer (SBC) running aarch64 Linux.

ODROID-HC4

After adding more software to mine, the ODROID-HC4, for 2 years, and keeping bumping into its 4GB memory limit, I decided it was the time for a bigger mini computer.

The ODROID-HC4

This machine has been continously running Armbian, nginx, samba Syncthing, qBittorrent-nox static, ssh, PhotoPrism, Gitea, WireGuard, dnsmasq and pedal-to-the metal, close to the RAM limit. It's also been a single point of failure for many of these, and it's already going onto 3 years.

I've been thinking of getting a larger hard disk - currently running a 12TB Seagate IronWolf Pro, but there have been reports of the tiny voltage regulators popping at spin-up with newer, larger drives. Armbian forum member Edgar researched a solution, something I'm willing to try myself, but not without a backup first.

I've also been meaning to install AdGuard, netboot.xyz, calibre, element, Mumble and some others, clearly pushing the note too much over what the HC4 can easily sustain.

Radxa ROCK 5 Model B 32GB

Since its release, the Radxa ROCK 5 Model B seemed useful, but I wanted moar RAM. In late 2023 versions with 24GB and 32GB appeared on the Internet, and I eventually got the "Blue Edition" with 32GB from Arace.tech (their support is excellent, also active on the Radxa forums).

Radiator

To cool the RK3588 SOC, use a 40mm radiator. The 2 diagonal mounting screws must be 55mm apart. An example from AliExpress:

55mm radiator, Store No: 1017947

The aluminium radiator in the image is 43mm width x 40mm height x 11mm depth, and the image watermark says "Store No: 1017947". Product link on AliExpress.

Cooling fan

The CPU ventillator header on the ROCK 5B has a 2 pin 1.25 mm Micro-JST connector, with 5 Volt PWM. To fit a 40mm Noctua ventillator, for example, get the 5V version, get one 1.25 JST connector, and do some wire splicing.

Acrylic case with radiator and fan

Allnet make an integrated acrylic sheets, plus spacers, plus fan and radiator kit for the Rock 5B.

I'm using one and I should have messaged them with my custom requirements, it would have saved me some diy plexiglass cutting. I talked to them and their support is great.

Allnet acrylic case with cutout for M.2 sata

Towards the top of the picture there's a cutout I've made to fit the SATA ports.

Storage

Adapter

To connect hard disks, I use an M.2 M Key NVME (PCIE) to sata adapter. The Orico PM2TS6 appears to be the best solution at this time:

  • The PCB is thin. Many M.2 - SATA adapters from AliExpress or Amazon have thick PCBs and don't safely clear some resistors on the back of the Rock 5B, around the M.2 slot.
  • ASM1166 chip (some power management features, compared to JMB585).
  • 6 slots, PCI Express 3.0 x2. This should give around 1200 MB/s, enough for mechanical drives. It's common in this product category, haven't seen x4.

I got mine from Amazon. It exists on AliExpress, too.

The ASMedia 1166 chip is toasty and Orico didn't include cooling, so I ordered myself a 14mm x 14mm aluminium radiator. I also mounted a 40 mm 12v Noctua fan, for extra cooling.

Acrylic case SATA cutout and radiator

Pictured above is not the Orico PM2TS6 add-in card. It's the first one I tried to use, that arrived with a pre-applied radiator. This card has the same ASM1166 chip, but the PCB is reinforced with a second layer, which makes it tougher but also pushes against Rock 5B components on the board.

The Allnet acrylic case for the Rock 5B came with a series of grill cutouts in that M.2 port area. I joined them all by hand (cutter + hand saw) into a large hole for the SATA ports and chipset radiator.

Disks

I'd already made up my mind to use the new 24TB hard disk capacities, distributed between Seagate Exos X24 and Western Digital Ultrastar DC HC580.

After the first Ultrastar drive I decided to not create a zfs raidz1 with 4 drives and one extra for parity because I wouldn't stand hearing the constant 120 Hz drone of five 7200 RPM units. Instead, I'll keep one "cold" raidz1 consisting of 2 drives and one for parity, for more permanent or archival storage, set up to completely spin down. The extra 2 drives would see daily usage.

Both Exos X24 units are warmer but less loud than any of the three Ultrastar DC 580 from the zfs raidz1 pool. All of them burn 6-7W, each, during usage.

To connect the disks to the ASM1166 ports I use a 50 cm 6 SATA server strip, like the one from AliExpress.

Power

At spin-up these drives would go above 30W for the few seconds of acceleration. For 5 disks at power on this would give around 150W of draw, so I chose the 650W Seasonic FOCUS-SPX-650 SFX form factor power supply, that should have around 90% efficiency even at a few tens of watts.

The Rock 5B firmware currently has a problem impeding it from correct USB-C PD negotiation. Once Linux boots, the power can then be settled, unfortunately that happens late enough that most USB PD adapters just refuse to handshake.

As a result, the solution is to use a regular USB-C power delivery adapter, like any of the available GaN adapters, but with a fixed USB-C voltage socket adapter. Those adapters contain processors that can negotiate fixed USB PD voltages, and then send the power to a barrel connector. In the process, I got such a fixed voltage cable for 12V, and it luckily arrived with a dumb 2-wire crimp and 5.5 mm barrel adapter. Separately, I had a dumb, 2-wire 5.5 mm to USB-C cable, which I could plug into the Rock 5B, into the crimp from above, and into the a 12 volt line from the ATX 24 cable coming from the Seasonic power supply. For ATX 24 I'm using a breakout board.

ATX 24 breakout with crimp and case

Case

I decided to get the Jonsbo N1 case for this build. Their support is excellent, also this micro-itx case is big enough for the pico-itx Radxa Rock 5B board.

To fit the SBC, and this is where I could have saved some effort by going directly to Allnet China (the ones making the acrylic case) with my specs, I got an acrylic sheet, 150 mm x 200 mm x 3 mm, which I cut myself to mini ITX size, around 150 mm x 170 mm, and used to replace the SOC ventillator acrylic wall, also screwed in 3 points to the N1 case:

Case view of Radxa Rock 5B in Jonsbo N1

Since the ASM1166 chip gets so hot, I had to use a 12V Noctua NF-A4x10 PWM fan, connected through the 7V "silent" Noctua adapter to a PSU SATA to fan header adapter.

Top detail with 12V crimp and USB cable

The 2 thick, blue cables are a Y connector, 2x USB 3.0 male connectors to motherboard USB 3.0 header from AliExpress. The idea is to plug the cables in the two USB 3.0 slots on the rear of the Rock 5B, then connect the 19-pin USB 3.0 front panel header from the Jonsbo N1 case there.

Top full view

Also with a Noctua NF-A14 PWM front panel fan, also connected through the 7V "silent" Noctua adapter to the Jonsbo N1 plate. This one wasn't even necessary, as the supplied Jonsbo 140mm fan has better static pressure to push air between the 5 hard disk drives, but could use a 7V "silencer".

Closed view

In the meanwhile I have the HDPLEX 250W GaN passive power supply too, but I haven't gotten to using it instead of the Seasonic SPX 650.

With Linux 6.1.43, the kernel adapted by Joshua Riek from the recent (March 2024) official Radxa 6.1 release, there are no SATA or USB dropouts, nor any dmesg errors.

BTW I use Arch.