您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

快照 Blob

Snapshot Blob 操作创建 Blob 的只读快照。

请求

可以按如下方式构建Snapshot Blob请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称:

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

模拟的存储服务 URI

在针对模拟的存储服务发出请求时,请将模拟器主机名和 BLOB 服务端口指定为 127.0.0.1:10000,后跟模拟的帐户名称:

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

有关详细信息,请参阅Using the Azure 存储 Emulator for Development and Testing

URI 参数

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

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

请求标头

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

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权请求Azure 存储。
Datex-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权请求Azure 存储。
x-ms-version 对于所有授权请求是必需的。 指定用于此请求的操作的版本。 有关详细信息,请参阅Azure 存储 服务 的版本控制
x-ms-meta-name:value 可选。 指定与 Blob 关联的用户定义的名称-值对。 如果未指定名称-值对,则此操作将基本 Blob 元数据复制到快照中。 如果指定了多个名称-值对,则使用指定的元数据创建快照,而不从基本 Blob 中复制元数据。

请注意,从版本 2009-09-19 开始,元数据名称必须遵循 C# 标识符 的 命名规则。 有关详细信息 ,请参阅命名和引用容器、Blob 和元数据。
If-Modified-Since 可选。 一个 DateTime 值。 指定此条件标头,以便仅在指定的日期/时间后修改了 Blob 时才创建 Blob 快照。 如果未修改基本 Blob,BLOB 服务将返回状态代码 412(前提条件失败)。
If-Unmodified-Since 可选。 一个 DateTime 值。 指定此条件标头,以便仅在指定的日期/时间后未修改 Blob 时才创建 Blob 快照。 如果修改了基本 Blob,BLOB 服务将返回状态代码 412(前提条件失败)。
If-Match 可选。 ETag 值。 指定此条件标头的 ETag 值,以便仅在 Blob 的 ETag 值与指定的值匹配时才创建 Blob 快照。 如果值不匹配,BLOB 服务将返回状态代码 412(前提条件失败)。
If-None-Match 可选。 ETag 值。

指定此条件标头的 ETag 值,以便仅在 Blob 的 ETag 值与指定的值不匹配时才创建 Blob 快照。 如果值相同,BLOB 服务将返回状态代码 412(不满足前提条件)。
x-ms-encryption-scope 可选。 指示用于加密请求内容的加密范围。 2019-02-02 或更高版本支持此标头。
x-ms-lease-id:<ID> 可选。 如果指定了此标头,只有在符合下面的两个条件时,才会执行此操作:

- Blob 的租约当前处于活动状态。
- 请求中指定的租约 ID 与 Blob 的租用 ID 匹配。

如果指定了此标头并且不符合这两个条件,请求将失败,并且Snapshot Blob 操作失败并返回状态代码 412(前提条件失败)。
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其字符限制为 1 KiB,启用存储分析日志记录时,该值记录在分析日志中。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅关于存储 Analytics 日志记录Azure 日志记录:使用日志跟踪存储请求

此操作还支持仅当满足指定条件时才使用条件头执行操作。 有关详细信息,请参阅为 Blob 服务操作指定条件标头

请求标头 (客户提供的加密密钥)

从版本 2019-02-02 开始,可以在请求中指定以下标头,以使用客户提供的密钥加密 Blob。 使用客户提供的密钥和 (标头集进行加密) 可选。 如果 Blob 以前已使用客户提供的密钥进行加密,则必须在请求中包含这些标头,以成功完成读取操作。

请求标头 说明
x-ms-encryption-key 必需。 Base64 编码的 AES-256 加密密钥。
x-ms-encryption-key-sha256 必需。 加密密钥的 Base64 编码 SHA256 哈希。
x-ms-encryption-algorithm: AES256 必需。 指定用于加密的算法。 此标头的值必须为 AES256

请求正文

无。

响应

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

状态代码

此操作成功后返回状态代码 201(已创建)。

有关状态代码的信息,请参阅 状态和错误代码

响应标头

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

