To move away from MinIO Community safely, choose a maintained destination, copy a small canary first, verify the application, then migrate current objects and reconcile changes during a controlled cutover. Treat version history, retention, credentials and bucket configuration as separate work. An S3-compatible API does not make two storage systems interchangeable.
As of 1 November 2026, the upstream minio/minio repository is archived: GitHub records 25 April 2026 as the archive date. Existing installations do not stop because a repository becomes read-only. The operational question is who will maintain your storage software, handle security fixes and recover it when hardware fails.
Managed S3 or a maintained self-hosted alternative?
Start with the responsibility you want to keep. A managed service moves storage infrastructure operations to a provider; your team still owns access policies, application behavior, retention choices and restore testing. Self-hosting keeps control of disks and topology, together with upgrades, monitoring, capacity planning and incident response.
| Route | Useful when | Work to prove before choosing |
|---|---|---|
| Managed S3-compatible storage | A small team wants an object API without running the cluster. | Required S3 operations, location, recovery process, support scope and total bill. |
| Ceph Object Gateway | You already operate Ceph or can support a storage cluster. | Your release's API coverage, failure domains, upgrade path and recovery staffing. |
| Garage | Your workload fits its documented API and distributed-storage model. | Application compatibility, unsupported operations and repair procedures. |
| SeaweedFS | You can operate its components and want to evaluate its S3 interface. | Release-specific semantics, metadata services and operational recovery. |
These are evaluation paths, not a compatibility ranking. Ceph documents support for a large subset of the S3 API, and its release index identifies maintained release lines. Garage publishes an operation-by-operation compatibility table and 2026 reliability work. SeaweedFS release history shows ongoing development. None of those facts proves that your exact application will work.
Do not transplant MinIO data directories into another product. Plan a transfer through supported APIs, unless both products explicitly document another migration method. Test the destination with the SDK versions and requests that your application actually uses.
Define what “migrated” means
Write a short acceptance sheet before copying anything. Record each bucket, its owners, current object count, logical bytes, largest object, daily changes and applications that write to it. Add public download paths, browser uploads, background jobs and scheduled exports. An upload worker forgotten during cutover can keep writing to the old service after the website has switched.
Separate at least four migration tracks:
- Current object content: keys and bytes visible to ordinary object reads.
- Object properties: content type, cache headers, user metadata, tags and encryption requirements.
- Historical and protected data: previous versions, delete markers, retention dates and legal holds.
- Service configuration: credentials, permissions, CORS, lifecycle rules, notifications and external integrations.
A successful ordinary copy addresses only part of that sheet. S3 versioning keeps distinct versions and delete markers; enabling versioning on the destination does not recreate the source's history. Applications that store version IDs need an explicit migration design. Keep the source available if preserving historical identities is a requirement you have not solved.
For protected records, agree on retention semantics with the people responsible for the data before choosing tools. Do not remove source protection to make a transfer easier. A bucket that accepts object bytes may reject retention operations, and a retention configuration mistake can be difficult or impossible to reverse.
Our S3 versioning guide helps distinguish recoverable versions from a complete backup policy. Use the storage security checklist when rebuilding access rather than copying old permissions blindly.
Build a small, representative canary
Create a dedicated empty destination bucket. Give the migration identity list/read access at the source and only the destination permissions required for the trial. Keep production application's credentials separate. Configure two rclone S3 remotes called minio-old and s3-new through rclone config, using each service's documented endpoint, region and addressing style. Protect the configuration file and keep credentials out of scripts and logs.
Choose a bounded, non-sensitive source prefix containing representative objects: small files, a multipart-sized file, spaces and Unicode in keys, application metadata and any important content headers. Include an overwritten object and a deleted object in a separate version-history trial. Define a byte limit for the canary before choosing large files.
The following example assumes that migration-canary/ is an existing source prefix and the destination bucket is exclusively for this test. Replace bucket names before running it:
rclone copy minio-old:source-bucket/migration-canary \
s3-new:migration-test/migration-canary \
--metadata --dry-run
rclone copy minio-old:source-bucket/migration-canary \
s3-new:migration-test/migration-canary \
--metadata --log-level INFO --log-file canary-copy.log
rclone check minio-old:source-bucket/migration-canary \
s3-new:migration-test/migration-canary \
--download --one-way
rclone copy leaves destination-only objects in place, although it can overwrite matching keys. That is safer for an initial transfer than a command that mirrors deletions. The download check compares downloaded content without modifying either side; it creates transfer traffic on both services. This is why the example starts with a bounded canary.
rclone metadata support applies when an object is transferred; it does not automatically reconcile later metadata-only changes on an object whose content it skips. Include a canary that changes Cache-Control or user metadata without changing the bytes. Inspect required headers and user metadata independently after copying and again after the final write pause. Save both inventories, review differences and repair only approved keys with the destination's documented metadata operation or a targeted retransfer, then recheck them. Neither the flag nor a byte comparison proves that tags, retention and bucket rules match. Consult the S3 backend documentation for the installed rclone version and the features you need.
Finally, point a test instance of the application at the new endpoint. Exercise upload, overwrite, download, listing and deletion of disposable objects. Check both an already-issued source presigned URL and a newly generated destination URL, plus multipart upload completion and CORS if used. Record request failures and expected results. Do not accept “the bucket lists correctly” as the application test.
Copy in bulk, then control the final changes
1. Perform the initial copy while the source remains authoritative
After the canary passes, create the final destination with reviewed permissions and required protection. Run a dry run for each approved bucket mapping, then copy current objects using the same source-to-destination direction. Keep an explicit mapping sheet: source bucket, destination bucket, prefix, owner and migration job.
Save exit codes and restricted-access logs. Compare object counts and bytes as an early warning, not as proof of integrity. Investigate every failed object. A large transfer with a few failures is incomplete even if most data arrived. See our practical rclone guide for a fuller tool introduction.
2. Pause writes and reconcile the delta
Schedule a write pause that covers every writer, including queues and automation. Wait for in-flight uploads to finish. Run the copy again and verify the frozen source against the destination, comparing required headers and user metadata separately from content. Where comparable hashes are unavailable, budget a full download comparison or define and document a narrower assurance level; sampling cannot prove every object survived.
Default copy comparison can skip an object that appears unchanged. If verification finds a mismatched key, recopy that specific key with a reviewed command that forces transfer, then recheck it. Do not treat matching sizes or opaque ETags as universal content hashes.
Reconcile source deletions separately. Because copy leaves destination-only keys, an object deleted during the initial transfer might still exist at the destination. Build a reviewed deletion list from your frozen inventories or application change log. Apply only confirmed deletions after checking retention and recovery requirements. Do not turn on a broad sync/delete operation to make a count match.
3. Switch configuration and hold a rollback window
Update endpoint, bucket mapping, region, credentials and addressing style together. Run a production smoke check with an approved disposable object, then resume writes. Monitor failed uploads, missing downloads, authentication errors and background-job failures.
Inventory already-issued presigned download links separately from application settings, without exposing their signed query strings in logs. Reissue links against the destination, or retain the required old endpoint, objects and signing access through the agreed expiry window. AWS documents that presigned access depends on the signing credentials and their validity, while SigV4 signs the host and request components. The migration implication is to test old links rather than assume they survive hostname, credential or version-ID changes. Do not rewrite a signed hostname as a generic migration fix. Already-issued upload URLs need a separate drain or reissue plan so they cannot silently bypass the write pause.
Keep the old service protected and available for an agreed period. Once new writes begin, switching the endpoint back alone would lose access to those writes. A rollback needs its own write pause and a reviewed reverse transfer or reconciliation. Identify who can make that decision and how new objects will be tracked before the cutover starts.
Estimate migration cost and the first steady month
Use quantities you can measure, rather than comparing only a storage-per-terabyte headline. The migration budget is source reads and egress, destination writes, temporary duplicate storage, verification reads and staff time. The recurring budget adds stored current and historical data, API operations, outbound downloads and any minimum charges.
For an illustrative workload with 2 TiB of current objects, a full download comparison reads roughly 2 TiB from each endpoint, assuming no retries or additional versions. This is a planning quantity, not a benchmark or provider bill. Price both paths using each provider's billing units and network terms.
For self-hosting, also include usable capacity after redundancy, spare disks, a separate backup, monitoring and operator time. For managed storage, confirm the data location and contractual terms you need; European location alone does not establish regulatory compliance.
If managed storage fits your responsibilities, explore DanubeData object storage and current pricing. Run the same canary and acceptance sheet against any candidate before moving production data.
Frequently asked questions
Does archived MinIO immediately stop working?
No. The archive status concerns the upstream repository, not a switch on your running server. Inventory the actual binary, support arrangements and security exposure, then set a migration priority based on your workload.
Does rclone copy preserve every old version?
The ordinary workflow above copies current objects. Historical versions and delete markers need a separate tested method, reconciliation and retention plan. Do not assume new destination versioning reconstructs old history.
Can the migration avoid a write pause?
Possibly, with an application-specific replication and change-capture design. This guide uses a controlled pause because a repeated bulk copy alone cannot guarantee that concurrent overwrites and deletions are reconciled.
When can the source be removed?
After acceptance checks, application verification, historical-data requirements and the rollback window are complete, and a responsible owner approves retirement. Retain an independent recoverable copy according to your policy before deleting infrastructure.
Sources
MinIO upstream repository; rclone copy; rclone check; rclone S3 backend; AWS versioning model. Alternative-project documentation and release links appear in the comparison above.