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

如何扩展附加到 Windows 虚拟机的虚拟硬盘

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

在资源组中通过从 Azure 市场部署映像来创建新的虚拟机 (VM) 时,默认的操作系统 (OS) 磁盘通常为 127 GiB(某些映像的 OS 磁盘大小默认更小)。 可以将数据磁盘添加到 VM(可添加的量取决于所选的 VM SKU),建议在数据磁盘上安装应用程序和 CPU 密集型工作负载。 如果你要支持在 OS 磁盘上安装组件的旧版应用程序,或者如果要从本地迁移具有较大 OS 磁盘的物理电脑或 VM,则可能需要扩展 OS 磁盘。 本文介绍如何扩展 OS 磁盘或数据磁盘。

OS 磁盘的最大容量为 4,095 GiB。 但许多操作系统默认使用主启动记录 (MBR) 进行分区。 MBR 将可用大小限制为 2 TiB。 如果需要超过 2 TiB,请创建并附加数据磁盘并将其用于数据存储。 如果需要在 OS 磁盘上存储数据并需要额外空间,请将其转换为 GUID 分区表 (GPT)。 若要了解 MBR 和 GPT 在 Windows 部署中的区别,请参阅 Windows 和 GPT 常见问题解答

重要

除非使用在不停机的情况下扩展,否则扩展数据磁盘需要解除分配 VM。

不支持收缩现有磁盘,这可能会导致数据丢失。

扩展磁盘后,需要扩展操作系统中的卷才能使用更大的磁盘。

无法扩展条带卷的大小。

在不停机的情况下扩展

你可以在不解除分配虚拟机的情况下扩展数据磁盘。 磁盘的主机缓存设置不会更改你是否可以在不解除分配虚拟机的情况下扩展数据磁盘。

此功能具有以下限制:

  • 仅支持数据磁盘。
  • 如果标准 HDD、标准 SSD 或高级 SSD 磁盘小于或等于 4 TiB,则解除分配 VM 并拆离磁盘,然后再将其扩展到 4 TiB 以上。 如果上述某个磁盘类型已经大于 4 TiB,则可以在不解除分配 VM 和拆离磁盘的情况下对其进行扩展。 这不适用于高级 SSD v2 或超级磁盘。
  • 不支持共享磁盘。
  • 安装并使用以下任一项:
  • 在某些经典 VM 上不可用。 使用此脚本可获取支持在不停机的情况下扩展的经典 VM SKU 列表。

使用超级磁盘和高级 SSD v2 进行扩展

扩展超级磁盘和高级 SSD v2 磁盘具有以下额外限制:

  • 如果某个磁盘还在后台复制数据,譬如正从快照冻结磁盘时,则无法对其进行扩展。
  • 如果某个 VM 将 NVMe 控制器用于超级磁盘或高级 SSD v2 磁盘,则无法对其进行不停机扩展。

重要

预计最多 10 分钟后会在 Windows VM 和 Linux VM 中反映正确的大小。 对于 Linux VM,必须执行 Linux 重新扫描函数;对于没有工作负载的 Windows VM,必须执行 Windows 重新扫描函数。 可以立即重新扫描,但如果它在十分钟内,则可能需要再次重新扫描以显示正确的大小。

区域可用性

当前,所有支持高级 SSD v2 和 Ultra 的区域均可调整超级磁盘和高级 SSD v2 磁盘的大小,但以下区域除外:

  • 美国西部 2

重设 Azure 门户中的托管磁盘的大小

重要

如果磁盘满足在不停机的情况下扩展中的要求,则可以跳过第 1 步。

  1. Azure 门户中,转到要在其中扩展磁盘的虚拟机。 选择“停止”以解除分配 VM。

  2. 在左侧菜单中的“设置”下,选择“磁盘” 。

    显示在菜单的“设置”部分中选择了“磁盘”选项的屏幕截图。

  3. 在“磁盘名称”下,选择要扩展的磁盘。

    显示“磁盘”窗格的屏幕截图,其中选择了一个磁盘名称。

  4. 在左侧菜单中的“设置”下,选择“大小 + 性能” 。

    此屏幕截图显示已在菜单的“设置”部分选择了“大小和性能”选项。

  5. 在“大小和性能”中,选择所需的磁盘大小。

    警告

    新大小应该大于现有磁盘大小。 对于 OS 磁盘来说,允许的最大值为 4,095 GB。 (可以扩展 VHD Blob,使之超出该大小,但 OS 只能使用前 4,095 GB 空间。)

    此屏幕截图显示了“大小和性能”窗格,其中已选择磁盘大小。

  6. 在页面底部选择“重设大小”。

    此屏幕截图显示了“大小和性能”窗格,其中已选择“重设大小”按钮。

