Vyhledání a odstranění nepřipojených spravovaných a nespravovaných disků Azure pomocí Azure PowerShellu
Platí pro: ✔️ Virtuální počítače s Windows s Linuxem ✔️ ✔️ – Flexibilní škálovací sady Uniform Scale Sets ✔️
Když odstraníte virtuální počítač v Azure, ve výchozím nastavení se neodstraní všechny disky připojené k virtuálnímu počítači. Tato funkce pomáhá předcházet ztrátě dat v důsledku neúmyslného odstranění virtuálních počítačů. Po odstranění virtuálního počítače budete dál platit za nepřipojené disky. V tomto článku se dozvíte, jak najít a odstranit všechny nepřipojené disky a snížit zbytečné náklady.
Poznámka:
K získání LastOwnershipUpdateTime
jakéhokoli disku můžete použít příkaz Get-AzureDisk. Tato vlastnost představuje, kdy byl stav disku naposledy aktualizován. U nepřipojeného disku se zobrazí čas, kdy byl disk nepřipojený. Tato vlastnost je prázdná pro nově vytvořené disky, dokud se nezmění jejich stav.
Spravované disky: Vyhledání a odstranění nepřipojených disků
Následující skript vyhledá nepřipojené spravované disky prozkoumáním hodnoty vlastnosti ManagedBy . Pokud je spravovaný disk připojený k virtuálnímu počítači, vlastnost ManagedBy obsahuje ID prostředku virtuálního počítače. Pokud není spravovaný disk nepřipojený, má vlastnost ManagedBy hodnotu null. Skript prozkoumá všechny spravované disky v předplatném Azure. Když skript vyhledá spravovaný disk s vlastností ManagedBy nastavenou na hodnotu null, skript určí, že disk není nepřipojený.
Důležité
Nejprve spusťte skript nastavením proměnné deleteUnattachedDisks na hodnotu 0. Tato akce umožňuje najít a zobrazit všechny nepřipojené spravované disky.
Po kontrole všech nepřipojených disků znovu spusťte skript a nastavte proměnnou deleteUnattachedDisks na hodnotu 1. Tato akce umožňuje odstranit všechny nepřipojené spravované disky.
# Set deleteUnattachedDisks=1 if you want to delete unattached Managed Disks
# Set deleteUnattachedDisks=0 if you want to see the Id of the unattached Managed Disks
$deleteUnattachedDisks=0
$managedDisks = Get-AzDisk
foreach ($md in $managedDisks) {
# ManagedBy property stores the Id of the VM to which Managed Disk is attached to
# If ManagedBy property is $null then it means that the Managed Disk is not attached to a VM
if($md.ManagedBy -eq $null){
if($deleteUnattachedDisks -eq 1){
Write-Host "Deleting unattached Managed Disk with Id: $($md.Id)"
$md | Remove-AzDisk -Force
Write-Host "Deleted unattached Managed Disk with Id: $($md.Id) "
}else{
$md.Id
}
}
}
Nespravované disky: Vyhledání a odstranění nepřipojených disků
Nespravované disky jsou soubory VHD uložené jako objekty blob stránky v účtech úložiště Azure. Následující skript hledá nepřipojené nespravované disky (objekty blob stránky) prozkoumáním hodnoty LeaseStatus vlastnost. Pokud je nespravovaný disk připojený k virtuálnímu počítači, vlastnost LeaseStatus je nastavena na Uzamčeno. Pokud není nespravovaný disk nepřipojený, vlastnost LeaseStatus je nastavena na Unlocked. Skript prozkoumá všechny nespravované disky ve všech účtech úložiště Azure v předplatném Azure. Když skript vyhledá nespravovaný disk s vlastností LeaseStatus nastavenou na Unlocked, skript určí, že disk není nepřipojený.
Důležité
Nejprve spusťte skript nastavením proměnné deleteUnattachedVHDs na $false
hodnotu . Tato akce umožňuje najít a zobrazit všechny nepřipojené nespravované virtuální pevné disky.
Po kontrole všech nepřipojených disků spusťte skript znovu a nastavte proměnnou deleteUnattachedVHDs na $true
. Tato akce umožňuje odstranit všechna nepřipojená nespravovaná virtuální pevné disky.
# Set deleteUnattachedVHDs=$true if you want to delete unattached VHDs
# Set deleteUnattachedVHDs=$false if you want to see the Uri of the unattached VHDs
$deleteUnattachedVHDs=$false
$storageAccounts = Get-AzStorageAccount
foreach($storageAccount in $storageAccounts){
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.StorageAccountName)[0].Value
$context = New-AzStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey $storageKey
$containers = Get-AzStorageContainer -Context $context
foreach($container in $containers){
$blobs = Get-AzStorageBlob -Container $container.Name -Context $context
#Fetch all the Page blobs with extension .vhd as only Page blobs can be attached as disk to Azure VMs
$blobs | Where-Object {$_.BlobType -eq 'PageBlob' -and $_.Name.EndsWith('.vhd')} | ForEach-Object {
#If a Page blob is not attached as disk then LeaseStatus will be unlocked
if($_.ICloudBlob.Properties.LeaseStatus -eq 'Unlocked'){
if($deleteUnattachedVHDs){
Write-Host "Deleting unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
$_ | Remove-AzStorageBlob -Force
Write-Host "Deleted unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
}
else{
$_.ICloudBlob.Uri.AbsoluteUri
}
}
}
}
}
Další kroky
Další informace najdete v tématu Odstranění účtu úložiště a identifikace osamocených disků pomocí PowerShellu.