Skip to content

Migration Tools Comparison

Reference · Updated Sep 2026

Migration tools comparison

Five tools cover the most common object storage migration and backup scenarios with Quake AI. Each has trade-offs in capability, speed, and ease of use.

Feature comparison#

FeaturercloneAWS CLIs3cmdMinIO Client (mc)restic
Cloud-to-cloud copyYesNo; requires local stagingNo; requires local stagingYesNo; backup only
Preserves custom metadataYes (--metadata)NoServer-side copy only (2.2.0+)YesN/A
Multipart uploadYesYesYesYesYes
Bandwidth limitingYes (--bwlimit)NoYes (--limit-rate)Yes (--limit-upload)No
Checksum verificationYes (rclone check)Yes (--checksum)Yes (--check-md5)Yes (mc diff)Yes (built-in)
Incremental syncYesYesYesYes (mc mirror --watch)Yes (dedup)
Encryption at restYes (crypt remote)NoNoNoYes (built-in AES-256)
DeduplicationNoNoNoNoYes (content-defined chunking)
Scheduling built-inNo; use cronNo; use cronNo; use cron--watch mode for continuousNo; use cron
S3-compatible endpoint supportYesYes (--endpoint-url)Yes (host_base)Yes (mc alias set)Yes (via S3 backend)

Checksum verification differs by tool. rclone check and mc diff run a standalone, bidirectional integrity comparison between source and destination. The AWS CLI --checksum flag and s3cmd --check-md5 verify checksums during a transfer or sync, not as a separate audit pass. For a full integrity audit after a migration, run rclone check or mc diff.

When to use each tool#

Decision guide: match your migration scenario to the right tool. For full feature details, see the table above.

ScenarioRecommended toolWhy
Full migration from another S3-compatible providerrcloneDirect cloud-to-cloud copy, no local staging, parallel transfers, checksum verification
Custom metadata must be preservedMinIO ClientCopies x-amz-meta-* headers between providers with mc mirror; current rclone (--metadata) also preserves them cross-provider. s3cmd preserves metadata only on same-endpoint server-side copies (2.2.0+)
Encrypted, deduplicated backupsresticBuilt-in encryption, content-defined chunking, retention policies via forget
AWS-centric workflow (already using AWS CLI)AWS CLIFamiliar commands, but requires local staging for cross-provider transfers
Legacy S3 workflowss3cmdLightweight, config-file based, but requires local staging for cross-provider transfers
Simple file-level backup to Quake AIrclonerclone copy with cron: reliable, well-documented, cross-platform

Quake AI configuration#

Each tool needs the Quake AI S3 endpoint, access key, and secret key. Generate credentials via create S3 credentials.

rclone#

Create a remote interactively with rclone config, or add directly to ~/.config/rclone/rclone.conf:

ini
[quakeai]
type = s3
provider = Ceph
access_key_id = YOUR_ACCESS_KEY
secret_access_key = YOUR_SECRET_KEY
endpoint = object.us-east-2.rumble.cloud
acl = private

Replace the endpoint with your region: object.us-east-1.rumble.cloud, object.us-east-2.rumble.cloud, or object.us-west-1.rumble.cloud.

Verify the connection:

bash
rclone lsd quakeai:

AWS CLI#

Configure a named profile in ~/.aws/credentials and ~/.aws/config:

ini
# ~/.aws/credentials
[quakeai]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
ini
# ~/.aws/config
[profile rumble]
region = us-east-1
output = json

Pass the endpoint on every command:

bash
aws s3 ls --profile rumble \
  --endpoint-url https://object.us-east-2.rumble.cloud

s3cmd#

Create or edit ~/.s3cfg:

ini
[default]
access_key = YOUR_ACCESS_KEY
secret_key = YOUR_SECRET_KEY
host_base = object.us-east-2.rumble.cloud
host_bucket = %(bucket)s.object.us-east-2.rumble.cloud
use_https = True
signature_v2 = False

Verify:

bash
s3cmd ls

MinIO Client#

bash
mc alias set rumble https://object.us-east-2.rumble.cloud \
  YOUR_ACCESS_KEY YOUR_SECRET_KEY

Verify:

bash
mc ls rumble

restic#

Initialize a repository on Quake AI S3:

bash
export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY"
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_KEY"
export RESTIC_REPOSITORY="s3:https://object.us-east-2.rumble.cloud/my-backup-repo"
export RESTIC_PASSWORD="YOUR_ENCRYPTION_PASSWORD"

restic init

Performance tuning#

rclone (performance tuning)#

bash
rclone sync source:bucket quakeai:bucket \
  --transfers 16 \
  --checkers 32 \
  --s3-upload-concurrency 8 \
  --s3-chunk-size 64M \
  --progress
  • --transfers: Parallel file transfers. Start with 16, increase for small files.
  • --checkers: Parallel integrity checkers. 2x --transfers is a reasonable default.
  • --s3-chunk-size: Multipart chunk size. Increase to 64M or 128M for large files.
  • --bwlimit: Throttle bandwidth (e.g., --bwlimit 100M for 100 MB/s).

AWS CLI (performance tuning)#

bash
aws configure set default.s3.max_concurrent_requests 20
aws configure set default.s3.multipart_chunksize 64MB

MinIO client (performance tuning)#

bash
mc mirror --overwrite --watch \
  source/bucket rumble/bucket

The --watch flag enables continuous sync after the initial mirror.

See also#

Before this

Quick answers

Was this page helpful?