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.
Category: Storage & Databases
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 ManagementDistributed MinIO on AWS Lightsail: Multi-Node Setup
MinIO is a high-performance, S3-compatible object storage solution. This article provides a blueprint for deploying a distributed MinIO stack using Amazon Lightsail, covering the critical steps for multi-node setup, networking, and Systemd.
Continue reading Distributed MinIO on AWS Lightsail: Multi-Node SetupNextcloud and MinIO Integration: Why Direct S3 Fails and the Filesystem Abstraction Workaround
MinIO is a fantastic Object Storage solution, and I intended to use my distributed MinIO system as the primary external storage for Nextcloud. This distributed setup, which uses Sidekick as a load balancer for seamless node access, proved functional but revealed a critical stability flaw, particularly with mobile uploads.
Continue reading Nextcloud and MinIO Integration: Why Direct S3 Fails and the Filesystem Abstraction Workaround