Aracılığıyla paylaş


Azure PowerShell kullanarak eklenmemiş Azure yönetilen ve yönetilmeyen diskleri bulma ve silme

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Windows VM'leri ✔️ Esnek ölçek kümeleri ✔️ Tekdüzen ölçek kümeleri

Azure'da bir sanal makineyi (VM) sildiğinizde, varsayılan olarak VM'ye bağlı diskler silinmez. Bu özellik sanal makinelerin yanlışlıkla silinmesinden kaynaklanabilecek veri kaybını önler. Vm silindikten sonra, eklenmemiş diskler için ödeme yapmaya devam edebilirsiniz. Bu makalede, eklenmemiş diskleri bulup silme ve gereksiz maliyetleri azaltma işlemleri gösterilmektedir.

Not

Herhangi bir disk için değerini almak LastOwnershipUpdateTime için Get-AzureDisk komutunu kullanabilirsiniz. Bu özellik, diskin durumunun en son ne zaman güncelleştirilmiş olduğunu temsil eder. Eklenmemiş bir disk için bu, diskin bağlı olmayan zamanını gösterir. Yeni oluşturulan disklerin durumu değişene kadar bu özellik boştur.

Yönetilen diskler: Eklenmemiş diskleri bulma ve silme

Aşağıdaki betik, ManagedBy özelliğinin değerini inceleyerek eklenmemiş yönetilen diskleri arar. Yönetilen disk bir VM'ye eklendiğinde ManagedBy özelliği VM'nin kaynak kimliğini içerir. Yönetilen diskin eki kaldırıldığında ManagedBy özelliği null değeridir. Betik, bir Azure aboneliğindeki tüm yönetilen diskleri inceler. Betik ManagedBy özelliği null olarak ayarlanmış bir yönetilen disk bulursa, betik diskin bağlı olmadığını belirler.

Önemli

İlk olarak, deleteUnattachedDisks değişkenini 0 olarak ayarlayarak betiği çalıştırın. Bu eylem, eklenmemiş tüm yönetilen diskleri bulmanıza ve görüntülemenize olanak tanır.

Tüm eklenmemiş diskleri gözden geçirdikten sonra betiği yeniden çalıştırın ve deleteUnattachedDisks değişkenini 1 olarak ayarlayın. Bu eylem, eklenmemiş tüm yönetilen diskleri silmenize olanak tanır.

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

Yönetilmeyen diskler: Eklenmemiş diskleri bulma ve silme

Yönetilmeyen diskler, Azure depolama hesaplarında sayfa blobları olarak depolanan VHD dosyalarıdır. Aşağıdaki betik, LeaseStatus özelliğinin değerini inceleyerek eklenmemiş yönetilmeyen diskleri (sayfa blobları) arar. Bir VM'ye yönetilmeyen bir disk eklendiğinde LeaseStatus özelliği Kilitli olarak ayarlanır. Yönetilmeyen bir disk eklenmediğinde LeaseStatus özelliği Kilidi Açık olarak ayarlanır. Betik, bir Azure aboneliğindeki tüm Azure depolama hesaplarındaki tüm yönetilmeyen diskleri inceler. Betik, LeaseStatus özelliği Kilidi Açık olarak ayarlanmış yönetilmeyen bir disk bulursa, betik diskin bağlı olmadığını belirler.

Önemli

İlk olarak, deleteUnattachedVHDs değişkenini olarak $falseayarlayarak betiği çalıştırın. Bu eylem, tüm eklenmemiş yönetilmeyen VHD'leri bulmanızı ve görüntülemenizi sağlar.

Tüm eklenmemiş diskleri gözden geçirdikten sonra betiği yeniden çalıştırın ve deleteUnattachedVHDs değişkenini olarak $trueayarlayın. Bu eylem, tüm eklenmemiş yönetilmeyen VHD'leri silmenize olanak tanır.

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

Sonraki adımlar

Daha fazla bilgi için bkz . Depolama hesabını silme ve PowerShell Kullanarak Yalnız Bırakılmış Diskleri Tanımlama