Compartir a través de

为托管磁盘创建增量快照

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集

增量快照是托管磁盘的时间点备份;拍摄快照后,这些备份仅包含自上次快照以来的更改。 第一个增量快照是磁盘的完整副本。 后续增量快照仅占用自上一快照以来磁盘的增量更改。 从增量快照还原磁盘时,系统将重新构造完整的磁盘,这是指在创建增量快照时磁盘的时间点备份。 托管磁盘快照的这种功能可能使它们更具成本效益,因为你不必在创建单个快照时存储整个磁盘,除非你选择这么做。 与完整快照一样,增量快照可用于创建完整的托管磁盘,也可用于制作完整快照。 完整快照和增量快照都可以在拍摄后立即使用。 换句话说,一旦拍摄了快照,你就可以立即读取基础数据并使用它来还原磁盘。

增量快照和完整快照之间存在一些差异。 增量快照始终使用标准 HDD 存储,而不管磁盘的存储类型如何,而完整快照可使用高级 SSD。 若要在高级存储上使用完整快照来纵向扩展 VM 部署,建议在 Azure Compute Gallery 中的标准存储上使用自定义映像。 它将帮助你以更低的成本实现更大的规模。 此外,增量快照可能会凭借区域冗余存储 (ZRS) 提供更高的可靠性。 如果 ZRS 在所选区域中可用,则增量快照将自动使用 ZRS。 如果 ZRS 在该区域不可用,则快照将默认为本地冗余存储 (LRS)。 此行为可以重写,并手动选择一项,但我们不建议这样做。

增量快照仅按已用大小计费。 可以通过查看 Azure 使用情况报告,了解快照的已使用大小。 例如,如果快照的已用数据大小为 10 GiB,则每日使用情况报告将显示 10 GiB/(31 天) = 0.3226 作为已使用数量。

限制

  • 增量快照当前无法在订阅之间转移。
  • 当前,在任何给定时间,只能为某个特定系列的最多 5 个快照生成 SAS URI。
  • 无法在某一特定磁盘的订阅之外为该磁盘创建增量快照。
  • 无法将增量快照移动到另一个资源组。 但可以将其复制到另一个资源组或区域。
  • 每五分钟最多可为每个磁盘创建 7 个增量快照。
  • 总共可以为单个磁盘创建 500 个增量快照。 500的配额限制不是在磁盘的整个生命周期内,而是在任何给定的时间点。 始终可以删除磁盘的旧快照,以便为较新的快照腾出空间。
  • 如果父磁盘的大小调整超过 4 TB 限额,则无法获取分别在磁盘大小调整之前和之后拍摄的快照之间的差异。 例如,你在磁盘大小为 2 TB 时拍摄了一张增量快照 snapshot-a。 现在,你已将磁盘大小增加到 6 TB,然后拍摄了另一张增量快照 snapshot-b。 无法获取 snapshot-asnapshot-b 之间的差异。 必须下载调整大小后创建的 snapshot-b 的完整副本。 随后,可获取 snapshot-bsnapshot-b 之后创建的快照之间的差异。
  • 从快照创建托管磁盘时,会启动后台复制过程。 可以在此过程运行时将磁盘附加到 VM,但此操作会影响性能。 可以使用 CompletionPercnet 属性检查超级磁盘和高级 SSD v2 磁盘的后台副本的状态

创建增量快照

可以使用 Azure CLI 创建增量快照。 你需要最新版本的 Azure CLI。 请参阅以下文章,了解如何安装更新 Azure CLI。

以下脚本将创建特定磁盘的增量快照:

# Declare variables
diskName="yourDiskNameHere"
resourceGroupName="yourResourceGroupNameHere"
snapshotName="desiredSnapshotNameHere"

# Get the disk you need to backup
yourDiskID=$(az disk show -n $diskName -g $resourceGroupName --query "id" --output tsv)

# Create the snapshot
az snapshot create -g $resourceGroupName -n $snapshotName --source $yourDiskID --incremental true

可以使用快照的 SourceResourceId 属性识别同一磁盘中的增量快照。 SourceResourceId 是父磁盘的 Azure 资源管理器资源 ID。

可以使用 SourceResourceId 创建一个与特定磁盘关联的所有快照的列表。 将 yourResourceGroupNameHere 替换为你的值,然后可以使用以下示例列出现有增量快照:

# Declare variables and create snapshot list
subscriptionId="yourSubscriptionId"
resourceGroupName="yourResourceGroupNameHere"
diskName="yourDiskNameHere"

az account set --subscription $subscriptionId

diskId=$(az disk show -n $diskName -g $resourceGroupName --query [id] -o tsv)

