我有一个 Azure VM,我正在尝试使用 Powershell 删除它。我还想删除该虚拟机操作系统所在的磁盘(没有数据磁盘)。 我假设我需要以下两个 cmdlet:
- 删除-AzureVM
- 删除 AzureDisk
这是我的代码:
$VMs = Get-AzureVM $svcName
foreach ($VM in $VMs)
{
$OSDisk = ($VM | Get-AzureOSDisk)
if ($VM.InstanceStatus -eq "ReadyRole") {
Stop-AzureVM -Name $VM.Name -ServiceName $svcName
}
remove-azurevm -ServiceName $svcName -Name $VM.Name
Remove-AzureDisk -DiskName $OSDisk.DiskName
}
当我执行此操作时,对Remove-AzureVM 的调用成功返回,但对Remove-AzureDisk 的调用返回错误:
Remove-AzureDisk : BadRequest: A disk with name XXX is currently in use by virtual machine YYY running within hosted service ZZZ, deployment XYZ.
奇怪的是,几分钟后我就可以对 Remove-AzureDisk 发出相同的调用,并且它成功返回。
就好像对Remove-AzureVM 的调用返回得太快。即,在虚拟机被完全删除之前,或者在磁盘链接被删除之前,它报告成功。
谁能解释一下为什么会这样以及我如何解决这个问题?
提前致谢
杰米
最佳答案
这里发生的情况是,存储在 BLOB 存储中的磁盘在被虚拟机使用时被锁定。您正在删除 VM,但 BLOB 上的租约需要一些时间才能释放。这就是为什么您可以稍后将其删除。
有一些人编写了 PowerShell 来中断租约,或者您可以使用 PowerShell 来使用 SDK(或直接进行 REST API 调用)来检查租约状态。
关于powershell - 删除 AzureDisk 抛出错误,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646583/