是否可以升级 Azure VM 使用的托管磁盘而无需重新部署 VM?

Shi*_*ion 5 deployment azure

我正在尝试将添加到 Windows 2019 Server VM 的单独托管磁盘从标准 SSD 转换为高级 SSD。根据https://docs.microsoft.com/bs-latn-ba/Azure/virtual-machines/windows/convert-disk-storage 中的步骤,我将不得不停止 VM 来执行此操作——但我我担心如果我停止它,会产生连锁反应,延迟我的团队重新上线并立即继续工作的能力。我试图避免的一种特定情况是强制重新部署 VM。

看,我在此 Azure VM 上运行了第三方软件,如果重新部署 VM,则可能需要重置/重新初始化其软件许可模块 (SLM)。重新初始化可能是一个漫长的过程,因为我必须与技术支持通电话,请求帮助,重新路由谁知道多少次,然后等待重新颁发的许可证,应用新的许可证,并测试一切恢复正常。这是我试图避免的事情,因为当我让软件制造商重新发布/重新配置我的 SLM 时,它可能会使我的团队失去一天的工作价值。SLM 依赖于其主机的 CPUID 和 MAC ID。由于重新部署意味着虚拟机可能会部署在不同的物理硬件上,因此我很可能需要重置 SLM。我不

所以我的问题是,

  • 如果我关闭 VM 进行维护(例如,将外部托管磁盘从标准 SSD 升级到高级 SSD),是否会强制重新部署?

  • 关闭是否与在 Azure 门户上为该虚拟机点击停止有效相同?

  • 我听说有一个停止和一个单独的停止/重新部署选项,但如果是这样,我不会立即看到。我点击“停止”会看到重新部署选项吗?

Shi*_*ion 6

尤里卡!我设法升级了我的托管数据磁盘,而无需重新部署 VM!根据 Azure 门户网站的说法,“只有当磁盘未连接或所有者 VM 被解除分配时,才能调整磁盘大小或更改帐户类型。” 似乎如果我可以取消附加/分离有问题的托管磁盘,我就可以在家中自由,而无需停止和释放 VM!事实上,原来如此。

我了解到,“您可以使用 PowerShell删除数据磁盘,但在从 VM 分离磁盘之前,请确保没有任何活动正在使用该磁盘。” (来源:请参阅本文底部的超链接 #3。)因此,我继续并停止了依赖于该磁盘的第三方服务,让 VM 保持运行,并在我自己的本地 PC 上执行了所有步骤记录在这里。

我将在我执行的自定义 PowerShell 命令(从我的 Windows PowerShell ISE 用户界面记录,结果嵌入,在我称之为阶段 1、2 和 4 中)进一步详细说明。我还需要使用 Azure Web 门户(在我所说的第 3 阶段)。

这一切都奏效了!再次注意,我分四个阶段执行我的解决方案。简而言之,它们是:

阶段 1:这是使用 PowerShell 完成的。最初,直到 Connect-AzAccount 命令,您将看到安装必要的 Azure PowerShell 模块和设置我的 PC 以允许脚本执行的准备步骤。我必须多次单击 Yes 或 Yes To All 才能完成模块安装

阶段 2:仍在使用 PowerShell。这是我在运行 Connect-AzAccount 时必须输入我的 Azure 门户凭据的地方。基本上,我然后在 VM 仍在运行时分离磁盘。这发生在 Remove-AzVMDataDisk 命令和紧随其后的 Update-AzVM 中。

阶段 3:那时,我返回到 Azure 门户网站,将托管数据磁盘从标准更改为高级 SSD。

阶段 4:最后,我返回到我的 PowerShell 屏幕并继续执行导致 Add-AzVMDataDisk 命令将我的磁盘重新附加到 VM 的步骤 - 以及随后的 Update-AzVM 启动它。这使升级后的托管磁盘驱动器在我的 VM 上恢复生机!

更妙的是,所有数据都保持完整,我之前分配给它的驱动器号被保留,甚至我给它的网络共享名称仍然可以通过我的虚拟网络被其他虚拟机访问!

(请注意,在第 4 阶段,我还执行了一个额外的步骤,希望通过读/写缓存获得最佳的高级 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
Run Code Online (Sandbox Code Playgroud)

阶段2

PS C:\WINDOWS\system32> Connect-AzAccount

Account                         SubscriptionName                      TenantId 
-------                         ----------------                      -------- 
admin@MYCOMPANY.onmicrosoft.com 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          
Run Code Online (Sandbox Code Playgroud)

第三阶段

这是我返回 Azure 门户并将驱动器从标准 SSD 更改为高级 SSD 并保存更改的地方!为此,我,

  1. 登录到 Azure 门户。
  2. 从门户中的虚拟机列表中选择了 MyFileServer。
  3. 我注意到我的 VM 状态显示它仍然是“正在运行”。
  4. 在 VM 的窗格中,我从菜单中选择了磁盘。
  5. 我选择了要转换的磁盘 MyStorageDrive。
  6. 我从菜单中选择了配置。
  7. 我将帐户类型从标准 HDD 更改为高级 SSD(以前这是不可能的,因为它在我分离磁盘之前被禁用)。
  8. 我单击了保存,然后关闭了磁盘窗格。

磁盘转换实际上是瞬间完成的。

第 4 阶段

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>  
Run Code Online (Sandbox Code Playgroud)

这些是帮助我找到此解决方案的网站:

1 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-6

2 https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-2.5.0

3 https://docs.microsoft.com/en-us/azure/virtual-machines/windows/detach-disk

4 https://docs.microsoft.com/bs-latn-ba/Azure/virtual-machines/windows/convert-disk-storage

5 https://docs.microsoft.com/en-us/azure/virtual-machines/windows/attach-disk-ps

6 https://docs.microsoft.com/en-us/learn/modules/caching-and-performance-azure-storage-and-disks/6-exercise-manage-cache-settings-with-powershell