az snapshot list --query "[?creationData.sourceResourceId=='$diskId' && incremental]" -g $resourceGroupName --output table

检查快照状态

在后台进程完成将数据复制到快照之前,无法使用超级磁盘的增量快照来创建新磁盘。

你可以使用 CLIPowerShell 部分来检查从磁盘到快照的后台复制的状态。

重要

不能使用以下部分来获取除超级磁盘以外的磁盘类型的后台复制过程的状态。 其他磁盘类型的快照始终报告 100%。

CLI

有两个选项可用于获取快照状态。 可以获取与特定磁盘关联的所有增量快照的列表及其各自的状态,或者可以获取单个快照的状态

CLI - 列出增量快照

以下脚本返回与特定磁盘关联的所有快照的列表。 若要使用任一快照,其 CompletionPercent 属性值必须为 100。 将 yourResourceGroupNameHereyourSubscriptionIdyourDiskNameHere 替换为你自己的值,然后运行脚本:

# Declare variables and create snapshot list
subscriptionId="yourSubscriptionId"
resourceGroupName="yourResourceGroupNameHere"
diskName="yourDiskNameHere"
az account set --subscription $subscriptionId
diskId=$(az disk show -n $diskName -g $resourceGroupName --query [id] -o tsv)
az snapshot list --query "[?creationData.sourceResourceId=='$diskId' && incremental]" -g $resourceGroupName --output table

CLI - 单个快照

还可以通过检查 CompletionPercent 属性来检查单个快照的状态。 将 $sourceSnapshotName 替换为你的快照名称,然后运行以下命令。 属性值必须为 100,才能使用快照还原磁盘或生成 SAS URI 来下载基础数据。

az snapshot show -n $sourceSnapshotName -g $resourceGroupName --query [completionPercent] -o tsv

PowerShell

有两个选项可用于获取快照状态。 可以获取与特定磁盘关联的所有增量快照的列表及其各自的状态,或者可以获取单个快照的状态

PowerShell - 列出增量快照

以下脚本返回与特定磁盘关联的、尚未完成后台复制的所有增量快照的列表。 替换 yourResourceGroupNameHereyourDiskNameHere,然后运行脚本。

$resourceGroupName = "yourResourceGroupNameHere"
$snapshots = Get-AzSnapshot -ResourceGroupName $resourceGroupName
$diskName = "yourDiskNameHere"
$yourDisk = Get-AzDisk -DiskName $diskName -ResourceGroupName $resourceGroupName
$incrementalSnapshots = New-Object System.Collections.ArrayList
foreach ($snapshot in $snapshots)
{
    if($snapshot.Incremental -and $snapshot.CreationData.SourceResourceId -eq $yourDisk.Id -and $snapshot.CreationData.SourceUniqueId -eq $yourDisk.UniqueId)
    {
    $targetSnapshot=Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
        {
        if($targetSnapshot.CompletionPercent -lt 100)
            {
            $incrementalSnapshots.Add($targetSnapshot)
            }
        }
    }
}
$incrementalSnapshots

PowerShell - 单个快照

可以检查单个快照的 CompletionPercent 属性以获取其状态。 替换 yourResourceGroupNameHereyourSnapshotName,然后运行脚本。 属性值必须为 100,才能使用快照还原磁盘或生成 SAS URI 来下载基础数据。

$resourceGroupName = "yourResourceGroupNameHere"
$snapshotName = "yourSnapshotName"
$targetSnapshot=Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
$targetSnapshot.CompletionPercent

检查扇区大小

逻辑扇区大小为 4096 的快照只能用于创建超级磁盘。 它们不可用于创建其他磁盘类型。 逻辑扇区大小为 4096 的磁盘的快照存储为 VHDX,而逻辑扇区大小为 512 的磁盘的快照存储为 VHD。 快照从父磁盘继承逻辑扇区大小。

若要确定你的超级磁盘快照是 VHDX 还是 VHD,请获取该快照的 LogicalSectorSize 属性。

以下命令显示快照的逻辑扇区大小:

az snapshot show -g resourcegroupname -n snapshotname --query [creationData.logicalSectorSize] -o tsv

后续步骤

请参阅以下文章,了解如何使用 Azure CLIAzure PowerShell 模块从快照创建磁盘。

请参阅 将增量快照复制到新区域,了解如何跨区域复制增量快照。

如果对快照有其他疑问,请参阅常见问题解答的快照部分。

要查看演示使用 .NET 的增量快照的差异功能的示例代码,请参阅通过增量快照差异功能将 Azure 托管磁盘备份复制到另一区域