Continuing the discussion from Non flashlight products you recommend.:
This probably won’t be interesting to the majority of readers, but for those who are in the market it’s an interesting option.
I finally bit the bullet and upgraded my NAS. I was using an ancient and incredibly slow LaCie NAS that the manufacturer threw over the fence and quickly stopped releasing OS updates for it. But I gave it a new lease on life by following some sketchy wiki instructions to hack the bootloader and do a headless net install of an old version of Debian Linux, and from there installed several major Debian version upgrades over that, and finally installed OpenMediaVault on top of that. So thanks entirely to the open source ecosystem the software situation was good for the old LaCie NAS. But it was extremely slow and S.M.A.R.T. was reporting a few bad sectors on both disks (which I had running in JBOD mode and Btrfs RAID1 on top of them).
I’ve been looking for a replacement for years, but I’ve never been too keen on getting stuck with vendor lock-in again by going with an out-of-the-box commercial NAS. Once I have it all up and running I basically want to set it and forget it, but I do want enough flexibility to install random Linux packages and/or make arbitrary low-level system configurations without a bunch of layers of software abstraction getting in my way. But as far as hardware goes I didn’t want a mess of cables or external drives, and in general I’m really bad with hardware. Of course I could simply use an old PC or laptop, but the power consumption would be considerably higher than with an ARM chip.
So I finally went with this semi-easy DIY 2-bay NAS enclosure for the Raspberry Pi 4:
I also bought a 4GB Raspberry Pi 4 for $63, which is probably a bit marked up, but I didn’t want to deal with sketchy unknown vendors.
https://www.raspberrypi.com/products/raspberry-pi-4-model-b/
For the OS storage I got a high-endurance 128GB Samsung MicroSD card for only $12, which seemed like a great deal for a known brand with high write capacity.
And finally I decided to go for two 1TB SanDisk Ultra 3D SSD drives, which appear to be a solid mid-grade drive with good write durability. I’m excited to have a NAS with SSDs due to the much lower power usage and no spin-up time compared to spinning rust drives. I have no idea how, but these drives were going for $45/each when I bought them, but currently they’re up to $85/ea, so I guess I got really lucky.
So I received everything and started to put it together with this video:
Since I’m really bad with hardware I had to watch it many times and found that many parts of it weren’t clear and generally went way too fast for me. The Geekworm NASPi was missing one of the 4 screws for fixating the drives to the board, which was irritating, but not really necessary since the SSDs don’t weigh anything compared to HDDs. Also the DC power adapter that I purchased as part of a kit with the NASPi from Amazon arrived broken and hacked up into two pieces with pigtail connectors from the previous owner, but I’ll chalk that up to typical Amazon stupidity. (They refunded me the price of the power adapter.) Fortunately the output from the old LaCiE NAS power adapter also works fine with the NASPi.
So once the assembly was over I could finally get into the more enjoyable part for me. I used the Raspberry Pi Imager to flash the latest minimal no-GUI image to the MicroSD, and I was happy to see that the Imager allowed me to set the username and password or SSH keys, since I don’t have any external HDMI monitor or keyboard and I would only have SSH access. It booted right up and the drives powered on correctly, and I just had to look at the DHCP leases in my router to find the IP address, which I later changed to a fixed IP. Next I installed OpenMediaVault, and I also loosely followed HTGWA: Create a ZFS RAIDZ1 zpool on a Raspberry Pi | Jeff Geerling to create a ZFS pool that mirrors the two disks for fault tolerance. I’m quite excited to finally have my NAS data on a ZFS filesystem, and within the constraints of my relatively slow LAN performance seems more than acceptable with the 4GB Raspberry Pi 4. The SMB shares connect and populate the file lists almost instantly, and my Borg backup repositories on the new NAS are much more performant than with the old dinosaur.
So I think this is a pretty cool option. I like how the Raspberry Pi supports a large number of operating systems, including even FreeBSD, and it’s such a massively popular device that long-term community support and development is guaranteed. I also really like the modularity that lets me fairly easily and inexpensively swap out any component in the future, 1) the Raspberry Pi, 2) the MicroSD for the OS, 3) either or both of the data drives.
Update: 2025-06-03
So far I don’t really have any complaints with the hardware; the Raspberry Pi 4 and storage devices are working well, and the Geekworm components have been quiet and reliable.
However, on the software side there was a fairly major issue. Since I wanted a nice NAS-focused web administration interface I had chosen OpenMediaVault, which can be installed from a repository of packages on top of a Debian Stable system. Since the Raspberry Pi OS is also based on Debian I assumed that it would be a fairly vanilla Debian Stable system plus some out-of-the-box tools and hardware compatibility tweaks for the Pi, so that was the base OS that I originally chose to flash to the storage card. However, after the installation and configuration of the NAS I later realized that Raspberry Pi OS uses its own Linux kernel version and update mechanism, and in general it differs quite a bit from the upstream Debian Stable system that I prefer to run.
This came back to bite me 6 months later when the Raspberry Pi OS repository upgraded to a major new Linux kernel version. The problem is that I am using ZFS for the data storage pool. I knew beforehand that Debian does not ship pre-compiled ZFS modules, only supporting “DKMS” modules that have to be compiled locally on the system with matching kernel headers for each kernel update. On the Pi the ZFS module compilation takes forever, which isn’t ideal, but the worst part is that the Raspberry Pi OS doesn’t promptly release matching kernel headers and/or the Debian Stable version of the ZFS driver won’t compile for the updated kernel version in Raspberry Pi OS. So 6 months after the initial installation and again last month I was faced with a system that had no access to my ZFS storage pool after applying standard system updates from the Raspberry Pi OS repositories. The most recent failure was worse than the first, as I could not find any combination of kernels and kernel headers and ZFS packages that would compile the ZFS module for the current state of Raspberry Pi OS. So after a considerable number of failed attempts I decided to ditch Raspberry Pi OS and look for something different.
My first inclination was to just use vanilla Debian Stable for ARM64 from https://raspi.debian.net with some tweaks from https://github.com/emojifreak/debian-rpi-image-script/blob/main/debian-rpi-sd-builder.sh manually applied after flashing it to the SD card. This resulted in a bootable Debian Stable system that was nice and lightweight. However, the Geekworm NAS scripts for the power switch and fan control didn’t work with Debian’s version of gpiod
. After a lot of trial and error I was eventually able to hack together working power and fan scripts with some help from https://github.com/aardzhanov/naspi35_xscript, and this would have been a viable and reliable option as a base system for the Raspberry Pi, and on top of that I could have installed OpenMediaVault like I had before.
But I got to thinking that ideally I don’t want to be waiting around for the system to compile the ZFS modules locally with the Raspberry Pi’s weak CPU. So I started looking at other Linux distros with good support for the Raspberry Pi and native pre-compiled ZFS kernel modules straight from their package repositories. I also realized that it would be very useful to be able to boot from a USB storage device like on a normal desktop PC and not be limited to booting from the difficult-to-remove SD card inside the Geekworm NAS case for the Raspberry Pi. It turns out that it’s easy to add USB boot support by using the graphical Raspberry Pi Imager utility to flash a temporary updater that automatically boots off the SD card and installs an EEPROM update, as described here: GitHub - raspberrypi/rpi-eeprom: Installation scripts and binaries for the Raspberry Pi 4 and Raspberry Pi 5 bootloader EEPROMs. I then used the Raspberry Pi Imager to flash the Alpine Linux installer onto a USB stick and then manually added this tweak to the USB stick for installation onto the SD card via SSH on a headless system like mine.
So Alpine Linux with its minimalist design and pre-compiled ZFS modules would also be a good option for the Raspberry Pi, but options for a graphical administration interface through a web browser are limited for Alpine. I’m capable of administering a Linux system via the command line, but I don’t enjoy doing so and I don’t want that hassle for a NAS that needs to just work as an appliance. So in the end I finally settled on Ubuntu 24.04 LTS. It can also be easily flashed onto the SD card via the Raspberry Pi Imager, and the Geekworm Geekworm NAS scripts for the power switch and fan control basically just work out-of-the-box. Unfortunately the default Ubuntu image for the Pi is quite bloated out-of-the-box, most notably due to the Snap packaging system that they promote, but I was able to remove it along with quite a few other unneeded packages and services. This left me with a fairly lean base system with solid pre-compiled support for ZFS. For the graphical administration component OpenMediaVault doesn’t support Ubuntu, but I had been testing Webmin and found the most recent versions to be much more comprehensive and pleasant to use than the older versions that I had tried many times. (I chose to install Webmin via its manual installation script to /usr/local/webmin/
by downloading and decompressing a .tar.gz
file, because I want to be able to easily upgrade to the latest versions that come directly from Webmin without worrying about Ubuntu package dependencies that would come with the DEB packaged version of Webmin). Although it’s not an out-of-the-box NAS experience I was able to install and configure fairly easily the Samba server the way I wanted it to work via Webmin, and I also installed the borgbackup
package from the Ubuntu repos for backing up various computers onto a repository on the NAS. Webmin also allows for configuring automatic unattended system upgrades and/or manual package management operations from its interface, as well as other common system administration and monitoring tasks. So overall I’m pretty happy with how the new Ubuntu+Webmin NAS is running. It’s taken a lot of experimentation with all the options to arrive at this ideal system for me, but if I or anybody else wanted to set up a similar system like this again it could be easily achieved with a minimal number of steps.