语法 说明
x-ms-snapshot: <DateTime> 此标头返回唯一地标识此快照的 DateTime 值。 此标头的值指示快照版本,可以在后续请求中使用该值来访问快照。 请注意,该值是不透明的。
ETag 快照的 ETag。 如果请求版本为 2011-08-18 和更高版本,ETag 值将用引号引起来。 请注意,无法写入到快照中,因此,给定快照的 ETag 永远不会改变。 不过,如果在Snaphot Blob 请求中提供了新的元数据,则快照的 ETag 与基本 Blob 的 ETag 不同。 如果在请求中未指定任何元数据,则快照的 ETag 与创建快照时的基本 Blob 的 ETag 相同。
Last-Modified 快照的上次修改时间。 日期格式遵循 RFC 1123。 有关详细信息,请参阅 标头中Date-Time值的表示形式

请注意,无法写入到快照中,因此,给定快照的上次修改时间永远不会改变。 不过,如果在Snaphot Blob 请求中提供了新的元数据,则快照的上次修改时间与基本 Blob 的上次修改时间不同。 如果在请求中未指定任何元数据,则快照的上次修改时间与创建快照时的基本 Blob 的上次修改时间相同。
x-ms-request-id 此标头唯一地标识发出的请求,并且可用于解决请求问题。 有关详细信息,请参阅 API 操作疑难解答
x-ms-version 指示用于执行请求的 BLOB 服务的版本。 针对 2009-09-19 和更高版本发出的请求将返回此标头。
Date 服务生成的 UTC 日期/时间值指示启动响应的时间。
x-ms-request-server-encrypted: true/false 版本 2019-02-02 或更高版本。 如果请求的内容使用指定的算法成功加密,则此标头的值设置为 ; true 否则设置为 false
x-ms-encryption-key-sha256 版本 2019-02-02 或更高版本。 如果请求使用客户提供的密钥进行加密,则返回此标头,以便客户端可以确保使用提供的密钥成功加密请求的内容。
x-ms-encryption-scope 版本 2019-02-02 或更高版本。 如果请求使用了加密范围,则返回此标头,因此客户端可以确保使用加密范围成功加密请求的内容。
x-ms-version-id: <DateTime> 版本 2019-12-12 及更高版本。 此标头返回唯一标识 blob 的不透明 DateTime 值。 此标头的值指示 Blob 的版本,可以在后续请求中用于访问 Blob。
x-ms-client-request-id 此标头可用于对请求和相应响应进行故障排除。 如果标头存在于请求中,并且该值最多为 1024 个可见 ASCII 字符,则此标头的值等于标头 x-ms-client-request-id 的值。 如果 x-ms-client-request-id 请求中不存在标头,则响应中将不存在此标头。

响应正文

无。

授权

只有帐户所有者可以调用此操作。

备注

快照提供了只读版本的 Blob。 在创建快照后,可以读取、复制或删除该快照,但无法对其进行修改。

快照提供了一种简便的方法以备份 Blob 数据。 可以使用快照通过调用复制 Blob 来覆盖基本 Blob 及其快照,从而将 Blob 还原到早期版本。

在创建快照时,BLOB 服务将返回一个 DateTime 值,以便相对于基本 Blob 唯一地标识快照。 你可使用此值来对快照执行其他操作。 请注意,应将该 DateTime 值视为不透明。

该 DateTime 值在 URI 上标识快照。 例如,基本 Blob 及其快照具有类似下面的 URI:

  • 基本 blob:http://myaccount.blob.core.windows.net/mycontainer/myblob

  • 快照:http://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>

请注意,每次调用Snapshot Blob 操作时,将使用唯一的 DateTime 值创建新快照。 Blob 可以支持任意数量的快照。 不会覆盖现有快照,但必须通过调用"删除 Blob", 将标头设置为适当的值来 x-ms-include-snapshots 显式删除。

读取、复制和删除快照

成功的Snapshot Blob 调用将在 x-ms-snapshot 响应标头中返回一个 DateTime 值。 然后,你可使用该 DateTime 值在特定快照版本上执行读取、删除或复制操作。 可以通过在 Blob 名称后面指定 ?snapshot=<DateTime>,调用对快照有效的任何 BLOB 服务操作。

复制 Blob 属性和元数据

在创建 Blob 快照时,以下系统属性将复制到快照中并具有相同的值:

  • Content-Type

  • Content-Encoding

  • Content-Language

  • Content-Length

  • Cache-Control

  • Content-MD5

  • x-ms-blob-sequence-number (for page blobs only)

  • x-ms-blob-committed-block-count (for append blobs only)

  • x-ms-copy-id(2012-02-12 和更高版本)

  • x-ms-copy-status(2012-02-12 和更高版本)

  • x-ms-copy-source(2012-02-12 和更高版本)

  • x-ms-copy-progress(2012-02-12 和更高版本)

  • x-ms-copy-completion-time(2012-02-12 和更高版本)

  • x-ms-copy-status-description(2012-02-12 和更高版本)

