【问题标题】:Remove-AzureDisk throws error, not sure whyRemove-AzureDisk 抛出错误,不知道为什么
【发布时间】:2013-11-07 22:06:21
【问题描述】:

我有一个 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 当前正在使用中 通过在托管服务中运行的虚拟机 YYY ZZZ,部署 XYZ。

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

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

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

提前致谢

杰米

【问题讨论】:

    标签: powershell azure virtual-machine


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢迈克,我想可能是这样。也很高兴知道正确的命名是“租赁”。如果有人阅读可以分享任何会破坏租约的代码,那么如果你能分享它,我将不胜感激。谢谢。
    • 您可以在这篇 TechNet 文章中了解他们是如何使用 PowerShell 使用存储 SDK 实现的:technet.microsoft.com/en-us/library/jj919145.aspx 您需要调整它,因为它正在做一些您不关心的事情。跨度>
    【解决方案2】:

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

    问候

    杰米

    【讨论】:

      【解决方案3】:

      我对此困惑了很久。最终,我找到了一个不同的命令来执行我认为我正在使用该命令执行的操作。我建议使用 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
      

      【讨论】:

        【解决方案4】:

        这与Windows Azure: Delete disk attached to non-existent VM 有关。在这里交叉发布我的答案:

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

        PowerShell

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

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

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

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

        AzurePublishSettingsFile

        • 检索您的 PublishSettingsFile。
          Get-AzurePublishSettingsFile

        • 导入-AzurePublishSettingsFile 并指定刚刚保存的文件的路径。
          Import-AzurePublishSettingsFile -PublishSettingsFile '&lt;your file path&gt;'

        显示和删除磁盘

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-08
          • 1970-01-01
          • 2019-04-12
          • 2018-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多