Checking out an Intel Optane module was always on my bucket list, but I never really had a solid use case for it. Recently, instead of buying a new Raspberry Pi with more physical RAM, I thought: why not give high-speed, ultra-low-latency swap a try?
Continue reading Playing with an Intel Optane on a Raspberry Pi 5Category: Storage & Databases
Migrating from MinIO to Garage on a Raspberry Pi 5
I recently migrated my self-hosted S3-compatible storage from MinIO to Garage.
While MinIO is the industry leader for enterprise object storage, I needed something lighter for my homelab to serve Paperless-ngx (thousands of small files) and Audiobookshelf (large media files). My choice fell on Garage (v1.0+), an open-source distributed object store tailored for self-hosting.
Continue reading Migrating from MinIO to Garage on a Raspberry Pi 5Rclone’s VFS Cache: A Deep Dive into Optimizing for a Local MinIO S3 Backend
I realized a critical detail about my setup: the standard vfs-cache strategy is a good starting point only if the cache’s performance is superior to the S3 backend. With this theory in mind, it was time to put it to the test.
Audiobookshelf Storage: Using Rclone Volume Plugin vs. Host Mounts
Audiobookshelf is an excellent self-hosted server for audiobooks, podcasts, and ebooks. I decided to integrate this service with S3 as the primary storage layer, as I centralized all my data in Object Storage long ago.
Continue reading Audiobookshelf Storage: Using Rclone Volume Plugin vs. Host MountsZFS Disaster Recovery: Rebuilding and Mirroring a Pool After Top-Level Vdev Error
I recently learned a hard lesson about ZFS Vdev architecture after attempting to convert a single-disk pool into a mirror. By mistake, I added the new disk as a top-level Vdev, rather than attaching it as a mirror. As zpool remove and zpool detach both failed on the top-level Vdev, I was forced to destroy the pool and restore the data from a snapshot.
This process outlines how I recovered data and subsequently created a proper mirror configuration.
Continue reading ZFS Disaster Recovery: Rebuilding and Mirroring a Pool After Top-Level Vdev ErrorKeyDB Performance: Switching from Redis to a Multi-Threaded Drop-in Alternative
I just read a few pages with benchmarks about Redis vs. KeyDB, and my curiosity was piqued. KeyDB, a multi-threaded fork of Redis, promised significant performance and memory usage improvements. This guide shows how I switched three different Redis use cases to KeyDB.
Continue reading KeyDB Performance: Switching from Redis to a Multi-Threaded Drop-in AlternativeContainer Storage Architecture: Deploying Rclone S3 Mounts via Docker Volume Plugin
I rely on S3 for central storage. Since some tools do not support native S3 yet, I use rclone. This article details how I implement a persistent S3 mount directly into a Docker container (paperless-ngx) using the rclone Docker Volume Plugin, which is a superior method to traditional host-level mounts.
Nextcloud S3 Workaround: Multi-User Rclone Mounts with Systemd Templates
I experienced trouble with Nextcloud’s built-in S3 connector, as it would corrupt photos during auto-upload from the Android client. Since dedicated S3FS or Goofys were also not ideal, I decided on a reliable alternative: using rclone to manage the mounts. This strategy allows me to decouple the unreliable Nextcloud S3 implementation from the underlying object storage.
Continue reading Nextcloud S3 Workaround: Multi-User Rclone Mounts with Systemd TemplatesPaperless-NGX Maintenance: Routine Updates and Major Stack Upgrades
This article documents the process for updating and upgrading the Paperless-NGX stack. This covers everything from simple container image updates to complex major version upgrades of backend services like PostgreSQL.
Continue reading Paperless-NGX Maintenance: Routine Updates and Major Stack UpgradesZFS Encryption: Mitigating Physical Attacks with Remote Key Management
This article documents the design and implementation of an external key management solution for ZFS encryption. This approach utilizes a custom PHP service to serve encryption keys on demand, specifically designed to mitigate physical and system-level compromises where local keys would fail. This deep dive explores the security architecture, the self-written PHP proof-of-concept (PoC), and the critical security caveats of building a custom Key Management System (KMS).
Continue reading ZFS Encryption: Mitigating Physical Attacks with Remote Key Management