leBLOB, S3 storage for the masses¶
leBLOB is an S3-compatible object store written in Python. One command starts it on one machine, for any S3 client to use. It is designed to grow into a redundant cluster across several locations. It is meant to replace self-hosted MinIO and Garage, starting with single-server installs.
Development status
leBLOB is alpha software. It runs on one server, with one or several disks, and clusters aren't built yet. Run it next to your existing backups before you depend on it.
In six slides¶
Quick links¶
-
A running store and a first bucket in a few minutes
-
boto3, the AWS CLI, rclone and s5cmd
-
What
rclone synccopies and what it leaves out -
Every command and option
Why leBLOB?¶
Tested to keep data safe¶
An object is acknowledged only once it is on disk and committed, so a power cut can't lose it. A client never sees half an object. This is tested by replaying power cuts at the block layer on ext4, XFS and btrfs, next to a build that skips one fsync, which the test has to catch. See Testing.
One machine first, a cluster later¶
Blobs never change once written, and all consistency lives in the metadata. Copies of a blob can't disagree, so the storage needs no quorums. A cluster keeps the same model and changes only the metadata store. See Architecture.
Real clients, unmodified¶
boto3, the AWS CLI v1 and v2, rclone and s5cmd are tested end to end over HTTP and HTTPS, and 349 tests of Ceph's s3-tests pass. A request leBLOB can't honour gets an error, so a client is never told a promise was kept when it wasn't.
Small enough to read¶
leBLOB is a Python program with no web framework. It keeps metadata in SQLite and data in files. One person can read the codebase and keep it in their head.
Features¶
- Buckets, objects, ranges, conditional requests and listings
- Multipart uploads,
CopyObjectandUploadPartCopy - Versioning, lifecycle rules and object tags
- CORS, public-read buckets and objects, and form uploads
- SigV4 in headers and presigned URLs,
aws-chunkedbodies and checksums from MD5 to CRC64NVME - Encryption with the client's own key (SSE-C)
- Several disks, with a number of copies of each blob
- A read moves to another copy if a disk fails, even mid-response
- Background scrub and repair
- Draining a disk before removing it
- Access keys with full access, or scoped per bucket at read, write or admin level
- Metadata backup while the server runs,
restoreandfsck - Prometheus metrics and structured access logs
- TLS, a
Dockerfile, and upgrades tested from each release's stored data
See Features for the full list, and Known Limits for what isn't there yet.
Getting started¶
Run it from a checkout, with uv:
The first start creates an access key and prints it once. Then follow the Quick Start.
Source and license¶
The code is at git.sr.ht/~sfermigier/leblob, under the Apache 2.0 license.