NAS Server Build and Migration
I haven’t posted anything lately because I’ve been very busy with my NAS build. (And many other half baked projects around the house)
I have spent the last few months gathering components and watching unimaginable price increases happen in my wake. For instance, the 64GB of RAM I bought for my desktop build last year was $200 and is now going for $900+. These numbers are unprecedented, and makes my imagination run wild with the dystopic ramifications for the future of personal computing.
Thankfully, Microcenter saved the present day with a bundle deal on a Ryzen 5 9600x CPU (6 cores, 13 threads should be plenty for my modest work loads) and 32GB DDR5-6000 RAM. An eBay motherboard and CPU cooler kept my wallet happy to balance the 6 refurbished 12TB drives from serverpartdeals that, sure, perhaps saved me ~$600 instead of buying new, but my wallet is still recovering from the bulk purchase. I couldn’t wait any longer after watching them increase by $40 each, who knows where the ceiling is for even spinning rust at this point.
Though I scoured far and wide for a deal on the case, the Jonsbo N5 was purchased at full price. With a whopping 12 drive bays, it stands by itself on the winners podium and was a must for this build. With plenty of room for expansion, I intend on keeping this running for the foreseeable future.
Once fully assembled, which seems to happen slowly and then all of a sudden, it was time to install proxmox, and migrate my LXC containers from the old host to the new one. This should have been an easy process. But someone wasn’t scared of arch and decided to make as many of his containers and applications and services run on Arch Linux as possible, but then subsequently discovered Proxmox 9.x.x had removed his precious Arch LXC templates. So probably for the best to move away and to Ubuntu. While nothing broke, I also keep snapshots, backups, and I’m somewhat adept at fixing arch if/when it breaks, I know I shouldn’t be at the bleeding edge for some of these services. One mismatched dependency can crumble the whole application stack, and who knows who put what into some of these AUR packages. Thus, many of these containers needed to be rebuilt on Ubuntu.
But first, I needed to copy the ZFS datasets over. Snapshots and ZFS send/receive are a godsend. And for any datasets that had data copied to them in the interim, a block level incremental send replicated on the new host in seconds, whereas rsync would have had to check metadata on all files to see which had been updated and likely taken hours as a result.
Luckily the process was smooth for most once the pool was copied. The LXC migrations that weren’t already Ubuntu containers that couldn’t simply be restored from a shared backup encompassed either a simple reinstall and point to the new bind mount for services like Navidrome or a database transfer where things needed to be handled with slightly more care. The most nerve wracking part of this whole ordeal was updating a misnamed bind mount path for audiobookshelf, so I had to do surgery on the sqlite3 database to point the book covers to the correct location. I’m happy to say the patient survived.
I was expecting my docker/LXC combo container with Immich to be the most difficult, but it turned out to be one of the smoothest. Literally just spun up a container, installed docker, copied files over, and updated the bind mounts and a few other docker-specific settings in the config, and everything came up immediately.
Now that everything is just about in place the only thing I need to do now is export the old zpool, attach it to my backup server and update my sanoid/syncoid script for this new pool to be the source of truth.