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

使用 PowerShell 将数据磁盘附加到 Windows VM

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

本文介绍了如何使用 PowerShell 将新磁盘和现有磁盘附加到 Windows 虚拟机。

首先,查看以下提示:

本文在 Azure Cloud Shell 中使用 PowerShell,后者会不断更新到最新版本。 若要打开 Cloud Shell,请从任何代码块的顶部选择“试一试” 。

降低延迟

在选定区域中,磁盘附加延迟已减少,因此你将看到高达 15% 的改进。 如果你在 VM 之间进行了计划内/计划外故障转移、正在缩放工作负载或正在运行大规模有状态工作负载(例如 Azure Kubernetes 服务),这将非常有用。 但是,此改进仅限于显式磁盘附加命令 Add-AzVMDataDisk。 如果调用可能隐式执行附加的命令(例如 Update-AzVM),则看不到性能改进。 无需执行除调用显式附加命令以外的任何操作即可查看此改进。

每个公共区域目前都提供较低的延迟,但以下各项除外:

  • 加拿大中部
  • 美国中部
  • 美国东部
  • 美国东部 2
  • 美国中南部
  • 美国西部 2
  • 德国北部
  • Jio 印度西部
  • 北欧
  • 西欧

将空数据磁盘添加到虚拟机

此示例演示了如何将空数据磁盘添加到现有虚拟机。

使用托管磁盘

$rgName = 'myResourceGroup'
$vmName = 'myVM'
$location = 'East US'
$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

在可用性区域中使用托管磁盘

若要在可用性区域中创建磁盘,请将 New-AzDiskConfig-Zone 参数一起使用。 以下示例在区域 1 中创建一个磁盘。

$rgName = 'myResourceGroup'
$vmName = 'myVM'
$location = 'East US 2'
$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,并使用磁盘管理进行初始化。 如果在创建 VM 时在其上启用了 WinRM 和证书,则可以使用远程 PowerShell 初始化该磁盘。 还可以使用自定义脚本扩展:

    $location = "location-name"
    $scriptName = "script-name"
    $fileName = "script-file-name"
    Set-AzVMCustomScriptExtension -ResourceGroupName $rgName -Location $locName -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

可以将现有的托管磁盘作为数据磁盘附加到虚拟机。

$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 资源管理器模板中的托管磁盘快速入门模板以部署多个数据磁盘。