Skip to content
liteio

Migrating from MinIO

Move an existing MinIO deployment onto liteio.

liteio targets drop-in compatibility with MinIO's S3 API. For most clients the migration is a one-line endpoint change. Data and IAM take a bit more, and the steps below cover both.

Repoint the clients

No SDK changes. Swap the endpoint:

# Before
aws --endpoint-url http://minio.example.com:9000 s3 ls
# After
aws --endpoint-url http://liteio.example.com:9000 s3 ls
# mc
mc alias set liteio http://liteio.example.com:9000 access secret

Move the data

mc mirror copies objects incrementally and preserves metadata and ETags. Point it from the live MinIO at 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

For a zero-downtime cutover, run it with --watch during the migration window so it keeps draining the delta, then flip DNS or your load balancer to liteio once the two sides are caught up. For a large dataset, run several mc mirror processes in parallel, each scoped to a different bucket or prefix.

Move the IAM

The model is compatible, so policies and users carry over.

Export from MinIO:

mc admin policy list myminio
mc admin policy info myminio readwrite > readwrite.json

Import into liteio:

mc admin policy create liteio readwrite readwrite.json

Re-create users and attach their policies. Secret keys cannot be exported from MinIO, so set new ones here:

mc admin user   add    liteio alice alicepw
mc admin policy attach liteio readwrite --user alice

Translate the config

MinIO liteio
MINIO_ACCESS_KEY / MINIO_SECRET_KEY --access-key / --secret-key
MINIO_VOLUMES --drives
MINIO_ERASURE_SET_DRIVE_COUNT not set directly; derived from drive count and --parity
MINIO_SITE_NAME not needed; there is no external metadata service
MINIO_PROMETHEUS_AUTH_TYPE bearer --metrics-token
MINIO_PROMETHEUS_URL http://<console-address>/metrics

The one behavior to watch

The full list is in the compatibility matrix, but in practice one difference bites: CreateBucket is strict. liteio returns 409 for a bucket you already own, where MinIO returns 200 for us-east-1. If your infrastructure-as-code calls create-bucket and expects it to be idempotent, either tolerate BucketAlreadyOwnedByYou or switch to a head-bucket existence check before creating.