Azure 虚拟机 (VM) 使用磁盘来存储操作系统 (OS)、应用程序和数据。 创建 VM 时,请务必选择适用于所需工作负载的磁盘大小和配置。
本教程介绍 VM 磁盘的部署和管理。 在本教程中,你将了解如何执行以下操作:
- 创建、附加和初始化数据磁盘
- 验证磁盘状态
- 扩展和升级磁盘
- 拆离和删除磁盘
必备条件
你的 Azure 帐户必须具有有效订阅。 如果没有 Azure 订阅,请在开始前创建一个试用版订阅。
创建 VM
本教程中的练习需要用到 VM。 请遵循本部分中的步骤进行创建。
在开始之前,找到位于示例代码第一行中的 $azRegion 变量,并更新该值以反应所需的区域。 例如,若要指定 中国北部 2 区域,请使用 $azRegion = "China North 2"。 接着,使用代码将 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 : chinanorth2
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : mydemovm-abc123.chinanorth2.cloudapp.chinacloudapi.cn
VM 已预配,并将自动创建及附加两个磁盘。
- 操作系统磁盘承载虚拟机的操作系统。
- 临时磁盘,主要用于临时数据处理等操作。
添加数据磁盘
建议尽可能将应用程序和用户数据与 OS 相关数据分开。 如果需要在 VM 上存储用户或应用程序数据,通常将创建并附加其他数据磁盘。
此过程需要一个现有的 VM,并使用在 $azDataDiskName 中定义的 $azRegion、、$azVMName 和 $azResourceGroup 变量。
按照本部分的步骤,在 VM 上创建、附加和初始化数据磁盘。
创建数据磁盘
在本节中,你将使用在 $azDataDiskName 中定义的 $azRegion、$azResourceGroup 和 变量来创建托管数据磁盘。
在创建数据磁盘之前,必须先创建磁盘对象。 下面的代码示例使用 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 的配置。
本部分使用 $azResourceGroup、$azVMName 和 变量,以及在 $azDataDiskName 中由 $dataDisk 引用的未附加托管磁盘。
获取要附加数据磁盘的 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 并对所添加的第一个磁盘进行配置的指导。
本节要求具有对名为 的 VM 的本地管理员访问权限,以及对来自 $azVMName 的已附加但尚未初始化的数据磁盘的访问权限。
登录 Azure 门户。
找到你已挂载数据磁盘的虚拟机。 创建远程桌面协议 (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 磁盘或数据磁盘。
该过程需要一个已附加托管操作系统磁盘或数据磁盘的现有 VM,并使用在 $azVMName 中定义的 $azResourceGroup 和 变量。
在某些情况下,需要将数据存储在 OS 磁盘上。 例如,可能需要支持在 OS 驱动器上安装组件的旧应用程序。 可能还需要迁移具有较大 OS 驱动器的本地物理电脑或 VM。 在这些情况下,可能需要扩展 VM 的 OS 磁盘。
更新磁盘大小
按照以下步骤重设 OS 磁盘或数据磁盘的大小。
使用
Get-AzVMcmdlet 选择包含将重设其大小的磁盘的 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-AzDiskcmdlet 获取对附加到 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 : chinanorth2最后,使用 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 中的磁盘卷
在利用新的磁盘大小之前,需先在操作系统中对卷进行扩容。 按照以下步骤扩展磁盘卷,并充分利用新的磁盘大小。
登录 Azure 门户。
找到具有扩展的 OS 磁盘或数据磁盘的 VM。 创建远程桌面协议 (RDP) 连接并登录。 如果不再有权访问管理帐户,请使用 Get-Credential cmdlet 为指定的用户名和密码创建凭据对象。
与远程 VM 建立 RDP 连接后,选择 Windows“开始”菜单。 在搜索框中输入 PowerShell,然后选择 Windows PowerShell 打开 PowerShell 窗口 。
打开 PowerShell 并运行以下脚本。 根据情况更改
-DriveLetter变量的值。 例如,若要调整“F:”驱动器上的分区大小,请使用 。$driveLetter = "[Drive Letter]" $size = (Get-PartitionSupportedSize -DriveLetter $driveLetter) Resize-Partition ` -DriveLetter $driveLetter ` -Size $size.SizeMax在远程虚拟机上的 PowerShell 窗口中,使用 Get-Volume cmdlet 命令确认该卷已成功扩展。
Get-Volume -DriveLetter $driveLetter确认
Size的值反映扩容后的卷大小。
升级磁盘
有多种方法可以响应组织工作负载的变化。 例如,可以选择将标准 HDD 升级到高级 SSD 以处理增加的需求。
此过程需要具有附加的标准 HDD 或标准 SSD 的现有 VM。 它使用你在$azVMName中定义的 $azResourceGroup 和 变量。
按照本部分的步骤,将托管磁盘从标准升级到高级。
使用
Get-AzVMcmdlet 选择包含将升级的磁盘的 VM。$vm = Get-AzVM ` -ResourceGroupName $azResourceGroup ` -Name $azVMName在对 VM 的磁盘进行升级之前,必须先停止 VM。 使用
Stop-AzVMcmdlet 停止 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-AzDiskcmdlet 获取对附加到 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-AzDiskcmdlet 更新托管磁盘。Update-AzDisk ` -ResourceGroupName $azResourceGroup ` -Disk $disk -DiskName $disk.Name托管磁盘已更新。 使用以下示例代码验证磁盘的 SKU 是否已升级。
$disk.Sku.Name输出将确认磁盘的新 SKU。
Premium_LRS最后,使用
Start-AzVMcmdlet 重启 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 中拆离。 默认情况下,不会删除已拆离的磁盘,以防意外丢失数据。 拆离的磁盘将继续产生存储费用,直到被删除。
此过程需要一个已附加数据磁盘的现有 VM,并使用在 $azDataDiskName 中定义的 $azResourceGroup、$azVMName 和 变量。
首先,使用
Get-AzVMcmdlet 选择要将磁盘附加到的 VM。$vm = Get-AzVM ` -ResourceGroupName $azResourceGroup ` -Name $azVMName接下来,使用 Remove-AzVMDataDisk cmdlet 从 VM 分离磁盘。
Remove-AzVMDataDisk ` -VM $vm ` -Name $azDataDiskName使用
Update-AzVMcmdlet 对 VM 的状态进行更新,以删除数据磁盘。Update-AzVM ` -ResourceGroupName $azResourceGroup ` -VM $vm短暂暂停后,输出确认 VM 已成功更新。
RequestId IsSuccessStatusCode StatusCode ReasonPhrase --------- ------------------- ---------- ------------ True OK OK
删除数据磁盘
删除 VM 时,附加到 VM 的数据磁盘将保持预配状态,并在删除之前持续产生费用。 此默认行为有助于防止因无意中删除而导致的数据丢失。
此过程需要未附加的数据磁盘,并使用$azResourceGroup在“创建 VM”中定义的变量$azDataDiskName。
以下 PowerShell 脚本使用 Get-AzDisk cmdlet 检索命名 $azDataDiskName的数据磁盘。 该脚本会在使用 Remove-AzDisk cmdlet 命令删除磁盘之前,先确认该磁盘未附加。
$dataDisk = Get-AzDisk `
-ResourceGroupName $azResourceGroup `
-DiskName $azDataDiskName `
-ErrorAction Stop
if ($null -ne $dataDisk.ManagedBy) {
throw "Disk $($dataDisk.Name) is still attached. Detach it before deletion."
}
$confirm = Read-Host "Delete unattached disk $($dataDisk.Name)? (Y/N)"
if ($confirm.ToUpperInvariant() -eq 'Y') {
Remove-AzDisk `
-ResourceGroupName $azResourceGroup `
-DiskName $dataDisk.Name `
-Force
Write-Host "Unattached disk $($dataDisk.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 和所有相关资源。 使用 Remove-AzResourceGroup cmdlet 删除在本教程前面创建的资源组。
注意
删除资源组时要格外小心。 在删除资源组之前,请始终确认该资源组中没有任何重要的资源或数据,以避免丢失重要数据。
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。