2

我有一个 Azure VM,我正在尝试使用 Powershell 将其删除。我还想删除该 VM 操作系统所在的磁盘(没有数据磁盘)。我假设我将需要以下两个 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:名称为 XXX 的磁盘当前由在托管服务 ZZZ 中运行的虚拟机 YYY 使用,部署 XYZ。

奇怪的是,我可以在几分钟后对 Remove-AzureDisk 发出相同的调用,并且它成功返回。

好像对 Remove-AzureVM 的调用返回得太快了。即它在VM 被完全删除之前报告成功,或者在磁盘的链接被删除之前报告成功。

谁能解释为什么会这样以及我如何解决这个问题?

提前致谢

杰米

4

4 回答 4

2

这里发生的情况是,存储在 BLOB 存储中的磁盘在被 VM 使用时被锁定。您正在删除 VM,但 BLOB 上的租约需要一些时间才能释放。这就是为什么您可以稍后将其删除的原因。

有一些人编写了 PowerShell 来打破租约,或者您可以使用 PowerShell 来使用 SDK(或进行直接 REST API 调用)来检查租约状态。

于 2013-10-29T00:30:18.310 回答
0

我最终编写了一个脚本来创建一个虚拟机,克隆它,然后删除克隆。作为其中的一部分,我需要等到租约发布,因此如果您遇到同样的问题,您可能需要查看我在http://sqlblog.com/blogs/jamie_thomson/archive/2013/11/04上的博客文章/clone-an-azure-vm-using-powershell.aspx,因为它会有一些可能对您有所帮助的代码。

问候

杰米

于 2013-11-04T21:27:18.447 回答
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
于 2014-10-14T16:37:26.450 回答
0

这与Windows Azure:删除连接到不存在的 VM 的磁盘有关。在这里交叉发布我的答案:

我无法使用 (2016) 门户网站删除我的(经典)存储帐户中的孤立磁盘。这是使用 PowerShell 删除这些孤立磁盘的详细演练。

电源外壳

如果您还没有,请下载并安装 PowerShell。(安装和配置 Azure PowerShell。)此文档链接的初始步骤:

  • 安装后检查 Azure PowerShell 模块是否可用:
    Get-Module –ListAvailable

  • 如果未列出 Azure PowerShell 模块,您可能需要将其导入:
    Import-Module Azure

  • 登录到 Azure 资源管理器:
    Login-AzureRmAccount

Azure发布设置文件

  • 检索您的 PublishSettingsFile。
    Get-AzurePublishSettingsFile

  • Import-AzurePublishSettingsFile 并指定刚刚保存的文件的路径。
    Import-AzurePublishSettingsFile -PublishSettingsFile '<your file path>'

显示和删除磁盘

于 2016-01-22T15:34:58.153 回答