你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

增量复制 Blob

操作Incremental Copy Blob将源页 blob 的快照复制到目标页 Blob。 仅将先前复制的快照的差异传输到目标。 复制的快照是原始快照的完整副本,你可以像往常一样读取或复制它们。 自 REST 版本 2016-05-31 起支持此 API。

请求

可以按如下所示构造 Incremental Copy Blob 请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称,将 mycontainer 替换为容器的名称,将 myblob 替换为目标 Blob 的名称。 comp值为 的incrementalcopy查询参数指示此请求创建增量快照。

PUT 方法请求 URI HTTP 版本
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=incrementalcopy HTTP/1.1

模拟存储服务 URI

针对模拟存储服务发出请求时,请将仿真器主机名和Azure Blob 存储服务端口指定为 127.0.0.1:10000,后跟模拟的存储帐户名称。 此外,通过将查询参数incrementalcopy设置为 comp 来指示此请求用于增量复制。

PUT 方法请求 URI HTTP 版本
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=incrementalcopy HTTP/1.1

有关详细信息,请参阅 使用 Azurite 模拟器进行本地 Azure 存储开发

URI 参数

可以在请求 URI 上指定以下附加参数。

参数 说明
timeout 可选。 timeout 参数以秒表示。 有关详细信息,请参阅 设置 Blob 存储操作的超时

请求标头

下表介绍必需的和可选的请求标头。

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求
Datex-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求
x-ms-version 对于所有已授权的请求是必需的,对于匿名请求是可选的。 指定用于此请求的操作的版本。 有关详细信息,请参阅 Azure 存储服务的版本控制
If-Modified-Since 可选。 一个 DateTime 值。 如果指定此条件头,则仅当目标 Blob 自指定日期/时间后发生了修改时才复制 Blob。 如果目标 Blob 尚未修改,Blob 存储将返回状态代码 412 (前置条件失败) 。
If-Unmodified-Since 可选。 一个 DateTime 值。 指定此条件标头以仅当目标 Blob 自指定日期/时间以来未修改时复制 Blob。 如果已修改目标 Blob,Blob 存储将返回状态代码 412 (前置条件失败) 。
If-Match 可选。 一个 ETag 值。 ETag仅当指定的ETag值与现有目标 Blob 的值匹配ETag时,才指定此条件标头的值以复制 Blob。 ETag如果目标 blob 的 与为 If-Match指定的 不匹配ETag,Blob 存储将返回状态代码 412 (前置条件失败) 。
If-None-Match 可选。 值 ETag 或通配符 (*) 。

ETag仅当指定的ETag值与目标 Blob 的值不匹配ETag时,才指定此条件标头的值以复制 Blob。

仅当目标 blob 不存在时,才指定通配符 * () 执行操作。

如果不满足指定的条件,Blob 存储将返回状态代码 412 (前置条件失败) 。
x-ms-copy-source:name 必需。 指定源页 blob 快照的名称。

此值是一个 URL,长度最多为 2 kb (KiB) ,用于指定页 blob 快照。 此值应为 URL 编码,如同它显示在请求 URI 中那样。 可以通过以下两种方式之一授权源 Blob URI:

源 Blob URI 可以引用页 blob 快照,但它必须包含共享访问签名 (SAS) 令牌,该令牌是在快照的基本 Blob 上创建的。 SAS 的已签名资源 (sr) 字段应设置为 b。 例如:https://<account-name>.blob.core.windows.net/<container-name>/<page-blob-name>?snapshot=2022-07-23T00:14:45.3964054Z&sp=r&st=2022-07-23T00:15:38Z&se=2022-07-23T08:15:38Z&spr=https&sv=2021-06-08&sr=b&sig=<signature>

源 blob URI 可以引用公共页 blob 快照,例如 https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其字符限制为 1-KiB,在配置日志记录时记录在日志中。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅监视Azure Blob 存储

请求正文

无。

响应

响应包括 HTTP 状态代码和一组响应标头。

状态代码

成功的操作将返回状态代码 202(已接受)。 有关状态代码的信息,请参阅 状态和错误代码

响应头

此操作的响应包括以下标头。 响应还可以包含其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范

语法 说明
ETag 包含可用于有条件地执行操作的值。 该值以引号表示。
Last-Modified 上次修改 blob 的日期和时间。 有关详细信息,请参阅 标头中的日期/时间值的表示形式

