Files
s3-migrate/README.md

111 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# S3 数据迁移工具
一个简单高效的 S3 对象存储迁移工具,支持在不同 S3 兼容存储服务之间迁移数据。
## 功能特性
- **智能对比**:通过 ETag 对比文件差异,避免重复传输
- **断点续传**:支持中断后继续迁移,已存在的文件会自动跳过
- **增量同步**:只迁移变化或新增的文件
- **详细日志**:清晰的进度显示和结果统计
## 支持的存储服务
- Amazon S3
- MinIO
- 阿里云 OSS
- 腾讯云 COS
- 火山引擎 TOS
- 其他 S3 兼容的存储服务
## 环境配置
创建 `.env` 文件,配置源存储和目标存储信息:
```bash
# 源存储配置(旧 S3
O_S3_ACCESS_KEY_ID=your_access_key
O_S3_SECRET_ACCESS_KEY=your_secret_key
O_S3_REGION=us-east-1
O_S3_BUCKET_NAME=source-bucket
O_S3_ENDPOINT=http://localhost:9000
# 目标存储配置(新 S3
S3_ACCESS_KEY_ID=your_access_key
S3_SECRET_ACCESS_KEY=your_secret_key
S3_REGION=cn-shanghai
S3_BUCKET_NAME=destination-bucket
S3_ENDPOINT=https://tos-s3-cn-shanghai.volces.com
```
参考 `.env.example` 文件获取完整配置示例。
### 注意事项
**MinIO 用户**:如果使用 MinIO 作为源存储,需要在代码中设置 `forcePathStyle: true`。默认配置已包含此设置,无需修改。
```typescript
const oldS3Client = new S3Client({
// ...
forcePathStyle: true, // MinIO 必需
});
```
## 安装
```bash
# 安装依赖
pnpm install
```
## 使用方法
```bash
# 运行迁移
pnpm migrate
```
## 运行逻辑
对于每个文件,迁移脚本会执行以下操作:
| 状态 | 操作 |
|------|------|
| 目标不存在 | 复制文件(新增) |
| 目标存在ETag 不同 | 更新文件 |
| 目标存在ETag 相同 | 跳过 |
## 输出示例
```
Starting S3 migration...
Source: http://kevisual.cn:9000/resources
Destination: https://tos-s3-cn-shanghai.volces.com/envision
Found 10 objects in source bucket
Copying: images/photo1.jpg
✓ Copied: images/photo1.jpg
- Skip (same ETag): images/photo2.jpg
Updating (ETag changed): documents/report.pdf
Source ETag: abc123def456
Dest ETag: 789xyz012abc
✓ Copied: documents/report.pdf
Migration complete!
Total objects: 10
Copied (new): 2
Updated (ETag changed): 1
Skipped (same): 7
Errors: 0
```
## 技术栈
- **TypeScript** - 类型安全
- **AWS SDK v3** - S3 客户端
- **dotenv** - 环境变量管理
## License
ISC