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

转换 Azure 托管磁盘的磁盘类型

适用于:✔️ Linux VM ✔️ Windows

Azure 托管磁盘有五种磁盘类型:Azure 超级磁盘、高级 SSD v2、高级 SSD、标准 SSD 和标准 HDD。 可以根据性能需求轻松在高级 SSD、标准 SSD 和标准 HDD 之间进行切换。 高级 SSD 和标准 SSD 也可用于区域冗余存储。 在大多数情况下,你目前无法从超级磁盘或高级 SSD v2 切换,必须部署具有现有磁盘快照的新磁盘。 但是,你可以从现有磁盘切换到高级 SSD v2。 有关详细信息,请参阅转换高级 SSD v2 磁盘

非托管磁盘不支持此功能。 但是,可以轻松通过 CLIPowerShell 将非托管磁盘转换为托管磁盘,然后即可切换磁盘类型。

在开始之前

由于转换需要重启虚拟机 (VM),因此请在预先存在的维护时段内计划磁盘迁移。

限制

  • 每天只能更改两次磁盘类型。
  • 只能更改托管磁盘的磁盘类型。 如果是非托管磁盘,请通过 CLIPowerShell 将其转换为托管磁盘,以在磁盘类型之间进行切换。

更改单个托管磁盘的类型

对于开发/测试工作负荷,可以混合使用标准磁盘和高级磁盘来降低成本。 可以选择仅升级需要更高性能的磁盘。 此示例展示了如何将单个 VM 磁盘从标准存储转换为高级存储。 不过,通过在此示例中更改 $storageType 变量,可以将 VM 的磁盘类型转换为标准 SSD 或标准 HDD。 若要使用高级托管磁盘,VM 必须使用支持高级存储的 VM 大小。 还可以使用这些示例将磁盘从本地冗余存储 (LRS) 磁盘更改为区域冗余存储 (ZRS) 磁盘,反之亦然。 此示例还展示了如何切换到支持高级存储的大小:

注意

你可以像针对其他磁盘类型一样,将现有磁盘的类型更改为高级 SSD v2 磁盘。 若要了解此功能,请参阅高级 SSD v2 迁移(预览版)


$diskName = 'yourDiskName'
# resource group that contains the managed disk
$rgName = 'yourResourceGroupName'
# Choose between Standard_LRS, StandardSSD_LRS, StandardSSD_ZRS, Premium_ZRS, and Premium_LRS based on your scenario
$storageType = 'Premium_LRS'
# Premium capable size 
$size = 'Standard_DS2_v2'

$disk = Get-AzDisk -DiskName $diskName -ResourceGroupName $rgName

# Get parent VM resource
$vmResource = Get-AzResource -ResourceId $disk.ManagedBy

# Stop and deallocate the VM before changing the storage type
Stop-AzVM -ResourceGroupName $vmResource.ResourceGroupName -Name $vmResource.Name -Force

$vm = Get-AzVM -ResourceGroupName $vmResource.ResourceGroupName -Name $vmResource.Name 

# Change the VM size to a size that supports Premium storage
# Skip this step if converting storage from Premium to Standard
$vm.HardwareProfile.VmSize = $size
Update-AzVM -VM $vm -ResourceGroupName $rgName

# Update the storage type
$disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new($storageType)
$disk | Update-AzDisk

Start-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name

将 VM 的所有托管磁盘从一个帐户切换到另一个帐户

此示例展示了如何将 VM 的所有磁盘转换为高级存储。 不过,通过在此示例中更改 $storageType 变量,可以将 VM 的磁盘类型转换为标准 SSD 或标准 HDD。 若要使用高级托管磁盘,VM 必须使用支持高级存储的 VM 大小。 此示例还切换到了支持高级存储的大小:

# Name of the resource group that contains the VM
$rgName = 'yourResourceGroup'

# Name of the your virtual machine
$vmName = 'yourVM'

# Choose between Standard_LRS, StandardSSD_LRS, StandardSSD_ZRS, Premium_ZRS, Premium_LRS, and PremiumV2_LRS based on your scenario
$storageType = 'Premium_LRS'

# Premium capable size
# Required only if converting storage from Standard to Premium
$size = 'Standard_DS2_v2'

# Stop and deallocate the VM before changing the size
Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force

$vm = Get-AzVM -Name $vmName -resourceGroupName $rgName

# Change the VM size to a size that supports Premium storage
# Skip this step if converting storage from Premium to Standard
$vm.HardwareProfile.VmSize = $size
Update-AzVM -VM $vm -ResourceGroupName $rgName

# Get all disks in the resource group of the VM
$vmDisks = Get-AzDisk -ResourceGroupName $rgName 

# For disks that belong to the selected VM, convert to Premium storage
foreach ($disk in $vmDisks)
{
	if ($disk.ManagedBy -eq $vm.Id)
	{
		$disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new($storageType)
		$disk | Update-AzDisk
	}
}

Start-AzVM -ResourceGroupName $rgName -Name $vmName

转换高级 SSD v2 磁盘

你可以像对其他磁盘类型一样将现有磁盘切换到高级 SSD v2 磁盘。 高级 SSD v2 磁盘存在一些限制,请参阅其文章高级 SSD v2 限制部分以了解详细信息。