blob 上的任何写入操作 (包括对 blob 元数据或属性的更新) 更改 Blob 的上次修改时间。
x-ms-request-id 唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作故障排除
x-ms-version 指示用于运行请求的 Blob 存储版本。
Date 指示启动响应的时间的 UTC 日期/时间值。 服务生成此值。
x-ms-copy-id: <id> 此复制操作的字符串标识符。 使用 与 Get Blob Properties 检查此复制操作的状态,或将 传递给 Abort Copy Blob 以停止挂起的副本。
x-ms-copy-status: pending 复制操作的状态。 这始终处于挂起状态,表示复制已开始且正在进行中。
x-ms-client-request-id 可用于对请求和相应的响应进行故障排除。 如果请求中存在,则此标头的值等于 标头的值 x-ms-client-request-id 。 该值最多为 1,024 个可见 ASCII 字符。 x-ms-client-request-id如果请求中不存在标头,则响应中不会显示该标头。

响应正文

无。

示例响应

下面是请求执行增量复制的示例响应:

Response Status:
HTTP/1.1 202 Accepted

Response Headers: 
Last-Modified: <date> 
ETag: "0x8CEB669D794AFE2"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402
x-ms-version: 2016-05-31
x-ms-copy-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-copy-status: pending
Date: <date> 

授权

在 Azure 存储中调用任何数据访问操作时,都需要授权。 以下部分介绍如何授权操作的目标对象Incremental Copy Blob。 对源 Blob 或文件的访问是单独授权的,如请求标头的详细信息 x-ms-copy-source 中所述。

Azure 存储支持使用 Microsoft Entra ID 来授权对 Blob 数据的请求。 使用 Microsoft Entra ID,可以使用 Azure 基于角色的访问控制 (Azure RBAC) 向安全主体授予权限。 安全主体可以是用户、组、应用程序服务主体或 Azure 托管标识。 安全主体由 Microsoft Entra ID 进行身份验证,以返回 OAuth 2.0 令牌。 然后可以使用令牌来授权对 Blob 服务发出请求。

若要详细了解如何使用 Microsoft Entra ID 授权,请参阅使用 Microsoft Entra ID 授权访问 blob

权限

下面列出了Microsoft Entra用户、组或服务主体调用Incremental Copy Blob操作所需的 RBAC 操作,以及包含此操作的最小特权内置 Azure RBAC 角色:

若要详细了解如何使用 Azure RBAC 分配角色,请参阅 分配 Azure 角色以访问 Blob 数据

注解

增量复制的目标必须不存在,或者必须已使用来自同一源 Blob 的上一个增量副本创建。 创建目标 Blob 后,目标 Blob 将永久与源关联,并且只能用于增量复制。 Get Blob PropertiesList Blobs API 指示 Blob 是否是以这种方式创建的增量复制 Blob。

无法直接下载增量复制 Blob。 唯一受支持的操作是 Get Blob PropertiesIncremental Copy BlobDelete Blob。 可以像往常一样读取和删除复制的快照。

对服务异步执行增量复制,必须轮询完成。 有关如何轮询挂起副本的详细信息, Copy Blob 请参阅 API。 复制完成后,目标 blob 将包含新的快照。 API Get Blob Properties 返回新建快照的快照时间。

首次对目标 Blob 执行增量复制时,会创建一个新 blob,其中包含从源中完全复制的快照。 对 的每个后续调用Incremental Copy Blob都通过仅复制以前复制的快照的差异更改来创建新的快照。

通过在源 blob 快照发出Get Page Ranges调用,在服务器上计算差异更改。 设置为prevsnapshot最近复制的快照。 因此,对 Get Page Ranges 的相同限制适用于 Incremental Copy Blob。 具体而言,必须按升序复制快照,如果使用 或 Copy Blob重新创建Put Blob源 Blob,则Incremental Copy Blob新快照将失败。

复制快照占用的额外存储空间是复制期间传输的差异数据的大小。 可以通过对快照执行差异 Get Page Ranges API 调用来确定此大小,以将其与以前的快照进行比较。

另请参阅

授权对 Azure 存储的请求
状态和错误代码
为 Blob 存储操作设置超时