你当前正在访问 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。 | |
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 | |
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 |
若要使用 Azure Cloud Shell,请执行以下操作:
启动 Cloud Shell。
选择代码块(或命令块)上的“复制”按钮以复制代码或命令。
在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。
选择“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 上创建、附加和初始化数据磁盘。
创建数据磁盘
本部分将指导你创建数据磁盘。
在创建数据磁盘之前,必须先创建磁盘对象。 下面的代码示例使用 New-AzDiskConfig cmdlet 配置磁盘对象。
$diskConfig = New-AzDiskConfig ` -Location $azRegion ` -CreateOption Empty ` -DiskSizeGB 128 ` -SkuName "Standard_LRS"
创建磁盘对象后,使用 New-AzDisk cmdlet 预配数据磁盘。
$dataDisk = New-AzDisk ` -ResourceGroupName $azResourceGroup ` -DiskName $azDataDiskName ` -Disk $diskConfig
可以使用 Get-AzDisk cmdlet 验证是否已创建磁盘。
Get-AzDisk ` -ResourceGroupName $azResourceGroup ` -DiskName $azDataDiskName
此示例中,输出确认磁盘已创建。
DiskState
和ManagedBy
属性值确认磁盘尚未附加。ResourceGroupName : myDemoResourceGroup ManagedBy : ManagedByExtended : {} OsType : DiskSizeGB : 128 DiskSizeBytes : 137438953472 ProvisioningState : Succeeded DiskIOPSReadWrite : 500 DiskMBpsReadWrite : 60 DiskState : Unattached Name : myDemoDataDisk
附加数据磁盘
必须先将数据磁盘附加到 VM,然后 VM 才能访问。 完成本部分中的步骤,为 VM 创建引用、连接磁盘并更新 VM 的配置。
获取要附加数据磁盘的 VM。 以下示例代码使用 Get-AzVM cmdlet 创建对 VM 的引用。
$vm = Get-AzVM ` -ResourceGroupName $azResourceGroup ` -Name $azVMName
接着,使用 Add-AzVMDataDisk cmdlet 将数据磁盘附加到 VM 配置。
$vm = Add-AzVMDataDisk ` -VM $vm ` -Name $azDataDiskName ` -CreateOption Attach ` -ManagedDiskId $dataDisk.Id ` -Lun 1
最后,使用 Update-AzVM cmdlet 更新 VM 配置。
Update-AzVM ` -ResourceGroupName $azResourceGroup ` -VM $vm
短暂暂停后,输出将确认附加成功。
RequestId IsSuccessStatusCode StatusCode ReasonPhrase --------- ------------------- ---------- ------------ True OK OK
初始化数据磁盘
将数据磁盘附加到 VM 后,需要将 OS 配置为使用该磁盘。 以下部分提供有关如何连接到远程 VM 并对所添加的第一个磁盘进行配置的指导。
登录 Azure 门户。
找到已附加数据磁盘的 VM。 创建远程桌面协议 (RDP) 连接,然后以本地管理员身份登录。
建立与远程 VM 的 RDP 连接后,选择 Windows“开始”菜单。 在搜索框中输入 PowerShell,然后选择 Windows PowerShell 打开 PowerShell 窗口 。
在打开的 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 磁盘或数据磁盘的大小。
使用
Get-AzVM
cmdlet 选择包含将重设其大小的磁盘的 VM。$vm = Get-AzVM ` -ResourceGroupName $azResourceGroup ` -Name $azVMName
在重设 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 :
停止 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
获得对磁盘的引用后,将磁盘大小设置为 250 GiB。
重要
新大小应该大于现有磁盘大小。 OS 磁盘允许的最大值为 4,095 GB。
$disk.DiskSizeGB = 250
接下来,使用
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
最后,使用
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 中的卷。 按照以下步骤扩展磁盘卷,并充分利用新的磁盘大小。
登录 Azure 门户。
找到已附加数据磁盘的 VM。 创建远程桌面协议 (RDP) 连接并登录。 如果不再有管理帐户的访问权限,则使用 Get-Credential cmdlet 为指定的用户名和密码创建凭据对象。
与远程 VM 建立 RDP 连接后,选择 Windows“开始”菜单。 在搜索框中输入 PowerShell,然后选择 Windows PowerShell 打开 PowerShell 窗口 。
打开 PowerShell 并运行以下脚本。 根据情况更改
-DriveLetter
变量的值。 例如,若要重设“F:”驱动器上的分区大小,请使用$driveLetter = "F"
。$driveLetter = "[Drive Letter]" $size = (Get-PartitionSupportedSize -DriveLetter $driveLetter) Resize-Partition ` -DriveLetter $driveLetter ` -Size $size.SizeMax
最小化 RDP 窗口并切换回 Azure Cloud Shell。 使用
Get-AzDisk
cmdlet 验证磁盘大小是否重设成功。Get-AzDisk ` -ResourceGroupName $azResourceGroup | Out-Host -Paging
升级磁盘
有多种方法可以响应组织工作负载的变化。 例如,可以选择将标准 HDD 升级到高级 SSD 来处理增加的需求。
按照本部分的步骤,将托管磁盘从标准升级到高级。
使用
Get-AzVM
cmdlet 选择包含将升级的磁盘的 VM。$vm = Get-AzVM ` -ResourceGroupName $azResourceGroup ` -Name $azVMName
在升级 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 :
停止 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
现在,你已拥有对磁盘的引用,请将磁盘的 SKU 设置为 Premium_LRS。
$disk.Sku = [Microsoft.Azure.Management.Compute.Models.DiskSku]::new('Premium_LRS')
接下来,使用
Update-AzDisk
cmdlet 升级磁盘映像。Update-AzDisk ` -ResourceGroupName $azResourceGroup ` -Disk $disk -DiskName $disk.Name
磁盘映像已更新。 使用以下示例代码验证磁盘的 SKU 是否已升级。
$disk.Sku.Name
输出将确认磁盘的新 SKU。
Premium_LRS
最后,使用
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 中拆离。 默认情况下,不会删除已拆离的磁盘,以防意外丢失数据。 拆离的磁盘将继续产生存储费用,直到被删除。
首先,使用
Get-AzVM
cmdlet 选择要将磁盘附加到的 VM。$vm = Get-AzVM ` -ResourceGroupName $azResourceGroup ` -Name $azVMName
接下来,使用
Remove-AzVMDataDisk
cmdlet 将磁盘从 VM 拆离。Remove-AzVMDataDisk ` -VM $vm ` -Name $azDataDiskName
使用
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。