适用于: ✔️ Windows 虚拟机 ✔️ 灵活规模集
本文介绍如何使用 PowerShell 将新的磁盘和现有磁盘附加到Windows虚拟机。
首先,查看以下提示:
- 虚拟机的大小决定了可以附加多少个磁盘。 有关详细信息,请参阅虚拟机的大小。
- 若要使用高级 SSD,需要启用 高级存储的 VM 类型,例如 DS 系列虚拟机。
减少数据磁盘附加延迟
在部分地区,磁盘挂载延迟有所降低,因此性能最高可提升 15%。 如果 VM 之间发生计划内或计划外故障转移、正在扩展工作负荷或运行高比例有状态工作负荷(例如 Azure Kubernetes 服务),则此改进非常有用。 但是,此改进仅限于显式磁盘附加命令 Add-AzVMDataDisk。 如果调用可能隐式执行附加的命令(如 Update-AzVM),则看不到性能改进。 无需执行除调用显式附加命令以外的任何操作即可查看此改进。
将空数据磁盘添加到虚拟机
此示例演示了如何将空数据磁盘添加到现有虚拟机。
创建和附加托管磁盘
设置资源组、VM、位置、存储类型和数据磁盘名称的值。
New-AzDiskConfig cmdlet 为空的 128 GiB 托管磁盘创建配置,New-AzDisk 创建磁盘。 然后, Get-AzVM 获取 VM 配置, Add-AzVMDataDisk 将磁盘添加到其中,并将 Update-AzVM 更新的配置应用到 VM。
$rgName = 'myResourceGroup'
$vmName = 'myVM'
$location = 'China East 2'
$storageType = 'Premium_LRS'
$dataDiskName = $vmName + '_datadisk1'
$diskConfig = New-AzDiskConfig -SkuName $storageType -Location $location -CreateOption Empty -DiskSizeGB 128
$dataDisk1 = New-AzDisk -DiskName $dataDiskName -Disk $diskConfig -ResourceGroupName $rgName
$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1
Update-AzVM -VM $vm -ResourceGroupName $rgName
在可用性区域中创建和附加托管磁盘
设置资源组、VM、位置、存储类型和数据磁盘名称的值。 若要在可用性区域中创建托管磁盘,请使用 New-AzDiskConfig 参数 -Zone 。 以下示例在区域 1 中创建一个空的 128-GiB 托管磁盘,将其添加到 VM 配置,并将更新的配置应用到 VM。
$rgName = 'myResourceGroup'
$vmName = 'myVM'
$location = 'China North 3'
$storageType = 'Premium_LRS'
$dataDiskName = $vmName + '_datadisk1'
$diskConfig = New-AzDiskConfig -SkuName $storageType -Location $location -CreateOption Empty -DiskSizeGB 128 -Zone 1
$dataDisk1 = New-AzDisk -DiskName $dataDiskName -Disk $diskConfig -ResourceGroupName $rgName
$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1
Update-AzVM -VM $vm -ResourceGroupName $rgName
初始化磁盘
添加空磁盘后,需要对其进行初始化。 若要初始化磁盘,请登录到 VM 并使用磁盘管理。 如果在创建 WinRM 时在 VM 上启用 WinRM 和证书,则可以使用远程 PowerShell 初始化磁盘。
还可以使用 Set-AzVMCustomScriptExtension cmdlet 将自定义脚本扩展添加到 VM。 以下示例使用附件过程中的资源组和 VM 名称,以及 VM 位置、扩展名称、初始化脚本文件、存储帐户名称、存储帐户密钥和容器名称的值。 运行命令之前,将脚本存储在指定的Azure 存储容器中:
$location = "location-name"
$scriptName = "script-name"
$fileName = "script-file-name"
Set-AzVMCustomScriptExtension -ResourceGroupName $rgName -Location $location -VMName $vmName -Name $scriptName -TypeHandlerVersion "1.4" -StorageAccountName "mystore1" -StorageAccountKey "primary-key" -FileName $fileName -ContainerName "scripts"
脚本文件可以包含用来初始化磁盘的代码,例如:
注释
示例脚本使用 MBR 分区样式。 如果磁盘大小为 2 TiB 或更大,则必须使用 GPT 分区。 如果它小于 2 TiB,则可以使用 MBR 或 GPT。
$disks = Get-Disk | Where partitionstyle -eq 'raw' | sort number
$letters = 70..89 | ForEach-Object { [char]$_ }
$count = 0
$labels = "data1","data2"
foreach ($disk in $disks) {
$driveLetter = $letters[$count].ToString()
$disk |
Initialize-Disk -PartitionStyle MBR -PassThru |
New-Partition -UseMaximumSize -DriveLetter $driveLetter |
Format-Volume -FileSystem NTFS -NewFileSystemLabel $labels[$count] -Confirm:$false -Force
$count++
}
将现有数据磁盘附加到 VM
设置资源组、VM 和现有托管磁盘名称的值。 使用 Get-AzDisk 获取托管磁盘,并 Get-AzVM 获取 VM 配置。 然后,用于 Add-AzVMDataDisk 将现有磁盘添加到 VM 配置,并将 Update-AzVM 更新的配置应用到 VM。
$rgName = "myResourceGroup"
$vmName = "myVM"
$dataDiskName = "myDisk"
$disk = Get-AzDisk -ResourceGroupName $rgName -DiskName $dataDiskName
$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
$vm = Add-AzVMDataDisk -CreateOption Attach -Lun 0 -VM $vm -ManagedDiskId $disk.Id
Update-AzVM -VM $vm -ResourceGroupName $rgName
后续步骤
还可以使用模板部署托管磁盘。 有关详细信息,请参阅 使用 Azure 资源管理器模板中的托管磁盘 或 用于部署多个数据磁盘的快速入门模板。