Get 50 GB free!Register for a free account and start migrating today — no credit card required.Register now →
GodwitGodwit Sync
HomePricingDownloadsDocs
Customer PortalGet Started
Get Started
MinIO Migration

MinIO is frozen. Migrate to S3, RustFS, or Ceph without losing versions or Object Lock.

MinIO Community is frozen. Moving production MinIO at scale? mc mirror and rclone won't carry your version history, your Object Lock settings, or resume cleanly from a 40 TB failure. Godwit Sync preserves all three and resumes from the last verified chunk, keeping the cutover window short and predictable.

Plan your migration freeSee how it works ↓

Latest post

Migrate Multiple S3 Buckets in Parallel

Migrate multiple S3 buckets in parallel using one Godwit config file per pair, a short orchestrator script, and a single Grafana dashboard showing all runs.

Read more

Production MinIO migration needs dedicated tooling

MinIO migration at production scale needs more than mc mirror, rclone, or manual scripts.

  • mc mirror

    • No plan-first preview before objects move.
    • No chunk-level resume — a failure at 38 TB of 40 TB restarts near zero.
    • No per-version checksum beyond ETag.
    • Bucket policies and access keys must be recreated manually (confirmed in RustFS migration docs).
  • rclone

    • Memory pressure at 500M+ objects (documented in the rclone forum).
    • Hangs on S3 mounts under load.
    • --s3-versions has documented bugs where re-runs skip versioned files.
  • Manual scripts

    • No observability.
    • No resume from exact chunk.
    • No deterministic plan — every rerun behaves slightly differently.

None of this means those tools are bad. It means they weren't designed for the specific shape of MinIO-to-anywhere migrations at production scale.

How Godwit Sync moves MinIO

A plan-first transfer pipeline built for S3-compatible storage at production scale. Survey the source, approve the plan, transfer in verified chunks, and carry versions and Object Lock across intact.

Plan-first execution
godwit sync --plan-only walks the source and writes a deterministic SQLite plan of every bucket, object, and version. Inspect it, edit it, approve it. Nothing moves until you run the plan.
Resume from the last verified chunk
Every transfer is checkpointed at the chunk. A 40 TB migration that fails at 38 TB continues from the next unsent byte on the next run, not from zero and not from the last completed object.
Per-version MD5 verification
Each object version is validated end to end with a real MD5, not an ETag guess. The run report lists exactly which versions landed, which did not, and why.
Object Lock preserved per version
GOVERNANCE and COMPLIANCE retention, legal hold flags, and retain-until dates are copied per version. Compliance state at the destination matches the source after cutover.
Any S3-compatible source and destination
MinIO to AWS S3, RustFS, SeaweedFS, Garage, Ceph, or a new MinIO fork. The same pipeline and the same guarantees on either side, with no per-vendor connector to configure.
Back-pressure controls for live source clusters
Cap read bandwidth (--read-bps), requests per second (--rps), and concurrent uploads (--max-inflight) so your production MinIO cluster stays healthy while the migration runs.

Example commands

MinIO → AWS S3

$ godwit sync \
    --source s3://minio-bucket \
    --source-endpoint https://minio.internal:9000 \
    --destination s3://prod-bucket \
    --destination-region us-east-1 \
    --plan-only

────────────────────────────────────────
  PLAN CREATED
────────────────────────────────────────
  ✓ Run-ID: minio-to-s3-prod
  ✓ Objects to transfer: 2,184,903
  ✓ Data to transfer: 38.2 TB
────────────────────────────────────────

Generate a plan first. Inspect objects, sizes, and versions before a single byte moves.

MinIO → RustFS (post-MinIO replacement)

$ godwit sync \
    --source s3://old-minio \
    --source-endpoint https://minio.internal:9000 \
    --destination s3://rustfs-bucket \
    --destination-endpoint https://rustfs.internal:9000 \
    --version-mode all

Preserves full version history. Required for environments with compliance retention.

MinIO → MinIO (incremental sync / DR)

$ godwit sync \
    --source s3://primary-minio \
    --destination s3://dr-minio \
    --resume --run-id nightly-dr-sync

Reusable run IDs make this a cron job, not a migration.

MinIO migration FAQ

Does Godwit Sync preserve MinIO version history during migration?

Yes. Full version history migrates with per-version checksums. Use --version-mode all to carry every version, or --version-mode latest for the current version only. Each version is verified end-to-end with MD5.

What about MinIO Object Lock, retention modes, and legal holds?

Preserved per version. Both GOVERNANCE and COMPLIANCE retention modes are replicated, along with retain-until dates and legal-hold flags. Compliance state at the destination matches the source after cutover.

My MinIO data is erasure-coded. Does that affect migration?

No. Godwit Sync operates at the S3 API layer. Storage-layer details like erasure coding, parity, and disk layout are invisible to any S3-compatible migration tool, including this one.

How much downtime does a MinIO migration require?

Only a short final cutover window. Run a full sync against the live cluster, then a final incremental sync while writes are paused. Chunk-level resume and reusable run IDs keep the cutover predictable.

Does Godwit Sync handle multi-TB or multi-hundred-TB MinIO clusters?

Yes — that's the default design point. Chunk-level resume, deterministic plans, and back-pressure controls (--read-bps, --rps, --max-inflight) keep the source MinIO cluster healthy throughout. No local staging required.

What about MinIO bucket policies, IAM, and access keys?

Godwit Sync transfers object data, versions, and object-level metadata. Bucket policies and IAM/access keys must be recreated on the destination — this is true of every S3-compatible migration tool, not a limitation specific to Godwit.

How much does a MinIO migration cost with Godwit Sync?

The free plan covers 10 GB per run, forever. A 50 GB 30-day trial unlocks after registration. Paid plans start at €15/month with capacity tiers up to 10 TB per run. No per-object or per-GB transfer fees from Godwit.

Related reading

  • Complete S3 migration guide

    Planning, verification, and cutover for large S3-compatible migrations.

  • Migrating S3 version history

    How per-version checksums and --version-mode keep history intact across providers.

  • Godwit Sync vs rclone

    Where rclone struggles at scale (memory, versioned re-runs) and how plan-first execution avoids it.

  • Verifying S3 migrations end-to-end

    Post-migration verification, MD5 comparison, and run-report semantics.

Start with a plan, not a panic migration.

Create free accountRead the docs

50 GB migration capacity for 30 days after registration. 10 GB per-run permanent tier after that.

Godwit Sync

Production-grade data migration and synchronization for large object storage. Control, predictability, and safety at scale.

Product

  • Pricing
  • Documentation
  • Changelog

Legal

  • Terms of Service
  • User Agreement
  • Privacy Policy

© 2026 Godwit Sync. All rights reserved.

Version v1.1.5