切换到高级 SSD v2 磁盘时有一些额外的限制:

  • 无法将 OS 磁盘切换到高级 SSD v2 磁盘。
  • 现有磁盘只能直接切换到 512 扇区大小的高级 SSD v2 磁盘。
  • 每个区域每个订阅只能同时执行 50 次转换。
  • 如果现有磁盘是共享磁盘,请在更改为高级 SSD v2 之前分离所有 VM。
  • 如果现有磁盘正在使用主机缓存,请在更改为高级 SSD v2 之前将其设置为无
  • 如果现有磁盘正在使用突发,请在更改为高级 SSD v2 之前将其禁用
  • 如果现有磁盘使用双重加密,请在更改为高级 SSD v2 之前切换到单个加密选项之一
  • 无法直接从高级 SSD v2 切换到其他磁盘类型。 如果要将高级 SSD v2 更改为其他磁盘类型,请使用快照进行迁移。
  • 不能直接从超级磁盘切换到高级 SSD v2 磁盘,需使用快照进行迁移。
  • 如果在磁盘上配置了 Azure Site Recovery,请在更改为高级 SSD v2 之前将其禁用。
  • 如果使用其余 API,请对计算资源提供程序和磁盘资源提供程序使用 API 版本 2020-12-01 或更高版本。
  • 在完成从以前的磁盘类型到高级 SSD v2 的转换过程之前,磁盘的性能会降低,如果磁盘的客户管理的密钥正在使用中,则无法更改或轮换它们。
    • 可以使用以下命令检查转换过程,将 $diskName$resourceGroupName 替换为你的值:az disk show -n $diskName -g $resourceGroupName --query [completionPercent] -o tsv

注意

如果使用 Azure 备份并将磁盘转换为高级 SSD v2,则会生成新磁盘的完整快照。 此为计费事件,你需要为此快照付费。

禁用主机缓存

如果磁盘正在使用主机缓存,则必须在转换为高级 SSD v2 之前将其禁用。 你将需要想在其上禁用主机缓存的磁盘的 LUN。 以下脚本输出附加到 VM 的磁盘的名称及其 LUN。 可以使用此项标识磁盘的 LUN。 将 yourResourceGroupnameOfYourVM 替换为自己的值,然后再运行脚本。

myRG="yourResourceGroup"
myVM="nameOfYourVM"

az vm show -g $myRG -n $myVM --query "[storageProfile.dataDisks[].name, storageProfile.dataDisks[].lun]"

获取磁盘的 LUN 后,请将 LunHere 替换为 LUN,并运行以下命令来禁用主机缓存:

lun=LunHere

az vm update --resource-group $myRG --name $myVM --disk-caching $lun=None

禁用突发

如果磁盘正在使用突发,则必须在转换为高级 SSD v2 之前将其禁用。 如果在 12 小时内启用了突发,则必须等到第 13 小时或更高版本才能禁用它。

可以使用以下命令禁用磁盘突发:az disk update --name "yourDiskNameHere" --resource-group "yourRGNameHere" --enable-bursting false

禁用双重加密

如果磁盘正在使用双重加密,则必须在转换为高级 SSD v2 之前将其禁用。 可以使用以下命令通过客户管理的密钥将磁盘从双重加密更改为静态加密:

az disk-encryption-set update --name "nameOfYourDiskEncryptionSetHere" --resource-group "yourRGNameHere" --key-url yourKeyURL --source-vault "yourKeyVaultName" --encryption-type EncryptionAtRestWithCustomerKey

使用快照迁移到高级 SSD v2 或超级磁盘

注意

你可以像针对其他磁盘类型一样,将现有磁盘的类型更改为高级 SSD v2 磁盘。 若要了解此功能,请参阅高级 SSD v2 迁移(预览版)

目前,只能通过存储在标准存储上的快照(增量标准 HDD 快照)将现有磁盘迁移到高级 SSD v2 或超级磁盘。 不支持使用存储在高级存储上的快照和其他选项进行迁移。 不支持通过快照从高级 SSD v2 或超级磁盘迁移到高级 SSD v1、标准 SSD 和标准 HDD。

高级 SSD v2 磁盘和超级磁盘都有各自的一组限制。 例如,两者都不能用作 OS 磁盘,并且并非在所有区域中都可用。 有关详细信息,请参阅高级 SSD v2 限制超级磁盘 GA 范围和限制部分。

重要

将标准 HDD、标准 SSD 或高级 SSD 迁移到超级磁盘或高级 SSD v2 时,逻辑扇区大小必须为 512。

以下脚本将标准 HDD、标准 SSD 或高级 SSD 的快照迁移到超级磁盘或高级 SSD v2。

$diskName = "yourDiskNameHere"
$resourceGroupName = "yourResourceGroupNameHere"
$snapshotName = "yourDesiredSnapshotNameHere"

# Valid values are 1, 2, or 3
$zone = "yourZoneNumber"

#Provide the size of the disks in GB. It should be greater than the VHD file size.
$diskSize = '128'

#Provide the storage type. Use PremiumV2_LRS or UltraSSD_LRS.
$storageType = 'PremiumV2_LRS'

#Provide the Azure region (e.g. westus) where Managed Disks will be located.
#This location should be same as the snapshot location
#Get all the Azure location using command below:
#Get-AzLocation

#Select the same location as the current disk
#Note that Premium SSD v2 and Ultra Disks are only supported in a select number of regions
$location = 'eastus'

#When migrating a Standard HDD, Standard SSD, or Premium SSD to either an Ultra Disk or Premium SSD v2, the logical sector size must be 512
$logicalSectorSize=512

# Get the disk that you need to backup by creating an incremental snapshot
$yourDisk = Get-AzDisk -DiskName $diskName -ResourceGroupName $resourceGroupName

# Create an incremental snapshot by setting the SourceUri property with the value of the Id property of the disk
$snapshotConfig=New-AzSnapshotConfig -SourceUri $yourDisk.Id -Location $yourDisk.Location -CreateOption Copy -Incremental 
$snapshot = New-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName -Snapshot $snapshotConfig

$diskConfig = New-AzDiskConfig -SkuName $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id -DiskSizeGB $diskSize -LogicalSectorSize $logicalSectorSize -Zone $zone
 
New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName

后续步骤

使用快照创建 VM 的只读副本。