我正在尝试将添加到 Windows 2019 Server VM 的单独托管磁盘从标准 SSD 转换为高级 SSD。根据https://docs.microsoft.com/bs-latn-ba/Azure/virtual-machines/windows/convert-disk-storage,我必须停止虚拟机才能执行此操作——但我担心如果停止它,会产生连锁反应,从而延迟我的团队重新上线并继续工作的能力。我试图避免的一个特定场景是强制重新部署虚拟机。
瞧,我在这个 Azure VM 上运行第三方软件,如果重新部署 VM,其软件许可模块 (SLM) 可能需要重置/重新初始化。重新初始化可能是一个漫长的过程,因为我必须打电话给技术支持,请求帮助,不知道要重新路由多少次,等待重新颁发的许可证,应用新许可证,并测试一切是否恢复正常。这是我试图避免的事情,因为这可能会让我的团队在让软件制造商重新颁发/重新配置我的 SLM 时损失一天的工作量。SLM 依赖于其主机的 CPUID 和 MAC ID。由于重新部署意味着虚拟机可能会部署在不同的物理硬件上,我很可能需要重置 SLM。我不想这样。
我的问题是,
如果我关闭虚拟机进行维护(例如将外部托管磁盘从标准 SSD 升级到高级 SSD),是否会强制重新部署?
关闭是否实际上与在 Azure 门户上点击该 VM 的“停止”相同?
我听说有一个停止和一个单独的停止/重新部署选项,但如果有的话,我没有立即看到。重新部署是一个我会看到的选项吗后我按了停止?
答案1
尤里卡!我成功升级了托管数据磁盘,而无需重新部署虚拟机!根据 Azure 门户网站,“只有在磁盘未连接或所有者虚拟机被释放时,才能调整磁盘大小或更改帐户类型。”似乎如果我可以解除连接/分离有问题的托管磁盘,我就可以高枕无忧了,而不需要停止和释放虚拟机!事实上,确实如此。
我了解到,“你可以热的移除数据盘使用 PowerShell,但在将磁盘从 VM 分离之前,请确保没有任何内容正在使用该磁盘。”(来源:请参阅本文底部的超链接#3。)因此,我继续并停止了依赖于该磁盘的第三方服务,让 VM 保持运行,并从我自己的本地电脑上执行了我在此处记录的所有步骤。
我将在下面详细介绍我执行的自定义 PowerShell 命令(从我的 Windows PowerShell ISE 用户界面记录,并嵌入结果,我称之为第 1、2 和 4 阶段)。我还需要使用 Azure Web 门户(我称之为第 3 阶段)。
所有这些有效!再次注意,我在四个阶段. 简而言之,它们是:
第 1 阶段:这是使用 PowerShell 完成的。最初,直到 Connect-AzAccount 命令,您将看到的是安装必要的 Azure PowerShell 模块并设置我的 PC 以允许脚本执行的准备步骤。我必须单击“是”或“全部是”几次才能完成模块安装
第 2 阶段:仍使用 PowerShell。这是我在运行 Connect-AzAccount 时必须输入 Azure 门户凭据的地方。基本上,我在 VM 仍在运行时分离磁盘。这发生在 Remove-AzVMDataDisk 命令和紧随其后的 Update-AzVM 中。
阶段 3:此时,我返回到我的 Azure 门户网站,并将托管数据磁盘从标准 SSD 更改为高级 SSD。
阶段 4:最后,我回到 PowerShell 屏幕并继续执行 Add-AzVMDataDisk 命令之前的步骤,将磁盘重新连接到 VM,然后执行随后的 Update-AzVM 来启动该操作。这使升级后的托管磁盘驱动器在我的 VM 上恢复了活力!
更好的是,所有数据都保持完好,我之前为其分配的驱动器号也保留了下来,甚至我为其指定的网络共享名仍然可以通过我的虚拟网络供其他虚拟机访问!
(请注意,在第 4 阶段,我还执行了额外的步骤,希望通过读/写缓存获得最佳的 Premium SSD 性能:即命令“Set-AzVMDataDisk -VM $VM -Lun“0”-Caching ReadWrite”。)
现在,请观察我在 PowerShell 中采取的所有详细步骤以及我在 Azure Web 门户中执行的操作:
阶段1
PS C:\WINDOWS\system32> Install-Module -Name Az -AllowClobber
PS C:\WINDOWS\system32> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
PS C:\WINDOWS\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS C:\WINDOWS\system32> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine Undefined
阶段2
PS C:\WINDOWS\system32> Connect-AzAccount
Account SubscriptionName TenantId
------- ---------------- --------
[email protected] Microsoft Azure (MYCOMPANY): #0000000 ffffff...
PS C:\WINDOWS\system32> $VirtualMachine = Get-AzVM -ResourceGroupName "MYFILESERVERRESOURCES" -Name "MyFileServer"
PS C:\WINDOWS\system32> Remove-AzVMDataDisk -VM $VirtualMachine -Name "MyStorageDrive"
ResourceGroupName : MYFILESERVERRESOURCES
Id : /subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resour
ceGroups/MYFILESERVERRESOURCES/providers/Microsoft.Compute/virtualMachines/MY
FileServer
VmId : eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee
Name : MyFileServer
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
DiagnosticsProfile : {BootDiagnostics}
Extensions : {AzureDiskEncryption, AzurePerformanceDiagnostics,
MicrosoftMonitoringAgent}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration,
Secrets, AllowExtensionOperations}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
PS C:\WINDOWS\system32> Update-AzVM -ResourceGroupName "MYFILESERVERRESOURCES" -VM $VirtualMachine
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
第三阶段
在这里,我返回 Azure 门户,将驱动器从标准 SSD 更改为高级 SSD,并保存了该更改!为此,我
- 登录到 Azure 门户。
- 从门户的虚拟机列表中选择 MyFileServer。
- 我注意到我的虚拟机状态仍显示“正在运行”。
- 在虚拟机窗格中,我从菜单中选择了“磁盘”。
- 我选择了想要转换的磁盘 MyStorageDrive。
- 我从菜单中选择了配置。
- 我将帐户类型从标准 HDD 更改为高级 SSD(这在以前是不可能的,因为直到我分离磁盘后它才被禁用)。
- 我单击“保存”,然后关闭磁盘窗格。
磁盘转换实际上是即时的。
第四阶段
PS C:\WINDOWS\system32> $rgName = "MYFILESERVERRESOURCES"
$vmName = "MyFileServer"
$location = "East US"
$dataDiskName = "MyStorageDrive"
$disk = Get-AzDisk -ResourceGroupName $rgName -DiskName $dataDiskName
PS C:\WINDOWS\system32> $vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
PS C:\WINDOWS\system32> $vm = Add-AzVMDataDisk -CreateOption Attach -Lun 0 -VM $vm -ManagedDiskId $disk.Id
PS C:\WINDOWS\system32> Update-AzVM -VM $vm -ResourceGroupName $rgName
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
PS C:\WINDOWS\system32> $VM.StorageProfile.OsDisk.Caching
ReadWrite
PS C:\WINDOWS\system32> $vm.StorageProfile.DataDisks
Name :
DiskSizeGB :
Lun : 0
Caching : None
CreateOption : Attach
SourceImage :
VirtualHardDisk :
PS C:\WINDOWS\system32> Set-AzVMDataDisk -VM $VM -Lun "0" -Caching ReadWrite
ResourceGroupName : MYFILESERVERRESOURCES
Id : /subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/MYFILESERVERRESOURCES/providers
/Microsoft.Compute/virtualMachines/MyFileServer
VmId : eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee
Name : MyFileServer
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
DiagnosticsProfile : {BootDiagnostics}
Extensions : {AzureDiskEncryption, AzurePerformanceDiagnostics, MicrosoftMonitoringAgent}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
PS C:\WINDOWS\system32> Update-AzVM -VM $vm -ResourceGroupName $rgName
RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
PS C:\WINDOWS\system32>
这些网站帮助我找到了这个解决方案:
2https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-2.5.0
3https://docs.microsoft.com/en-us/azure/virtual-machines/windows/detach-disk
4https://docs.microsoft.com/bs-latn-ba/Azure/virtual-machines/windows/convert-disk-storage
5https://docs.microsoft.com/en-us/azure/virtual-machines/windows/attach-disk-ps