Skip to content

Moving from MinIO or Garage

leBLOB has no import command: a bucket moves over S3, with rclone, one bucket at a time. tests/bench/run_migration.py in the repository runs this from MinIO and from Garage, and checks what arrives.

Copy a bucket

Set up an rclone remote for each store, both with provider = Other and force_path_style = true:

[old]
type = s3
provider = Other
endpoint = https://minio.example.org
access_key_id = ...
secret_access_key = ...
force_path_style = true

[leblob]
type = s3
provider = Other
endpoint = https://s3.example.org
access_key_id = ...
secret_access_key = ...
force_path_style = true

Create the bucket on leBLOB, then copy and compare:

rclone mkdir leblob:my-bucket
rclone sync --metadata old:my-bucket leblob:my-bucket
rclone check old:my-bucket leblob:my-bucket

rclone sync can run again to catch what changed in the meantime. Stop writes to the old store for the last run, then point clients at leBLOB.

What arrives

  • The bytes of every object, multipart objects included.
  • Keys as they were, including spaces, +, &, = and non-ASCII characters.
  • Content-Type, Cache-Control and x-amz-meta-*, with --metadata.

rclone adds mtime and btime to the metadata. An object's time on leBLOB, as listings and lifecycle rules see it, is the time it was copied.

What has to be set again

These don't travel with the objects:

  • Access keys. Create them with leblob key create, and grant scoped keys their buckets. See Access keys. MinIO's users and policies have no equivalent beyond keys scoped per bucket.
  • Object tags.
  • ACLs. Make buckets or objects public again with public-read. See Public access.
  • Lifecycle rules and CORS rules. Put the same XML with put-bucket-lifecycle-configuration and put-bucket-cors. leBLOB refuses a lifecycle rule with parts it doesn't understand, such as transitions. See Versioning, lifecycle rules and tags.
  • Versioning, and every version but the current one. Turn versioning on before copying if the bucket should keep versions from then on.

Before you switch

  • Check that every client signs with SigV4. boto3 presigns with SigV2 unless told otherwise. See Using S3 clients.
  • Look for features leBLOB answers with 501 NotImplemented: bucket policies, Object Lock, encryption managed by the server, and storage classes other than STANDARD. A client that used one on the old store gets an error from leBLOB, so it can't lose the feature without noticing.
  • Back up the metadata once the copy is done. See Backup and restore.