你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
该 Incremental Copy Blob
作将源页 blob 的快照复制到目标页 blob。 只有与之前复制的快照的差异才会传输到目标。 复制的快照是原始快照的完整副本,您可以像往常一样从中读取或复制。 自 REST 版本 2016-05-31 起,支持此 API。
请求
可以按如下所示构造 Incremental Copy Blob
请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称,将 mycontainer 替换为容器的名称,将 myblob 替换为目标 blob 的名称。
comp
值为 incrementalcopy
的 query 参数表示此请求是创建增量快照。
PUT 方法请求 URI | HTTP 版本 |
---|---|
https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=incrementalcopy |
HTTP/1.1 协议 |
模拟存储服务 URI
当您针对模拟存储服务发出请求时,请将模拟器主机名和 Azure Blob 存储服务端口指定为 127.0.0.1:10000,后跟模拟的存储帐户名称。 此外,通过将 query 参数设置为 comp
incrementalcopy
,指示此请求用于增量复制。
PUT 方法请求 URI | HTTP 版本 |
---|---|
http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=incrementalcopy |
HTTP/1.1 协议 |
有关详细信息,请参阅 使用 Azurite 模拟器进行本地 Azure 存储开发。
URI 参数
可以在请求 URI 上指定以下附加参数。
参数 | DESCRIPTION |
---|---|
timeout |
可选。
timeout 参数以秒为单位表示。 有关详细信息,请参阅 设置 Blob 存储操作的超时。 |
请求标头
下表描述了必需和可选的请求标头。
请求标头 | DESCRIPTION |
---|---|
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 值与ETag 现有目标 blob 的值匹配时复制 blob。 如果目标 blob ETag 的 与ETag 指定的 If-Match 不匹配,则 Blob 存储将返回状态代码 412(不满足前提条件)。 |
If-None-Match |
可选。 值ETag 或通配符 ()。* ETag 仅当指定的ETag 值与ETag 目标 blob 的值不匹配时,才为此条件标头指定一个值以复制 blob。指定通配符 () * 以仅在目标 blob 不存在时执行该作。如果未满足指定的条件,则 Blob 存储将返回状态代码 412 (Precondition Failed)。 |
x-ms-copy-source:name |
必填。 指定源页 Blob 快照的名称。 此值是长度最大为 2 KiB 的 URL,用于指定页 blob 快照。 该值应采用 URL 编码,因为它将显示在请求 URI 中。 可以通过以下两种方式之一对源 blob URI 进行授权: 源 blob URI 可以引用页 blob 快照,但它必须包含在快照的基本 blob 上创建的共享访问签名 (SAS) 令牌。 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 协议规范。
语法 | DESCRIPTION |
---|---|
ETag |
包含可用于有条件地执行作的值。 该值用引号括起来。 |
Last-Modified |
上次修改 blob 的日期和时间。 有关更多信息,请参阅 标头中日期/时间值的表示形式。 对 blob 执行的任何写入作(包括对 blob 元数据或属性的更新)都会更改 blob 的上次修改时间。 |
x-ms-request-id |
唯一标识已发出的请求,并可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作故障排除。 |
x-ms-version |
指示用于运行请求的 Blob 存储版本。 |
Date |
一个 UTC 日期/时间值,指示响应的启动时间。 服务将生成此值。 |
x-ms-copy-id: <id> |
此复制作的字符串标识符。 使用 with Get Blob Properties 检查此复制作的状态,或传递给 Abort Copy Blob 停止待处理的复制。 |
x-ms-copy-status: pending |
复制作的状态。 这始终为 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 后,目标 blob 将与源永久关联,并且只能用于增量复制。 和 Get Blob Properties
List Blobs
API 指示 blob 是否是以这种方式创建的增量复制 blob。
不能直接下载增量复制 blob。 唯一支持的作是 Get Blob Properties
、 Incremental Copy Blob
和 Delete Blob
。 您可以像往常一样读取和删除复制的快照。
您可以在服务上异步执行增量复制,并且必须轮询完成。 有关如何轮询待处理副本的详细信息,请参阅 Copy Blob
API。 复制完成后,目标 blob 将包含新快照。 该 Get Blob Properties
API 返回新创建快照的快照时间。
首次对目标 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 调用来确定此大小,以将其与上一个快照进行比较。