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

教程:使用 Azure PowerShell 管理磁盘

Azure 虚拟机 (VM) 使用磁盘来存储操作系统 (OS)、应用程序和数据。 创建 VM 时,请务必选择适用于所需工作负载的磁盘大小和配置。

本教程介绍 VM 磁盘的部署和管理。 在本教程中,你将了解如何执行以下操作:

  • 创建、附加和初始化数据磁盘
  • 验证磁盘状态
  • 初始化磁盘
  • 扩展和升级磁盘
  • 拆离和删除磁盘

必备条件

你的 Azure 帐户必须具有有效订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 Screenshot that shows an example of Try It for Azure Cloud Shell.
转到 https://shell.azure.com 或选择启动 Cloud Shell 按钮可在浏览器中打开 Cloud Shell。 Button to launch Azure Cloud Shell.
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

创建 VM

本教程中的练习需要用到 VM。 请遵循本部分中的步骤进行创建。

在开始之前,找到位于示例代码第一行中的 $azRegion 变量,并更新该值以反应所需的区域。 例如,使用 $azRegion = "Central US" 指定“美国中部”区域。 接着,使用代码将 VM 部署到新的资源组中。 系统提示输入 VM 本地管理员帐户的用户名和密码值。

$azRegion = "[Your Region]"
$azResourceGroup = "myDemoResourceGroup"
$azVMName = "myDemoVM"
$azDataDiskName = "myDemoDataDisk"

New-AzVm `
    -Location $azRegion `
    -ResourceGroupName $azResourceGroup `
    -Name $azVMName `
    -Size "Standard_D2s_v3" `
    -VirtualNetworkName "myDemoVnet" `
    -SubnetName "myDemoSubnet" `
    -SecurityGroupName "myDemoNetworkSecurityGroup" `
    -PublicIpAddressName "myDemoPublicIpAddress"

输出确认 VM 已成功创建。

