Migrating from MinIO
Switch an existing MinIO deployment to liteio.
liteio aims for drop-in compatibility with MinIO's S3 API. In most cases, changing the endpoint URL is all that is required.
Client migration
Point any S3 client at liteio's endpoint. No SDK changes are needed:
# Before (MinIO)
aws --endpoint-url http://minio.example.com:9000 s3 ls
# After (liteio)
aws --endpoint-url http://liteio.example.com:9000 s3 ls
mc alias:
# Before
mc alias set myminio http://minio.example.com:9000 access secret
# After
mc alias set liteio http://liteio.example.com:9000 access secret
Data migration
Use mc mirror to copy data from a running MinIO instance to liteio:
mc alias set src http://minio.example.com:9000 minio-access minio-secret
mc alias set dest http://liteio.example.com:9000 liteio-access liteio-secret
mc mirror src/ dest/ --preserve
mc mirror copies objects incrementally, preserving metadata and ETags. Run it
continuously during the migration window (--watch flag) to drain the delta,
then cut over DNS or the load balancer endpoint.
For large datasets, run multiple mc mirror instances in parallel with
different bucket prefixes.
IAM migration
The IAM model is compatible. Export MinIO policies:
mc admin policy list myminio
mc admin policy info myminio readwrite > readwrite.json
Import into liteio:
mc admin policy create liteio readwrite readwrite.json
Export and re-create users:
mc admin user list myminio
# For each user:
mc admin user add liteio alice alicepw
mc admin policy attach liteio readwrite --user alice
Config differences
| MinIO setting | liteio equivalent |
|---|---|
MINIO_ACCESS_KEY / MINIO_SECRET_KEY |
--access-key / --secret-key |
MINIO_VOLUMES |
--drives |
MINIO_ERASURE_SET_DRIVE_COUNT |
not exposed; computed from total drives and --parity |
MINIO_SITE_NAME |
not needed; no external metadata service |
MINIO_PROMETHEUS_AUTH_TYPE bearer |
--metrics-token |
MINIO_PROMETHEUS_URL |
http://<console-address>/metrics |
Deliberate behavior differences
See the compatibility matrix for the full list.
The main practical difference is CreateBucket idempotency: liteio always
returns 409 for a bucket you already own, where MinIO returns 200 for
us-east-1. Infrastructure-as-code tools that rely on idempotent
create-bucket should add an --ignore-error BucketAlreadyOwnedByYou check
or move to a separate head-bucket existence check.