它引起了我的注意,如果你創建一個新的虛擬機然後刪除它(及其關聯的資源),你確實需要而不是實際上刪除了相應的VHD文件 - - 該文件保留在blob存儲中,阻止了使用相同主機名的新機器的供應,並且浪費和未使用的存儲也花費了實際的金錢。我希望刪除虛擬機和虛擬機。刪除虛擬機後從Azure資源管理器中刪除VHD
我在哪裏可以找到關於如何處理這個問題的智慧目前的好寫作?我能找到的是2013年之前的參考資料,顯然是針對「經典」版本的。
我寫了下面的代碼來嘗試修復這種情況。我有兩個用例,首先我必須擺脫所有累積的垃圾,之後我需要確保在每臺未來機器被刪除後清理。
write-output("Removing orphaned disks for hostname ""$hostname"" ...")
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$hostname"}
foreach($disk in $vhdList) {
$diskname = $disk.Name
write-output("Removing VHD ""$diskname"" ...")
Remove-AzureDisk -Diskname "$diskname" -DeleteVHD
write-output("Removed VHD ""$diskname"" ... [OK]")
}
write-output("Removed orphaned disks ... [OK]")
現在,當我運行的是,我得到的VHD文件我希望看到(也有一些相應的「* .STATUS」文件)的漂亮的列表。但是,Remove-AzureDisk
命令會產生錯誤Remove-AzureDisk : ResourceNotFound: The disk with the specified name does not exist
,因此它不起作用。
你會注意到我從新的「ARM」命令切換到「經典」版本中途 - 這可能是我的問題的一部分,但我沒有運氣提出更好的命令。
更新:
這似乎這樣的伎倆:
# Verify that the OS VHD does not already exist
write-output("Checking for blocking VHD's ...")
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$hostname"}
if ($vhdList) {
write-output("There is an existing VHD blocking host ""$hostname"" in storage container ""$($storageContext.BlobEndPoint)vhds""):")
foreach($vhdName in $vhdList.Name) {
write-output("- $vhdName")
}
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-null
$answer = [System.Windows.Forms.MessageBox]::Show("There is an existing VHD blocking host ""$hostname"" in storage container ""$($storageContext.BlobEndPoint)vhds"").`nDo you wish to remove the existing VHD file?" , "Create New VM" , $MB_YESNO)
if ($answer -eq "YES") {
# Remove VHD files
foreach($diskName in $vhdList.Name) {
write-output("- Removing VHD ""$diskName""")
Remove-AzureStorageBlob -Blob $diskName -Container "vhds" -Context $storageContext
}
write-output("Checked for blocking VHD's ... [OK]")
} else {
exit(331)
}
}
如何刪除虛擬機?你用什麼命令? –
爲了測試,我通過Web界面刪除虛擬機。就我(從最近)理解而言,這具有將VHD留在原地的惡劣後果。 – KlaymenDK