如果基本 Blob 是块 Blob,还会将 Blob 的已提交块列表复制到快照中。 不会复制任何未提交的块。

快照 Blob 的大小始终与创建快照时的基本 Blob 相同,因此,快照 Blob 的 Content-Length 标头值与基本 Blob 相同。

可以通过在请求中指定 x-ms-meta-name:value 标头,为快照指定一个或多个新的元数据值。 如果未指定此标头,则将与基本 Blob 关联的元数据复制到快照中。

与基本 Blob 关联的任何标记都复制到快照。 无法为快照设置新的标记值。

指定条件标头

可以在请求中指定条件标头,以便仅在符合条件时才创建 Blob 快照。 如果不符合指定的条件,则不会创建快照,并且 BLOB 服务返回状态代码 412(前提条件失败)以及有关不符合的条件的其他错误信息。

创建租用的 Blob 的快照

如果基本 Blob 具有活动租约,只要请求符合以下条件之一,你就可以创建 Blob 快照:

  • 指定了条件 x-ms-lease-id 标头,并且在请求中包含基本 Blob 的活动租约 ID。 此条件指定仅在租约处于活动状态并且指定的租约 ID 与 Blob 的关联租约 ID 匹配时才创建快照。

  • 根本未指定 x-ms-lease-id 标头,此时将忽略排他写入租约。

请注意,不会将与基本 Blob 关联的租约复制到快照中。 不能租用快照。

复制快照

使用复制 Blob 操作复制基本 Blob 时,不会将基本 Blob 的任何快照复制到目标 Blob。 使用副本覆盖目标 Blob 时,与该目标 Blob 关联的所有快照都根据其名称保持不变。

你可以复制快照 Blob 以覆盖基本 Blob,从而恢复以前版本的 Blob。 将会保留快照,但使用可读写的副本覆盖基本 Blob。

备注

提升快照不会产生额外的存储资源费用,因为块或页在快照和基本 Blob 之间共享。
从 REST 版本 2019-12-12 开始,允许在快照上设置 Blob 层。 如果在根 Blob 上设置了层,则所有快照都将从基本 Blob 继承层。 在存档 Blob 上创建快照将失败。 在对象上显式设置层将导致对对象的完整大小计费。 创建具有层集的 Blob 的快照将导致根 Blob 和快照的完全复制计费。 有关块 Blob 级别分层的详细信息,请参阅 热、冷和存档存储层

高级存储帐户中的快照

就快照来说,Azure 高级存储帐户和标准存储帐户有几项区别:

  • 高级存储帐户中每个页 Blob 的快照数限制为 100。 如果超出该限制,则 Snapshot Blob 操作将返回 SnapshotCountExceeded (错误代码 409) 。

  • 每十分钟可抓取一次高级存储帐户中页 blob 的快照。 如果超出该频率,则Snapshot Blob 操作将返回错误代码 409 (SnaphotOperationRateExceeded)。

  • 不支持通过 Get Blob 读取高级版 存储帐户中的页 Blob快照。 针对高级存储帐户中的快照调用 Get Blob 将返回错误代码 400(无效操作)。 但是,支持 针对快照调用 "获取 Blob 属性"和"获取 Blob 元数据"。

    若要读取快照,可以使用复制 Blob 操作将快照复制到帐户中的另一个页 Blob。 复制操作的目标 Blob 不能包含任何现有快照。 如果目标 blob 有快照,则 Copy Blob 会返回错误代码 409 (SnapshotsPresent)。

有关在 Azure 资源上调用 REST 操作高级版 存储,请参阅将Blob 服务操作与 Azure 高级版 存储。

启用了版本控制功能的快照

启用版本控制后,创建 Blob 的快照也会生成新版本并保存基础 Blob 的以前版本。 参数返回 Blob 新版本的不透明 x-ms-version-id DateTime 值。

另请参阅

创建 Blob 的快照
授权请求Azure 存储
状态和错误代码
Blob 服务错误代码