删除 Azure VM 时如何从存储 blob 中删除 "bootdiagnostics" 容器?
How to remove "bootdiagnostics" container from storage blob when deleting Azure VM?
我的任务是自动创建 Azure VM,自然而然地我做了一些或多或少的尝试部署 VM 映像的中断迭代。
我刚刚发现我的存储帐户的 blob 服务正在收集用于启动诊断的很长的容器列表。
因为我已经删除了它们所属的许多 VM,所以这些容器对我来说都是无用的,并且在门户中它们挤掉了我确实想要的几个有用的文件夹。事实上,我有一个销毁 VM 的脚本(删除资源、VHD 等);我希望这个脚本也能杀死这些诊断容器。
但是容器的名字很尴尬——而且只包含主机名的一部分……
- 我如何从 Powershell 识别属于特定 VM 的诊断容器,以便我可以将其与其他资源一起删除?
- 为什么 Azure 不能更优雅地处理这个问题,为什么我必须 "discover" 在删除 VM 时不删除诊断容器和 VHD?是否还有我不知道的另一个按钮或屏幕?
根据我的粗略观察,bootdiagnostic 存储容器名称可能仅包含名称 > 8 个字符的部分 VM 名称。但是,容器名称的最后一部分,即紧跟在您的 VM 名称之后的名称部分,是您的 VM 的唯一标识符。您可以使用以下文章中提到的步骤检索 VM 的唯一标识符名称:https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/。对于 ARM VM,您可以通过 REST 检索 VM 名称的唯一标识符。
然后可以解析 bootdiagnostic 存储容器名称字符串以获取 VM 的唯一标识符,以找出哪些 VM 正在使用哪些 blob 存储容器。
谢谢,
昂
我发现 UUID 是与 OS VHD 文件一起存在的 "status" 文件名称的一部分(我不知道它是做什么用的)!
function getUUID([string] $vmname) {
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$vmname"} | Where-Object{$_.Name -match "^$hostname.*\.status$"}
$uuid = $vhdList.Name # Get name including UUID
$uuid = $uuid -replace "\.status","" # Remove suffix (".status")
$uuid = $uuid -replace ".*?\.","" # Remove prefix ("bootdiagnostics-$vmname.")
return $uuid
}
我的任务是自动创建 Azure VM,自然而然地我做了一些或多或少的尝试部署 VM 映像的中断迭代。
我刚刚发现我的存储帐户的 blob 服务正在收集用于启动诊断的很长的容器列表。
因为我已经删除了它们所属的许多 VM,所以这些容器对我来说都是无用的,并且在门户中它们挤掉了我确实想要的几个有用的文件夹。事实上,我有一个销毁 VM 的脚本(删除资源、VHD 等);我希望这个脚本也能杀死这些诊断容器。
但是容器的名字很尴尬——而且只包含主机名的一部分……
- 我如何从 Powershell 识别属于特定 VM 的诊断容器,以便我可以将其与其他资源一起删除?
- 为什么 Azure 不能更优雅地处理这个问题,为什么我必须 "discover" 在删除 VM 时不删除诊断容器和 VHD?是否还有我不知道的另一个按钮或屏幕?
根据我的粗略观察,bootdiagnostic 存储容器名称可能仅包含名称 > 8 个字符的部分 VM 名称。但是,容器名称的最后一部分,即紧跟在您的 VM 名称之后的名称部分,是您的 VM 的唯一标识符。您可以使用以下文章中提到的步骤检索 VM 的唯一标识符名称:https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/。对于 ARM VM,您可以通过 REST 检索 VM 名称的唯一标识符。
然后可以解析 bootdiagnostic 存储容器名称字符串以获取 VM 的唯一标识符,以找出哪些 VM 正在使用哪些 blob 存储容器。
谢谢, 昂
我发现 UUID 是与 OS VHD 文件一起存在的 "status" 文件名称的一部分(我不知道它是做什么用的)!
function getUUID([string] $vmname) {
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$vmname"} | Where-Object{$_.Name -match "^$hostname.*\.status$"}
$uuid = $vhdList.Name # Get name including UUID
$uuid = $uuid -replace "\.status","" # Remove suffix (".status")
$uuid = $uuid -replace ".*?\.","" # Remove prefix ("bootdiagnostics-$vmname.")
return $uuid
}