ResourceGroupName        : myDemoResourceGroup
Id                       : /subscriptions/{GUID}/resourceGroups/myDemoResourceGroup/providers/Microsoft.Compute/virtualMachines/myDemoTestVM
VmId                     : [{GUID}]
Name                     : myDemoVM
Type                     : Microsoft.Compute/virtualMachines
Location                 : centralus
Tags                     : {}
HardwareProfile          : {VmSize}
NetworkProfile           : {NetworkInterfaces}
OSProfile                : {ComputerName, AdminUsername, WindowsConfiguration, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState        : Succeeded
StorageProfile           : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : mydemovm-abc123.Central US.cloudapp.azure.com

VM 已预配,并将自动创建及附加两个磁盘。

  • 操作系统磁盘承载虚拟机的操作系统。
  • 临时磁盘,主要用于临时数据处理等操作。

添加数据磁盘

建议尽可能将应用程序和用户数据与 OS 相关数据分开。 如果需要在 VM 上存储用户或应用程序数据,通常将创建并附加其他数据磁盘。

按照本部分的步骤,在 VM 上创建、附加和初始化数据磁盘。

创建数据磁盘

本部分将指导你创建数据磁盘。

  1. 在创建数据磁盘之前,必须先创建磁盘对象。 下面的代码示例使用 New-AzDiskConfig cmdlet 配置磁盘对象。

    $diskConfig = New-AzDiskConfig `
        -Location $azRegion `
        -CreateOption Empty `
        -DiskSizeGB 128 `
        -SkuName "Standard_LRS"
    
  2. 创建磁盘对象后,使用 New-AzDisk cmdlet 预配数据磁盘。

    $dataDisk = New-AzDisk `
        -ResourceGroupName $azResourceGroup `
        -DiskName $azDataDiskName `
        -Disk $diskConfig
    

    可以使用 Get-AzDisk cmdlet 验证是否已创建磁盘。

    Get-AzDisk `
        -ResourceGroupName $azResourceGroup `
        -DiskName $azDataDiskName
    

    此示例中,输出确认磁盘已创建。 DiskStateManagedBy 属性值确认磁盘尚未附加。

    ResourceGroupName            : myDemoResourceGroup
    ManagedBy                    :
    ManagedByExtended            : {}
    OsType                       :
    DiskSizeGB                   : 128
    DiskSizeBytes                : 137438953472
    ProvisioningState            : Succeeded
    DiskIOPSReadWrite            : 500
    DiskMBpsReadWrite            : 60
    DiskState                    : Unattached
    Name                         : myDemoDataDisk
    

附加数据磁盘

必须先将数据磁盘附加到 VM,然后 VM 才能访问。 完成本部分中的步骤,为 VM 创建引用、连接磁盘并更新 VM 的配置。

  1. 获取要附加数据磁盘的 VM。 以下示例代码使用 Get-AzVM cmdlet 创建对 VM 的引用。

    $vm = Get-AzVM `
        -ResourceGroupName $azResourceGroup `
        -Name $azVMName
    
  2. 接着,使用 Add-AzVMDataDisk cmdlet 将数据磁盘附加到 VM 配置。

    $vm = Add-AzVMDataDisk `
        -VM $vm `
        -Name $azDataDiskName `
        -CreateOption Attach `
        -ManagedDiskId $dataDisk.Id `
        -Lun 1
    
  3. 最后,使用 Update-AzVM cmdlet 更新 VM 配置。

    Update-AzVM `
        -ResourceGroupName $azResourceGroup `
        -VM $vm
    

    短暂暂停后,输出将确认附加成功。

    RequestId IsSuccessStatusCode StatusCode ReasonPhrase
    --------- ------------------- ---------- ------------
                             True         OK OK
    

初始化数据磁盘

将数据磁盘附加到 VM 后,需要将 OS 配置为使用该磁盘。 以下部分提供有关如何连接到远程 VM 并对所添加的第一个磁盘进行配置的指导。

  1. 登录 Azure 门户

  2. 找到已附加数据磁盘的 VM。 创建远程桌面协议 (RDP) 连接,然后以本地管理员身份登录。

  3. 建立与远程 VM 的 RDP 连接后,选择 Windows“开始”菜单。 在搜索框中输入 PowerShell,然后选择 Windows PowerShell 打开 PowerShell 窗口 。

    Image of a remote desktop connection window.

  4. 在打开的 PowerShell 窗口中,运行以下脚本。

    Get-Disk | Where PartitionStyle -eq 'raw' |
        Initialize-Disk -PartitionStyle MBR -PassThru |
        New-Partition -AssignDriveLetter -UseMaximumSize |
        Format-Volume -FileSystem NTFS -NewFileSystemLabel "myDemoDataDisk" -Confirm:$false
    

    输出确认初始化成功。

    DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining   Size
    ----------- --------------- ---------- --------- ------------ ----------------- -------------   ----
    F           myDemoDataDisk  NTFS       Fixed     Healthy      OK                    127.89 GB 128 GB
    

扩展磁盘

当 VM 的可用磁盘空间不足时,可以扩展 Azure 磁盘以提供额外的存储容量。

在某些情况下,需要将数据存储在 OS 磁盘上。 例如,可能需要支持将组件安装在 OS 驱动器上的旧应用程序。 可能还需要迁移具有较大 OS 驱动器的本地物理 PC 或 VM。 在这种情况下,可能有必要扩展 VM 的 OS 磁盘。

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

更新磁盘大小

按照以下步骤重设 OS 磁盘或数据磁盘的大小。

  1. 使用 Get-AzVM cmdlet 选择包含将重设其大小的磁盘的 VM。

     $vm = Get-AzVM `
       -ResourceGroupName $azResourceGroup `
       -Name $azVMName
    
  2. 在重设 VM 磁盘大小之前,必须先停止 VM。 使用 Stop-AzVM cmdlet 停止 VM。 系统会提示进行确认。

    重要

    启动 VM 关闭之前,请始终确认没有可能会丢失的重要资源或数据。

    Stop-AzVM `
        -ResourceGroupName $azResourceGroup `
        -Name $azVMName
    

    短暂暂停后,输出将确认计算机已成功停止。

    OperationId : abcd1234-ab12-cd34-123456abcdef
    Status      : Succeeded
    StartTime   : 9/13/2021 7:10:23 PM
    EndTime     : 9/13/2021 7:11:12 PM
    Error       :
    
  3. 停止 VM 后,使用 Get-AzDisk cmdlet 获取对附加到 VM 的 OS 或数据磁盘的引用。

    以下示例选择 VM 的 OS 磁盘。

    $disk= Get-AzDisk `
        -ResourceGroupName $azResourceGroup `
        -DiskName $vm.StorageProfile.OsDisk.Name
    

    以下示例选择 VM 的第一个数据磁盘。

        $disk= Get-AzDisk `
            -ResourceGroupName $azResourceGroup `
            -DiskName $vm.StorageProfile.DataDisks[0].Name
    
  4. 获得对磁盘的引用后,将磁盘大小设置为 250 GiB。

    重要

    新大小应该大于现有磁盘大小。 OS 磁盘允许的最大值为 4,095 GB。

    $disk.DiskSizeGB = 250
    
  5. 接下来,使用 Update-AzDisk cmdlet 更新磁盘映像。

    Update-AzDisk `
        -ResourceGroupName $azResourceGroup `
        -Disk $disk -DiskName $disk.Name
    

    磁盘映像已更新,输出确认磁盘更新后的大小。

    ResourceGroupName            : myDemoResourceGroup
    ManagedBy                    : /subscriptions/{GUID}/resourceGroups/myDemoResourceGroup/providers/Microsoft.Compute/virtualMachines/myDemoVM
    Sku                          : Microsoft.Azure.Management.Compute.Models.DiskSku
    TimeCreated                  : 9/135/2021 6:41:10 PM
    CreationData                 : Microsoft.Azure.Management.Compute.Models.CreationData
    DiskSizeGB                   : 250
    DiskSizeBytes                : 268435456000
    UniqueId                     : {GUID}
    ProvisioningState            : Succeeded
    DiskIOPSReadWrite            : 500
    DiskMBpsReadWrite            : 60
    DiskState                    : Reserved
    Encryption                   : Microsoft.Azure.Management.Compute.Models.Encryption
    Id                           : /subscriptions/{GUID}/resourceGroups/myDemoResourceGroup/providers/Microsoft.Compute/disks/myDemoDataDisk
    Name                         : myDemoDataDisk
    Type                         : Microsoft.Compute/disks
    Location                     : centralus
    
    
  6. 最后,使用 Start-AzVM cmdlet 重启 VM。

    Start-AzVM `
        -ResourceGroupName $azResourceGroup `
        -Name $azVMName
    

    短暂暂停后,输出将确认计算机已成功启动。

    OperationId : abcd1234-ab12-cd34-123456abcdef
    Status      : Succeeded
    StartTime   : 9/13/2021 7:44:54 PM
    EndTime     : 9/13/2021 7:45:15 PM
    Error       :
    

扩展 OS 中的磁盘卷

在利用新的磁盘大小之前,需先扩展 OS 中的卷。 按照以下步骤扩展磁盘卷,并充分利用新的磁盘大小。

  1. 登录 Azure 门户

  2. 找到已附加数据磁盘的 VM。 创建远程桌面协议 (RDP) 连接并登录。 如果不再有管理帐户的访问权限,则使用 Get-Credential cmdlet 为指定的用户名和密码创建凭据对象。

  3. 与远程 VM 建立 RDP 连接后,选择 Windows“开始”菜单。 在搜索框中输入 PowerShell,然后选择 Windows PowerShell 打开 PowerShell 窗口 。

    Image of a remote desktop connection window.

  4. 打开 PowerShell 并运行以下脚本。 根据情况更改 -DriveLetter 变量的值。 例如,若要重设“F:”驱动器上的分区大小,请使用 $driveLetter = "F"

    $driveLetter = "[Drive Letter]" 
    $size = (Get-PartitionSupportedSize -DriveLetter $driveLetter) 
    Resize-Partition `
        -DriveLetter $driveLetter `
        -Size $size.SizeMax
    
  5. 最小化 RDP 窗口并切换回 Azure Cloud Shell。 使用 Get-AzDisk cmdlet 验证磁盘大小是否重设成功。

    Get-AzDisk `
        -ResourceGroupName $azResourceGroup | Out-Host -Paging
    

升级磁盘

有多种方法可以响应组织工作负载的变化。 例如,可以选择将标准 HDD 升级到高级 SSD 来处理增加的需求。

按照本部分的步骤,将托管磁盘从标准升级到高级。

  1. 使用 Get-AzVM cmdlet 选择包含将升级的磁盘的 VM。

     $vm = Get-AzVM `
       -ResourceGroupName $azResourceGroup `
       -Name $azVMName
    
  2. 在升级 VM 的磁盘之前,必须先停止 VM。 使用 Stop-AzVM cmdlet 停止 VM。 系统会提示进行确认。

    重要

    启动 VM 关闭之前,请始终确认没有可能会丢失的重要资源或数据。

    Stop-AzVM `
        -ResourceGroupName $azResourceGroup `
        -Name $azVMName
    

    短暂暂停后,输出将确认计算机已成功停止。

    OperationId : abcd1234-ab12-cd34-123456abcdef
    Status      : Succeeded
    StartTime   : 9/13/2021 7:10:23 PM
    EndTime     : 9/13/2021 7:11:12 PM
    Error       :
    
  3. 停止 VM 后,使用 Get-AzDisk cmdlet 获取对附加到 VM 的 OS 或数据磁盘的引用。

    以下示例选择 VM 的 OS 磁盘。

    $disk= Get-AzDisk `
        -ResourceGroupName $azResourceGroup `
        -DiskName $vm.StorageProfile.OsDisk.Name
    

    以下示例选择 VM 的第一个数据磁盘。

        $disk= Get-AzDisk `
            -ResourceGroupName $azResourceGroup `
            -DiskName $vm.StorageProfile.DataDisks[0].Name
    
  4. 现在,你已拥有对磁盘的引用,请将磁盘的 SKU 设置为 Premium_LRS。

    $disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Premium_LRS')
    
  5. 接下来,使用 Update-AzDisk cmdlet 升级磁盘映像。

    Update-AzDisk `
        -ResourceGroupName $azResourceGroup `
        -Disk $disk -DiskName $disk.Name
    

    磁盘映像已更新。 使用以下示例代码验证磁盘的 SKU 是否已升级。

    $disk.Sku.Name
    

    输出将确认磁盘的新 SKU。

    Premium_LRS
    
  6. 最后,使用 Start-AzVM cmdlet 重启 VM。

    Start-AzVM `
        -ResourceGroupName $azResourceGroup `
        -Name $azVMName
    

    短暂暂停后,输出将确认计算机已成功启动。

    OperationId : abcd1234-ab12-cd34-123456abcdef
    Status      : Succeeded
    StartTime   : 9/13/2021 7:44:54 PM
    EndTime     : 9/13/2021 7:45:15 PM
    Error       :
    

分离数据磁盘

如果要将数据磁盘附加到其他 VM,或者不再需要它,可以将数据磁盘从 VM 中拆离。 默认情况下,不会删除已拆离的磁盘,以防意外丢失数据。 拆离的磁盘将继续产生存储费用,直到被删除。

  1. 首先,使用 Get-AzVM cmdlet 选择要将磁盘附加到的 VM。

    $vm = Get-AzVM `
       -ResourceGroupName $azResourceGroup `
       -Name $azVMName
    
  2. 接下来,使用 Remove-AzVMDataDisk cmdlet 将磁盘从 VM 拆离。

    Remove-AzVMDataDisk `
        -VM $vm `
        -Name $azDataDiskName
    
  3. 使用 Update-AzVM cmdlet 对 VM 的状态进行更新,以删除数据磁盘。

    Update-AzVM `
        -ResourceGroupName $azResourceGroup `
        -VM $vm
    

    短暂暂停后,输出确认 VM 已成功更新。

    RequestId IsSuccessStatusCode StatusCode ReasonPhrase
    --------- ------------------- ---------- ------------
                             True         OK OK
    

删除数据磁盘

删除 VM 时,附加到 VM 的数据磁盘将保持预配状态,并在删除之前持续产生费用。 此默认行为有助于防止因无意中删除而导致的数据丢失。

可以使用以下示例 PowerShell 脚本来删除未附加的磁盘。 磁盘检索仅限于 myDemoResourceGroup,因为在 Get-AzDisk cmdlet 中使用了 -ResourceGroupName 开关。

# Get all disks in resource group $azResourceGroup
$allDisks = Get-AzDisk -ResourceGroupName $azResourceGroup

# Determine the number of disks in the collection
if($allDisks.Count -ne 0) {

    Write-Host "Found $($allDisks.Count) disks."

    # Iterate through the collection
    foreach ($disk in $allDisks) {

        # Use the disk's "ManagedBy" property to determine if it is unattached
        if($disk.ManagedBy -eq $null) {

            # Confirm that the disk can be deleted
            Write-Host "Deleting unattached disk $($disk.Name)."
            $confirm = Read-Host "Continue? (Y/N)"
            if ($confirm.ToUpper() -ne 'Y') { break }
            else {

                # Delete the disk
                $disk | Remove-AzDisk -Force 
                Write-Host "Unattached disk $($disk.Name) deleted."
            }
        }
    }
}

将删除未附加的数据磁盘,如输出所示。

Name      : abcd1234-ab12-cd34-ef56-abcdef123456
StartTime : 9/13/2021 10:14:05 AM
EndTime   : 9/13/2021 10:14:35 AM
Status    : Succeeded
Error     :

清理资源

请删除不再需要的资源组、VM 及所有相关资源。 你可以使用以下示例 PowerShell 脚本删除在本教程前面创建的资源组。

注意

删除资源组时要格外小心。 在删除资源组之前,请始终确认该资源组中没有任何重要的资源或数据,以避免丢失重要数据。

    Remove-AzResourceGroup -Name $azResourceGroup

系统会提示进行确认。 短暂停顿后,True 响应确认 myDemoResourceGroup 已成功删除。

Confirm
Are you sure you want to remove resource group 'myDemoResourceGroup'
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y
True

后续步骤

在本教程中,你了解了如何执行以下操作:

  • 创建、附加和初始化数据磁盘
  • 验证磁盘状态
  • 初始化磁盘
  • 扩展和升级磁盘
  • 拆离和删除磁盘

转到下一教程,了解如何自动配置 VM。