How flexBlock Works

To the Linux kernel, flexBlock is an ordinary block device. Behind it, a small daemon serves every read and write from a local NVMe cache and keeps the durable, compressed copy of the volume in your object storage bucket.

Read the Details

Three Layers, One Disk

Your applications and filesystem see /dev/ublkb0. The cache makes it fast. The bucket makes it durable.

flexBlock architecture: applications use a filesystem on /dev/ublkb0; the flexBlock daemon serves it from a local NVMe cache, flushes to object storage and fetches misses backflexBlock architecture: applications use a filesystem on /dev/ublkb0; the flexBlock daemon serves it from a local NVMe cache, flushes to object storage and fetches misses back

Reads

From NVMe, or fetched once from the bucket

  • Cache hits are served straight from local NVMe
  • A miss fetches the chunk from the bucket, decompresses it and keeps it on NVMe
  • Sequential cold reads trigger prefetch, so a scan is not paced by one request at a time
  • The cache warms on demand; nothing is bulk-copied

Writes

Acknowledged from NVMe, flushed in the background

  • Writes are acknowledged from NVMe, at NVMe speed
  • A write-ahead log records which data is still waiting for upload
  • Dirty chunks are compressed and uploaded in the background
  • Chunks the filesystem trims entirely are deleted from the bucket

"Everything on the cache is in the bucket or on its way there."

The cache needs no durability of its own. Losing it abruptly costs the writes not yet flushed, about four minutes' worth by default, and because chunks upload one at a time, the bucket is not a point-in-time copy: expect a filesystem check afterward.

The Volume Lifecycle

One binary covers the whole life of a volume. Every state-changing command can preview itself with --dry-run, and flexBlock refuses rather than guesses when something is not right.

  1. 1flexblock init

    Create a new, empty volume in the bucket. Choose its size, chunk size and compression.

  2. 2flexblock attach

    Size a cache on a local NVMe device and claim ownership of the volume.

  3. 3flexblock start

    Check prerequisites, recover if needed and serve /dev/ublkbN until stopped.

  4. 4flexblock update

    Grow the volume, live on Linux 6.16 or newer, or change compression for new writes.

  5. 5flexblock detach

    Release ownership. The data stays in the bucket for the next host to attach.

  6. 6flexblock wipe

    Delete the volume and its cache when you are done with it.

Built to Survive the Bad Day

Instances stop, daemons crash and hosts disappear. FlexBlock is designed so the volume itself survives each of them.

Daemon Crash

The kernel holds in-flight I/O while the daemon is away. Run start again, or let systemd do it, and the device resumes with the filesystem still mounted.

Lost Instance

A replacement host takes the volume over and warms its cache on demand. A built-in wait lets the old owner stop writing before the new one starts. Writes not yet flushed are lost, and the filesystem may need a check.

One Writer at a Time

An ownership marker in the bucket, written with conditional writes and renewed as a lease, keeps a second host from claiming a volume in use. A deliberate takeover makes the old host stop, and the new one wait, before it writes.

Capacity That Is Licensed, Not Provisioned

Each volume is covered by a signed license grant from Paradigm4 that names its bucket and its maximum size. Grow the volume whenever you need to, up to that size, live on Linux 6.16 or newer. A renewed grant takes effect within a minute of being installed, or at its start date if that is later.

Talk to us about a license
ValidFull speed. A daily notice starts seven days before expiry.
GracePast expiry but within the grace period. Warnings only; nothing slows down.
ExpiredReads and writes are throttled, never cut off, so your data can always be moved out. Creating or growing volumes needs a current grant.
UncoveredA volume larger than its licensed size is throttled the same way.

See It on Your Own Hardware

Your First Volume, in the docs, takes you from an empty bucket to a mounted filesystem in four commands.