














[AI生成]
跨集群或跨服务器迁移 MinIO 数据,首选官方客户端 mc mirror,它支持断点续传、增量同步、保留元数据,且不依赖两端的物理目录结构;跨云厂商或 MinIO 与其他对象存储互迁时推荐用 rclone;只有在单机部署、可停机且两端 MinIO 版本完全一致的前提下,才考虑直接 rsync 数据目录。
| 方法 | 适用场景 | 优点 | 缺点/风险 |
|---|---|---|---|
| mc mirror | MinIO↔MinIO、MinIO↔本地、MinIO↔S3 兼容存储 | 官方工具、断点续传、支持 --watch 持续同步、--preserve 保留属性 |
默认不迁移对象版本历史(需 mc replicate) |
| rclone | 跨云/跨厂商、对象存储到对象存储、需要限速并发控制 | 通用 S3 协议、并发参数可调、支持 --dry-run 演练、rclone check 校验 |
需手动写配置文件,桶策略等元数据不会同步 |
| rsync 直接拷贝数据目录 | 单机部署、可停机窗口、两端版本与纠删码配置完全一致 | 速度快、不占网络协议开销 | 跨版本/启用加密后极易导致对象不可读;集群纠删码布局不可随意拷贝 |
| mc cp --recursive | 小规模、单桶一次性搬迁 | 命令简单 | 无增量、无 watch,中断后需重跑 |
| 站点复制 / mc replicate | 双活容灾、长期同步 | 同步对象版本、桶配置、IAM 用户与策略 | 要求两端版本一致(建议 v2024.10+)、桶必须开启版本控制 |
wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc
chmod +x /usr/local/bin/mc
mc --version
mc alias set oldminio http://<源端IP>:9000 <ACCESS_KEY> <SECRET_KEY>
mc alias set newminio http://<目标端IP>:9000 <ACCESS_KEY> <SECRET_KEY>
# 验证连通性
mc ls oldminio/
mc ls newminio/
注意用 API 端口 9000,而不是 Console 的 9001/9090 端口,这是常见的连接失败原因。
# 单桶迁移
mc mirror --overwrite --preserve oldminio/mybucket newminio/mybucket
# 整个集群所有桶迁移
mc mirror --overwrite --preserve --active-active oldminio/ newminio/
关键参数说明:
--overwrite:目标端已有同名对象时强制覆盖,否则会报错跳过--preserve, a:保留源端的文件系统属性和桶策略规则--remove:删除目标端源端不存在的对象(让两端完全一致,慎用)--watch:持续监听源端变化,用于业务不停机的增量同步--dry-run:先演练一遍,只列出会迁移的对象,不实际传输--older-than / --newer-than:按时间过滤,常用于分批迁移--max-workers:控制并发数,网络不稳或源端压力大时调低mc mirror 在前台运行时,SSH 断开任务会被杀掉。建议:
screen -S minio-migrate
mc mirror --overwrite --preserve --retry oldminio/ newminio/ 2>&1 | tee migration.log
# 按 Ctrl+A 再按 D 脱离会话
# 之后用 screen -r minio-migrate 重新接入查看
curl https://rclone.org/install.sh | sudo bash
~/.config/rclone/rclone.conf[minio-src]
type = s3
provider = Minio
env_auth = false
access_key_id = SRC_ACCESS_KEY
secret_access_key = SRC_SECRET_KEY
region = cn-east-1
endpoint = http://src-minio:9000
[minio-dst]
type = s3
provider = Minio
env_auth = false
access_key_id = DST_ACCESS_KEY
secret_access_key = DST_SECRET_KEY
region = cn-east-1
endpoint = http://dst-minio:9000
provider = Minio 这个字段是关键,否则 rclone 会默认按 AWS S3 的虚拟主机风格寻址,导致找不到桶。
# 先演练,看会同步哪些对象
rclone sync minio-src:mybucket minio-dst:mybucket --dry-run -P
# 正式执行(16 并发,失败重试 3 次)
rclone sync minio-src:mybucket minio-dst:mybucket \
--progress --transfers 16 --checkers 16 \
--retries 3 --log-file /var/log/rclone-sync.log
# 校验一致性
rclone check minio-src:mybucket minio-dst:mybucket
rclone sync 会删除目标端源端不存在的对象,如果想只补差异不动已有文件,用 rclone copy。
适用条件苛刻:单机部署、可停机、源和目标 MinIO 版本和纠删码配置完全一致、未启用 SSE 加密。
systemctl stop minio
rsync -av --progress --exclude='.minio.sys' /data/minio/ /new/data/minio/
chown -R minio-user:minio-user /new/data/minio
systemctl start minio
.minio.sys 是 MinIO 内部元数据目录,新实例启动会自动生成,不需要迁。分布式集群下数据是按纠删码条带分布的,绝不能只拷贝部分节点的目录,否则数据无法还原。
s3:ListAllMyBuckets、s3:ListBucket、s3:GetObject,目标账号需要 s3:PutObject。最小权限配置经常漏掉 List 权限,迁移到一半卡住。排查时建议先用 root 账号验证流程可行,再降权到业务账号。analytics_data 这类带下划线的桶名会导致部分 S3 兼容工具报错。从其他存储(如 Ceph 放松限制的桶名)迁到 MinIO 时,含大写字母的桶名必须先重命名。mc mirror 只同步当前版本对象。如果启用了版本控制或配置了 ILM、事件通知、桶策略,需要在目标端单独用 mc replicate 或 mc admin replicate 配置,或者手动重建桶策略。--verify-checksum 或显式开启 mc config set <alias> checksum on。网络不稳时加 --retry(mc)或 --retries(rclone)。# 对比两端对象数
mc ls --recursive oldminio/mybucket | wc -l
mc ls --recursive newminio/mybucket | wc -l
# 官方差异对比命令,输出为空即一致
mc diff oldminio/mybucket newminio/mybucket
# 总体积对比
mc du oldminio/mybucket
mc du newminio/mybucket
# 检查未完成的分片上传残留
mc ls --incomplete newminio/mybucket
mc rm --incomplete newminio/mybucket --force # 清理残留
mc diff 为空、两端对象数和 du 结果一致,且业务侧能正常 GET 到关键样本文件,即可以认为迁移完成。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。