你当前正在访问 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,后跟模拟存储帐户名称。 此外,通过将查询参数设置为 comp
incrementalcopy
来指示此请求用于增量复制。
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 存储的请求。 |
Date 或 x-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 kiB (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
中所述。
重要
Microsoft 建议将 Microsoft Entra ID 与托管标识配合使用来授权对 Azure 存储的请求。 与共享密钥授权相比,Microsoft Entra ID提供优越的安全性和易用性。
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 操作:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write (,用于写入现有 blob) 或 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action (,用于将新 blob 写入目标)
- 最低特权内置角色:存储 Blob 数据参与者
若要详细了解如何使用 Azure RBAC 分配角色,请参阅 分配 Azure 角色以访问 Blob 数据。
注解
增量复制的目标必须不存在,或者必须已使用来自同一源 Blob 的先前增量副本创建。 创建它后,目标 Blob 将永久与源关联,并且只能用于增量复制。
Get Blob Properties
和 List Blobs
API 指示 Blob 是否是以这种方式创建的增量复制 Blob。
无法直接下载增量复制 Blob。 唯一受支持的操作是 Get Blob Properties
、 Incremental Copy Blob
和 Delete 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 调用来确定此大小,以将其与上一个快照进行比较。