使用 PowerShell 重设托管磁盘的大小

在管理模式下打开 PowerShell ISE 或 PowerShell 窗口,执行以下步骤:

  1. 在资源管理模式下登录 Microsoft Azure 帐户,并选择订阅:
Connect-AzAccount
Select-AzSubscription –SubscriptionName 'my-subscription-name'
  1. 设置资源组名称和 VM 名称:
$rgName = 'my-resource-group-name'
$vmName = 'my-vm-name'
$diskName = 'my-disk-name'
  1. 获取对 VM 的引用:
$vm = Get-AzVM -ResourceGroupName $rgName -Name $vmName

重要

如果磁盘满足在不停机的情况下扩展中的要求,则可以跳过第 4 步和第 6 步。

  1. 在重设磁盘大小之前停止 VM:
Stop-AzVM -ResourceGroupName $rgName -Name $vmName
  1. 获取对托管 OS 磁盘的引用。 将托管 OS 磁盘的大小设置为所需值,并更新磁盘:
$disk= Get-AzDisk -ResourceGroupName $rgName -DiskName $diskName
$disk.DiskSizeGB = 1023
Update-AzDisk -ResourceGroupName $rgName -Disk $disk -DiskName $disk.Name

警告

新大小应该大于现有磁盘大小。 对于 OS 磁盘来说,允许的最大值为 4,095 GB。 (可以扩展 VHD Blob,使之超出该大小,但 OS 只能使用前 4,095 GB 空间。)

  1. 更新 VM 可能需要几秒钟时间。 命令执行完后,请重启 VM:
Start-AzVM -ResourceGroupName $rgName -Name $vmName

通过远程访问 VM,打开“计算机管理”(或“磁盘管理”),然后使用刚刚分配的空间扩展驱动器 。

在操作系统中扩展卷

扩展 VM 的磁盘后,需要进入 OS 并扩展卷,使之包含新的空间。 以下几种方法可用于扩展分区。 本部分介绍如何使用 RDP 连接来连接 VM 以通过使用 Diskpart使用磁盘管理器扩展分区。

使用 DiskPart

扩展 VM 的磁盘后,需要进入 OS 并扩展卷,使之包含新的空间。 以下几种方法可用于扩展分区。 本部分介绍了如何使用 RDP 连接来连接 VM 以使用 DiskPart 展开分区。

  1. 打开与 VM 的 RDP 连接。

  2. 打开命令提示符并键入 diskpart

  3. 在 DISKPART 提示符处,键入 list volume。 记下要扩展的卷。

  4. 在 DISKPART 提示符处,键入 select volume <volumenumber>。 这将选择将扩展到同一磁盘上的连续可用空间的卷 volumenumber。

  5. 在 DISKPART 提示符处,键入 extend [size=<size>]。 这将按大小(MB)扩展所选的卷。

使用磁盘管理器

  1. 启动与 VM 的远程桌面会话。

  2. 打开“磁盘管理”。

    显示“磁盘管理”的屏幕截图。

  3. 右键单击现有的 C: 驱动器分区 ->“扩展卷”。

    显示如何扩展卷的屏幕截图。

  4. 按照应能查看具有更新容量的磁盘的步骤进行操作:

    显示磁盘管理器中较大的 C: 卷的屏幕截图。

不停机扩展经典 VM SKU 支持

如果使用经典 VM SKU,可能不支持在不停机的情况下扩展磁盘。

使用以下 PowerShell 脚本确定其可用的 VM SKU:

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}

后续步骤

还可以使用 Azure 门户来附加磁盘。