Udostępnij za pośrednictwem


Znajdowanie i usuwanie niezałączanych dysków zarządzanych i niezarządzanych platformy Azure przy użyciu programu Azure PowerShell

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux Maszyny ✔️ wirtualne z systemem Windows ✔️ — elastyczne zestawy ✔️ skalowania

Po usunięciu maszyny wirtualnej na platformie Azure domyślnie wszystkie dyski dołączone do maszyny wirtualnej nie zostaną usunięte. Ta funkcja pomaga zapobiegać utracie danych z powodu przypadkowego usunięcia maszyn wirtualnych. Po usunięciu maszyny wirtualnej będziesz nadal płacić za nieprzyłączone dyski. W tym artykule pokazano, jak znaleźć i usunąć wszelkie nieprzyłączone dyski i zmniejszyć niepotrzebne koszty.

Uwaga

Możesz użyć polecenia Get-AzureDisk , aby pobrać element LastOwnershipUpdateTime dla dowolnego dysku. Ta właściwość reprezentuje czas ostatniej aktualizacji stanu dysku. W przypadku nieprzyłączonego dysku pokazuje to czas, kiedy dysk nie został dołączony. Ta właściwość jest pusta dla nowo utworzonych dysków, dopóki ich stan nie ulegnie zmianie.

Dyski zarządzane: znajdowanie i usuwanie niedołączanych dysków

Poniższy skrypt wyszukuje niedołączone dyski zarządzane, sprawdzając wartość właściwości ManagedBy. Gdy dysk zarządzany jest dołączony do maszyny wirtualnej, właściwość ManagedBy zawiera identyfikator zasobu maszyny wirtualnej. Gdy dysk zarządzany jest nieprzyłączone, właściwość ManagedBy ma wartość null. Skrypt sprawdza wszystkie dyski zarządzane w subskrypcji platformy Azure. Gdy skrypt lokalizuje dysk zarządzany z właściwością ManagedBy ustawioną na wartość null, skrypt określa, że dysk nie jest dołączony.

Ważne

Najpierw uruchom skrypt, ustawiając zmienną deleteUnattachedDisks na 0. Ta akcja umożliwia znajdowanie i wyświetlanie wszystkich niedołączonego dysku zarządzanego.

Po przejrzeniu wszystkich niedołączonego dysku uruchom skrypt ponownie i ustaw zmienną deleteUnattachedDisks na 1. Ta akcja umożliwia usunięcie wszystkich niedołączonego dysku zarządzanego.

# 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
        }
    }
 }

Dyski niezarządzane: znajdowanie i usuwanie niedołączonych dysków

Dyski niezarządzane to pliki VHD przechowywane jako stronicowe obiekty blob na kontach usługi Azure Storage. Poniższy skrypt wyszukuje niedołączone dyski niezarządzane (stronicowe obiekty blob), sprawdzając wartość właściwości LeaseStatus . Gdy dysk niezarządzany jest dołączony do maszyny wirtualnej, właściwość LeaseStatus jest ustawiona na Wartość Zablokowana. Gdy niezarządzany dysk jest niezałączany, właściwość LeaseStatus jest ustawiona na Odblokowano. Skrypt sprawdza wszystkie niezarządzane dyski we wszystkich kontach usługi Azure Storage w subskrypcji platformy Azure. Gdy skrypt lokalizuje dysk niezarządzany z właściwością LeaseStatus ustawioną na Odblokowano, skrypt określa, że dysk nie jest dołączony.

Ważne

Najpierw uruchom skrypt, ustawiając zmienną deleteUnattachedVHDs na $falsewartość . Ta akcja umożliwia znajdowanie i wyświetlanie wszystkich niezarządzanych dysków VHD niezarządzanych.

Po przejrzeniu wszystkich niedołączonego dysku uruchom skrypt ponownie i ustaw zmienną deleteUnattachedVHDs na $true. Ta akcja umożliwia usunięcie wszystkich niezarządzanych dysków VHD niezarządzanych.

# 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
                    }
            }
        }
    }
}

Następne kroki

Aby uzyskać więcej informacji, zobacz Usuwanie konta magazynu i Identyfikowanie oddzielonych dysków przy użyciu programu PowerShell