我有一个Azure VM,我试图使用Powershell删除它。我还想删除VM OS所在的磁盘(没有数据磁盘)。 我假设我需要以下两个cmdlet:
这是我的代码:
$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:具有名称的磁盘 XXX目前正在使用中 通过在托管服务中运行的虚拟机YYY ZZZ,部署XYZ。
奇怪的是,我可以在片刻之后向Remove-AzureDisk发出相同的调用,并且它会成功返回。
就好像对Remove-AzureVM的调用返回太快了。即,在VM被完全删除之前,或者在以任何速率删除了到磁盘的链接之前,它的报告成功。
任何人都可以解释为什么会这样,以及我如何解决这个问题?
提前致谢
杰米
答案 0 :(得分:2)
这里发生的事情是存储在BLOB存储中的磁盘在VM使用时被锁定。您正在删除VM,但BLOB上的租约需要一些时间才能释放。这就是为什么你可以稍后删除它。
有些人编写PowerShell来破坏租约,或者您可以使用PowerShell来使用SDK(或进行直接REST API调用)来检查租约状态。
答案 1 :(得分:0)
我最终编写了一个创建VM的脚本,克隆它,然后删除克隆。作为其中的一部分,我需要等到租约发布,因此如果您遇到同样的问题,您可能需要查看http://sqlblog.com/blogs/jamie_thomson/archive/2013/11/04/clone-an-azure-vm-using-powershell.aspx上的博客文章,因为它会有一些可能对您有用的代码。
此致
杰米
答案 2 :(得分:0)
我对此感到困惑很长一段时间。最终,我发现了一个不同的命令来执行我认为我正在使用此命令执行的操作。我建议使用remove-azuredatadisk命令删除磁盘,因为它会自动中断租约。
Get-AzureVM -ServiceName <servicename> -name <vmname> |Remove-AzureDataDisk -lun <lun#> -deletevhd | Update-AzureVM
它会旋转几分钟,但它会在最后给你一个成功/失败输出。
此命令就是这样做的,并没有向您提供有关删除了哪个驱动器的任何反馈。我建议先放入get-azuredatadisk
只是为了确定你删除了什么。
Get-AzureVM -ServiceName <servicename> -name <vmname> | Get-AzureDataDisk
答案 3 :(得分:0)
这与Windows Azure: Delete disk attached to non-existent VM有关。在这里交叉发表我的答案:
我无法使用(2016)门户网站删除我的(经典)存储帐户中的孤立磁盘。下面是使用PowerShell删除这些孤立磁盘的详细步骤。
如果您还没有下载并安装PowerShell。 (Install and configure Azure PowerShell。)此doclink的初始步骤:
安装后检查Azure PowerShell模块是否可用:
Get-Module –ListAvailable
如果未列出Azure PowerShell模块,则可能需要导入它:
Import-Module Azure
登录Azure资源管理器:
Login-AzureRmAccount
检索您的PublishSettings文件。
Get-AzurePublishSettingsFile
导入-AzurePublishSettingsFile并指定刚刚保存的文件的路径
Import-AzurePublishSettingsFile -PublishSettingsFile '<your file path>'
显示当前磁盘。 (参考:Azure Storage Cmdlets)
Get-AzureDisk
快速删除所有磁盘。 (归功于Mike's answer)
get-azuredisk | Remove-AzureDisk
或按名称删除磁盘。 (归功于Remove-AzureDisk Documentation)
Remove-AzureDisk -DiskName disk-name-000000000000000000 -DeleteVHD