链接复制成功!
使用OMS实现跨账号同区域桶之间数据复制
使用场景
跨账号同区域复制是指将某个账号某个区域下的源桶中的数据复制到另一账号同区域下的目标桶中。
本节介绍使用对象存储迁移服务(Object Storage Migration Service,OMS)的控制台和API以及OBS的API、SDK、obsutil工具实现跨账号同区域桶之间数据复制。
支持复制的对象范围:包括文件/文件夹、对象列表、指定对象前缀、指定时间修改后的对象。
支持复制的对象内容:对象内容、元数据(对象名称、大小、最后修改时间、创建者、版本号、用户定义的元数据)、ACL(OBS API、obsutil支持)、存储类别、WORM保留策略(OBS API支持)、对象标签(OBS API支持)。
OBS帮助您将存储于华为云对象存储的业务数据复制到同区域另一个桶,但华为云并不感知您的数据的具体内容,也不对您使用本服务的合法合规性负责。
约束与限制
跨账号同区域复制费用说明
前提条件
- 已在某个账号某个区域下创建源桶。
- 已在另一个账号的同区域下创建目标桶。创建桶操作请参见创建桶。
跨账号同区域数据复制
支持使用对象存储迁移服务(Object Storage Migration Service,OMS)控制台和API来进行跨账号同区域数据迁移,支持使用OBS的API、SDK、命令行工具obsutil进行跨账号同区域数据复制。
使用OMS控制台
以下以源端和目的端数据均存放于华为云OBS桶中为例,介绍将账号E下的“华北-北京四”区域的桶bucket-E中的数据通过OMS迁移至账号F下的“华北-北京四”区域的桶bucket-F中。
- 创建源端和目的端的访问密钥(AK/SK)。
- 源端:使用账号E登录控制台,按照获取访问密钥(AK/SK)获取源端的AK/SK。
- 目的端:使用账号F登录控制台,按照获取访问密钥(AK/SK)获取目的端的AK/SK。
- 使用账号F在OMS控制台创建迁移任务。
- 配置源端参数。具体参数配置,请参见表2。
表2 源端选择参数 参数
示例
说明
源端数据源
华为云
待迁移的源端云服务提供商。
源端访问密钥(Access Key)
华为云的有效AK,1获取的源端账号E的AK。
源端云服务提供商的访问密钥(AK)。最大长度是100个字符。
源端私有访问密钥(Secret Access Key)
华为云的有效SK,1获取的源端账号E的SK。
源端云服务提供商的私有访问密钥(SK),与AK相匹配。最大长度是100个字符。
KMS密钥
不开启
选择是否启用KMS密钥来加密您的源端密钥。
是否指定桶名
否
当您不具备列举桶权限,但具有列举桶中对象、获取对象元数据和获取对象权限时可以开启此参数,通过指定源端桶的路径来进行迁移。
设置说明参见表是否指定桶名的设置说明。
桶
桶名:bucket-E,源端桶名
单击“桶”下拉框或者单击“刷新”,选择待迁移数据所在的桶。对象存储迁移服务将检查源端信息填写是否正确。如果填写正确,且您的账号具有列举桶名的权限,则会在下拉框中列举您名下的所有桶。
- 配置目的端参数。具体参数配置,请参见表3。
- 单击页面右下角“下一步”,设置任务参数。
- 设置源端配置参数。更多源端参数配置信息请参考创建迁移任务页面。
表4 源端配置选项说明 参数
示例
说明
选择迁移方式
选择文件/文件夹
根据迁移情况选择迁移方式。
选择文件/文件夹
文件夹:BigData,源端桶bucket-E中的文件夹
选择需要迁移的文件/文件夹。若不添加该参数,则默认迁移全桶的对象。若添加对象名称前缀,则会迁移所有匹配的对象。
- 设置源端配置参数。更多源端参数配置信息请参考创建迁移任务页面。
- 配置源端参数。具体参数配置,请参见表2。
使用OBS命令行工具obsutil
使用obsutil工具进行跨账号同区域复制对象,请勿开启跨区域复制模式,即请勿配置“crr”参数。
- 复制对象或批量复制时,请确保OBS桶中的源对象不发生变化,否则可能产生复制失败或者数据不一致的问题。
- 如果被复制对象的存储类型为cold,必须首先恢复被复制对象,否则无法复制成功。
- 复制时需要有被复制对象的读权限和目标桶的写权限。
- 如果源桶是并行文件系统(POSIX),则目标桶必须是并行文件系统。
约束与限制:
- 复制的源路径和目标路径不能完全相同。
- 批量复制时,源路径和目标路径不能相互嵌套:
- 目标路径以源路径为前缀时,可能会产生递归复制。
- 源路径以目标路径为前缀时,可能会产生覆盖拷贝。
命令结构:
- Windows操作系统
- 复制单个对象
obsutil cp obs://srcbucket/key obs://dstbucket/[dest] [-dryRun] [-u] [-crr] [-vlength] [-vmd5] [-p=1] [-threshold=52428800] [-versionId=xxx] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] - 批量复制对象
obsutil cp obs://srcbucket[/key] obs://dstbucket[/dest] -r [-dryRun] [-f] [-flat] [-u] [-crr] [-vlength] [-vmd5] [-j=1] [-p=1] [-threshold=52428800] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 复制单个对象
- macOS/Linux操作系统
- 复制单个对象
./obsutil cp obs://srcbucket/key obs://dstbucket/[dest] [-dryRun] [-u] [-crr] [-vlength] [-vmd5] [-p=1] [-threshold=52428800] [-versionId=xxx] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量复制对象
./obsutil cp obs://srcbucket[/key] obs://dstbucket[/dest] -r [-dryRun] [-f] [-flat] [-u] [-crr] [-vlength] [-vmd5] [-j=1] [-p=1] [-threshold=52428800] [-acl=xxx] [-sc=xxx] [-meta=aaa:bbb#ccc:ddd] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 复制单个对象
运行示例:
- 以Windows操作系统为例,运行obsutil cp obs://bucket-test/key obs://bucket-test2,复制单个对象。
obsutil cp obs://bucket-test/key obs://bucket-test2 Start at 2024-09-30 08:30:09.0815415 +0000 UTC Parallel: 3 Jobs: 3 Threshold: 50.00MB PartSize: auto CheckpointDir: xxxx [=====================================================] 100.00% 6/s 0s Waiting for the copied key to be completed on server side. Copy successfully, 19B, obs://bucket-test/key --> obs://bucket-test2/key ext.txt, cost [1708], status [200], request id [00000192420D227E4017336A12F1DC22]
- 以Windows操作系统为例,运行obsutil cp obs://bucket-test/temp/ obs://bucket-test2 -f -r,批量复制对象。
obsutil cp obs://bucket-test/temp/ obs://bucket-test2 -r -f Start at 2024-09-30 08:34:02.7819703 +0000 UTC Parallel: 5 Jobs: 5 Threshold: 50.00MB PartSize: auto CheckpointDir: xxxx Task id: 0476929d-9d23-4dc5-b2f8-0a0493f027c5 OutputDir: xxxx [=============================================================] 100.00% 10/s 0s Succeed count: 5 Failed count: 0 Metrics [max cost:298 ms, min cost:192 ms, average cost:238.00 ms, average tps:9.71, transferred size: 7.20MB] Task id: 0476929d-9d23-4dc5-b2f8-0a0493f027c5
- 更多运行示例,请参见常见示例。
参数说明:
| 参数 | 约束 | 描述 |
|---|---|---|
| srcbucket | 必选 | 源桶名。 |
| dstbucket | 必选 | 目标桶名。 |
| dest | 可选 | 复制对象时的目标对象名,或批量复制时目标对象名前缀。 |
| key | 复制对象时必选 批量复制时可选 | 复制对象时的源对象名,或批量复制时源对象名前缀。 规则如下:
说明: 请参考复制示例理解该参数的使用方式。 |
| fr | 附加参数,复制对象时可选 | 复制对象时生成结果清单文件。 |
| flat | 附加参数,批量复制时可选 | 批量复制时,不包含上一级父对象名前缀。 |
| dryRun | 附加参数,可选 | 测试模式运行,不执行实际的复制操作。 |
| crr | 跨账号同区域复制,请勿配置该参数。 | 复制时使用客户端跨区域复制模式,以通过数据流的方式从源桶直接复制数据到目标桶,且两个桶可以是任意两个OBS服务的桶。
说明: 复制时源桶对应的配置信息为配置文件中的“akCrr/skCrr/tokenCrr/endpointCrr”,目标桶对应的配置信息为配置文件中的“ak/sk/token/endpoint”。 |
| vlength | 附加参数,可选 | 复制完成后,验证目标桶对象大小是否与源桶中对象的大小一致。 该参数必须与“crr”参数配合使用。 |
| vmd5 | 附加参数,可选 | 复制完成后,验证目标桶的MD5值是否与源桶中对象的MD5值一致。
|
| u | 附加参数,可选 | 增量复制操作,设置该参数后,复制每个源对象时会对比目标桶中对应路径的目标对象,仅在目标对象不存在,或者目标对象大小与源对象大小不一致,或者目标对象的最后修改时间早于源对象的最后修改时间时进行复制。 |
| p | 附加参数,可选 | 每个分段复制任务的最大并发数,默认为配置文件中的defaultParallels。 |
| threshold | 附加参数,可选 | 开启分段复制任务的阈值。如果待复制的源对象小于该阈值,则使用直接复制模式;否则使用分段复制模式。 默认为配置文件中的defaultBigfileThreshold。 单位:字节 支持带容量单位配置,例如:配置1MB代表1048576字节。 说明: 直接复制模式不会产生断点记录文件,不支持断点续传。 |
| versionId | 附加参数,复制对象时可选 | 复制单个对象时可指定的源对象版本号。 |
| acl | 附加参数,可选 | 复制对象时可指定的目标对象的预定义访问策略。 支持的值:
|
| sc | 附加参数,可选 | 复制对象时可指定的目标对象的存储类型。 支持的值:
|
| meta | 附加参数,可选 | 复制对象时可指定的标准和自定义元数据。
|
| fs | 附加参数,可选 | 是否使用并行文件系统的列举方式,如果桶是并行文件系统,推荐加上该参数。
|
| ps | 附加参数,可选 | 每个分段复制任务的段大小。
|
| cpd | 附加参数,可选 | 生成断点记录文件的文件夹,默认为运行obsutil命令的用户目录的子文件夹.obsutil_checkpoint。 每个分段复制任务会产生唯一对应的断点记录文件并保存至该文件夹的upload子文件夹下。分段任务执行成功后,对应的断点记录文件会被自动删除;分段任务执行失败或被中断后,下次执行该分段任务时会尝试通过对应的断点记录文件恢复任务。 |
| r | 附加参数,批量复制时必选 | 按指定源桶的对象名前缀批量复制对象。 |
| f | 附加参数,批量复制时可选 | 强制操作,不进行询问提示。 |
| j | 附加参数,批量复制时可选 | 批量复制时的最大并发数,默认为配置文件中的defaultJobs。 说明: 工具会保证该值至少为1。 |
| exclude | 附加参数,批量复制时可选 | 不包含源对象的匹配模式,设置该参数后,如果待复制的对象名匹配该参数,则跳过该对象的复制。如:*.txt,代表所有后缀为.txt的文件自动跳过,不复制。
约束限制: 该匹配模式仅适用于对象名非“/”结尾的对象。 说明:
|
| include | 附加参数,批量复制时可选 | 包含源对象的匹配模式,设置该参数后,如果待复制的对象名匹配该参数,则复制该对象。如:*.txt,代表所有后缀为.txt的对象将会被复制。
约束限制:
示例: ./obsutil cp obs://src-bucket/ obs://target-bucket/ -include=/src-object/* -f -r 以上命令的含义是:复制src-bucket桶下符合匹配规则的文件到target-bucket桶下,匹配规则是以“src-object/”开头的对象名称。 说明:
|
| timeRange | 附加参数,批量复制时可选 | 复制对象时的时间段匹配模式,仅复制最后修改时间在该时间段内的对象。 该匹配模式优先级低于文件名匹配模式:exclude和include,即优先执行exclude和include参数匹配,然后执行该匹配模式。
该匹配模式仅适用于对象名非“/”结尾的对象。 |
| mf | 附加参数,可选 | 设置名称匹配模式(include、exclude)和时间匹配模式(timeRange)对对象名以“/”结尾的对象也生效。 |
| o | 附加参数,可选 | 生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果、失败结果、警告结果三个文件)。 默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。
|
| config | 附加参数,可选 | 运行当前命令时的自定义配置文件。 可支持的配置参数请参考配置参数说明。 |
| e | 附加参数,可选 | 指定终端节点。 |
| i | 附加参数,可选 | 指定用户的AK。 |
| k | 附加参数,可选 | 指定用户的SK。 |
| t | 附加参数,可选 | 指定用户的securitytoken。 |
响应结果:
| 字段名 | 描述 |
|---|---|
| Parallel | 请求中的-p参数。 |
| Jobs | 请求中的-j参数。 |
| Threshold | 请求中的-threshold参数。 |
| PartSize | 请求中的-ps参数。 |
| Exclude | 请求中的-exclude参数。 |
| Include | 请求中的-include参数。 |
| TimeRange | 请求中的-timeRange参数。 |
| VerifyLength | 请求中的-vlength参数。 |
| VerifyMd5 | 请求中的-vmd5参数。 |
| CheckpointDir | 请求中的-cpd参数。 |
| OutputDir | 请求中的-o参数。 |
| ArcDir | 请求中的-arcDir参数。 |
| Succeed count | 成功的任务数。 |
| Failed count | 失败的任务数。 |
| Skip count | 增量上传/下载/复制、同步上传/下载/复制跳过的任务数。 说明: 跳过的任务数也会记录到成功的任务数中。 |
| Warning count | 执行完成但包含警告的任务数。 说明:
|
| Succeed bytes | 上传/下载成功的字节数。 |
| max cost | 所有任务中的最长耗时,单位:毫秒。 |
| min cost | 所有任务中的最短耗时,单位:毫秒。 |
| average cost | 平均耗时,单位:毫秒。 |
| average tps | 平均每秒的任务完成个数。 |
| Task id | 每次运行的唯一标识号,用于查找批量任务生成的结果清单文件。 |