向S3的data里写入文件的正确姿势(mc或rclone)

要将本地文件夹导入 S3,必须通过 S3 API 写入。
如果用cp或rsync直接把文件拷贝到 /mnt/storage/minio_data 里:

  1. MinIO 无法为这些文件生成必要的 xl.meta 元数据文件。
  2. S3 API 和 Web 控制台将完全看不到这些文件。
  3. 强行混入非 MinIO 写入的文件,甚至可能导致存储桶(Bucket)的状态损坏或索引异常。
    原因:现代minio默认采用的是带有纠删码(Erasure Code)特性的格式。

推荐方案 1:使用 MinIO 官方客户端 (mc) —— 速度最快

mc 是 MinIO 官方提供的 CLI 工具,针对多线程并发上传做了极致优化。

1. 下载并安装 mc

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

2. 添加你的本地 MinIO 服务端点:
(替换为你的 Access Key 和 Secret Key)

mc alias set myminio http://127.0.0.1:9000 你的AccessKey 你的SecretKey

3. 创建一个存储桶(Bucket):

mc mb myminio/mydata-bucket

4. 导入整个本地文件夹:
使用 cp --recursive 进行单次上传,或者使用 mirror 进行镜像同步(类似 rsync)。

# 单次递归复制文件夹内容到 S3
mc cp --recursive /本地/文件夹/路径/ myminio/mydata-bucket/

# 或者:将本地目录镜像同步到 S3(支持断点续传和增量同步)
mc mirror /本地/文件夹/路径/ myminio/mydata-bucket/

推荐方案 2:使用 Rclone

你在前面的配置中已经在使用 Rclone,它同样是处理 S3 数据导入的利器。

1. 在 rclone.conf 中添加 MinIO 节点:

[local_minio]
type = s3
provider = Minio
env_auth = false
access_key_id = 你的AccessKey
secret_access_key = 你的SecretKey
endpoint = http://127.0.0.1:9000

2. 执行 Copy 命令导入数据:

rclone copy /本地/文件夹/路径/ local_minio:mydata-bucket -P --transfers=8


这两种方式都会通过标准的协议将文件切片、计算哈希并正确写入数据库的底层架构中。