使用 rclone 同步 MinIO 数据
rclone 是一个命令行工具,可以用来管理云存储产品中的文件,也可以实现不同云存储产品之间的数据同步,比如将 MinIO 中的数据同步到阿里云 OSS 等
rclone 支持的云产品列表:https://rclone.org/#providers
之前工作中也曾使用 rclone 将 MinIO 中几T的数据同步到阿里云 OSS
这里记录下在迁移对象存储产品数据的使用
安装 rclone
rclone 是一个单一的二进制文件,支持Linux、Windows、macOS等操作系统,提供 amd、arm、mips 等架构,只需要下载下来放到$PATH路径下就可以了,也有提供 deb/rpm 包
安装包下载地址:
# 安装示例
## 二进制安装
wget https://downloads.rclone.org/v1.72.0/rclone-v1.72.0-linux-amd64.zip
cp -fv rclone-v1.72.0-linux-amd64/rclone /usr/local/bin
## dpkg 安装
wget https://downloads.rclone.org/v1.72.0/rclone-v1.72.0-linux-amd64.deb
dpkg -i rclone-v1.72.0-linux-amd64.deb
配置
可以通过使用rclone config交互式的创建配置,配置文件会放在/root/.config/rclone/rclone.conf
也可以在执行rclone命令的时候通过--config指定配置文件路径
生成的示例如下:
[minio]
type = s3
provider = Minio
access_key_id = minio
secret_access_key = minioadmin
endpoint = http://minio.minio
[oss]
type = s3
provider = Alibaba
access_key_id = xxx
secret_access_key = xxxxxxxxxxxx
region = az1
endpoint = http://xxx.xxx.com
同步 MinIO 数据示例
配置文件
使用下面这个配置文件。
- 这个配置文件里面配置的
access_key_id和secret_access_key拥有最高权限,如果在自己环境中存在权限限制的话,后续的一些操作可能无法正常执行- 不同对象存储的
provider及其他配置项可能会有不同,可以通过rclone config交互式生成配置
[minio-old]
type = s3
provider = Minio
access_key_id = minio
secret_access_key = minioadmin
endpoint = http://minio.minio
[minio-new]
type = s3
provider = Minio
access_key_id = minio
secret_access_key = minioadmin
endpoint = http://minio.minio
查看数据
查看minio-old(旧minio)中的数据
查看 bucket
# 使用 rclone 的 lsd 命令可以查看 bucket
# minio-old 中有 `aaa`、`test`两个 bucket
rclone --config=rclone.conf lsd minio-old:
-1 2025-12-04 18:29:51 -1 aaa
-1 2025-12-03 14:10:44 -1 test
查看文件大小,使用 rclone 的size命令可以查看 bucket 中文件大小,也可以查看 bucket 中某个目录、文件的大小
rclone size minio-old:test
Total objects: 5
Total size: 3.165 MiB (3318365 Byte)
## 查看 test bucket 中指定目录的大小
rclone size minio-old:test/ea100
Total objects: 3
Total size: 2.387 MiB (2502533 Byte)
查看bucket中的文件,使用 rclone 的ls命令可以查看文件
#
rclone ls minio-old:
5764 aaa/aime2025-I.jsonl
6148 aaa/tmp/.DS_Store
28 aaa/tmp/ip
5661 aaa/tmp/lab
417 aaa/tmp/longhorn-2.yaml
406 aaa/tmp/longhorn-backup-target-minio.yaml
417 aaa/tmp/longhorn-sc-3.yaml
417 aaa/tmp/longhorn-sc.yaml
220 aaa/tmp/minio-np.yaml
484 aaa/tmp/pvc-clone-pod-mount.yaml
261 aaa/tmp/pvc-clone.yaml
1931 aaa/tmp/pvc-multi.yaml
690 aaa/tmp/pvc-test-3.yaml
628 aaa/tmp/pvc-test-v2.yaml
690 aaa/tmp/pvc-test.yaml
184 aaa/tmp/snapshot-pv.yaml
1068 test/ea100/LICENSE
2499303 test/ea100/MIBs.rar
2162 test/ea100/README.md
811604 test/kube-prometheus-stack-75.13.0.tgz
4228 test/oxidized.tar.gz
查看文件中的内容,可以使用 rclone 的cat命令查看文件的内容
rclone cat minio-old:aaa/tmp/longhorn-sc.yaml
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-1
parameters:
dataEngine: v1
dataLocality: disabled
disableRevisionCounter: "true"
fromBackup: ""
fsType: ext4
migratable: "true"
numberOfReplicas: "1"
staleReplicaTimeout: "30"
unmapMarkSnapChainRemoved: ignored
provisioner: driver.longhorn.io
reclaimPolicy: Retain
volumeBindingMode: Immediate
其他命令:
rclone md5sum:查看文件 md5
创建 bucket
minio-new中是空的,没有任何 bucket,可以通过 rclone 的mkdir命令创建 bucket 或目录
rclone mkdir minio-new:test
# 查看 bucket
rclone lsd minio-new:
-1 2025-12-04 18:47:51 -1 test
同步数据
通过rclone sync同步数据
可以在同步之前通过--dry-run试运行一下,这样并不会实际的同步数据
rclone sync --dry-run --progress -v minio-old:test minio-new:test
迁移指定 bucket 中的数据
# 迁移指定 bucket 中的数据
rclone sync --progress -v minio-old:test minio-new:test
2025/12/04 22:20:54 INFO : ea100/LICENSE: Copied (new)
2025/12/04 22:20:54 INFO : oxidized.tar.gz: Copied (new)
2025/12/04 22:20:54 INFO : kube-prometheus-stack-75.13.0.tgz: Copied (new)
2025/12/04 22:20:54 INFO : ea100/MIBs.rar: Copied (new)
2025/12/04 22:20:54 INFO : ea100/README.md: Copied (new)
Transferred: 3.165 MiB / 3.165 MiB, 100%, 0 B/s, ETA -
Checks: 0 / 0, -, Listed 6
Transferred: 5 / 5, 100%
Elapsed time: 0.1s
2025/12/04 22:20:54 INFO :
Transferred: 3.165 MiB / 3.165 MiB, 100%, 0 B/s, ETA -
Checks: 0 / 0, -, Listed 6
Transferred: 5 / 5, 100%
Elapsed time: 0.1s
同步所有 bucket 中的数据,会自动在minio-new中创建不存在的 bucket
rclone sync --progress -v minio-old: minio-new:
2025/12/04 22:25:48 INFO : S3 root: Bucket "aaa" created with ACL ""
2025/12/04 22:25:48 INFO : aaa/tmp/.DS_Store: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/lab: Copied (new)
2025/12/04 22:25:48 INFO : aaa/aime2025-I.jsonl: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/ip: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/longhorn-2.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/longhorn-sc-3.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/longhorn-sc.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/longhorn-backup-target-minio.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/minio-np.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/pvc-clone-pod-mount.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/pvc-clone.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/pvc-multi.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/pvc-test.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/pvc-test-v2.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/pvc-test-3.yaml: Copied (new)
2025/12/04 22:25:48 INFO : aaa/tmp/snapshot-pv.yaml: Copied (new)
Transferred: 23.775 KiB / 23.775 KiB, 100%, 0 B/s, ETA -
Checks: 5 / 5, 100%, Listed 33
Transferred: 16 / 16, 100%
Elapsed time: 0.3s
2025/12/04 22:25:48 INFO :
Transferred: 23.775 KiB / 23.775 KiB, 100%, 0 B/s, ETA -
Checks: 5 / 5, 100%, Listed 33
Transferred: 16 / 16, 100%
Elapsed time: 0.3s
同步完之后检查数据minio-old与minio-new中的数据是否存在差异
rclone check --progress -v minio-old: minio-new:
2025/12/04 22:30:47 INFO : Using md5 for hash comparisons
2025/12/04 22:30:47 NOTICE: S3 root: 0 differences found
2025/12/04 22:30:47 NOTICE: S3 root: 21 matching files
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Checks: 21 / 21, 100%, Listed 51
Elapsed time: 0.0s
2025/12/04 22:30:47 INFO :
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Checks: 21 / 21, 100%, Listed 51
Elapsed time: 0.0s