Bagikan melalui


Menemukan dan menghapus disk terkelola dan tidak terkelola Azure yang tidak terpasang dengan menggunakan Azure PowerShell

Berlaku untuk: ✔️ Mesin virtual Linux ✔️ Mesin virtual Windows ✔️ Set skala fleksibel ✔️ Set skala seragam

Saat Anda menghapus komputer virtual (VM) di Azure, secara default, disk apa pun yang terpasang ke VM tidak dihapus. Fitur ini membantu mencegah kehilangan data karena penghapusan komputer virtual yang tidak disengaja. Setelah komputer virtual dihapus, Anda akan terus membayar disk yang tidak dipasang. Artikel ini memperlihatkan cara menemukan dan menghapus disk yang tidak dipasang dan mengurangi biaya yang tidak perlu.

Catatan

Anda dapat menggunakan perintah Get-AzureDisk untuk mendapatkan LastOwnershipUpdateTime untuk disk apa pun. Properti ini menunjukkan kapan status disk terakhir diperbarui. Untuk disk yang tidak terpasang, ini menunjukkan waktu ketika disk tidak terpasang. Properti ini kosong untuk disk yang baru dibuat, hingga statusnya berubah.

Disk yang terkelola: Menemukan dan menghapus disk yang tidak dipasang

Skrip berikut mencari disk terkelola yang tidak dipasang dengan memeriksa nilai properti ManagedBy. Ketika disk terkelola dipasang ke komputer virtual, properti ManagedBy berisi ID sumber daya komputer virtual. Ketika disk terkelola tidak dipasang, properti ManagedBy adalah null. Skrip memeriksa semua disk terkelola dalam langganan Azure. Ketika skrip menemukan disk terkelola dengan mengatur properti ManagedBy ke null, skrip menentukan disk tidak dipasang.

Penting

Pertama, jalankan skrip dengan mengatur variabel deleteUnattachedDisks ke 0. Tindakan ini memungkinkan Anda menemukan dan melihat semua disk terkelola yang tidak dipasang.

Setelah Anda meninjau semua disk yang tidak dipasang, jalankan skrip kembali dan atur variabel deleteUnattachedDisks ke 1. Tindakan ini memungkinkan Anda menghapus semua disk terkelola yang tidak dipasang.

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

Disk yang tidak terkelola: Menemukan dan menghapus diska yang tidak terikat

Disk yang tidak terkelola adalah file VHD yang disimpan sebagai blob halaman di akun penyimpanan Azure. Skrip berikut mencari disk yang tidak terkelola yang tidak dipasang (blob halaman) dengan memeriksa nilai properti LeaseStatus. Ketika disk yang tidak terkelola dipasang ke komputer virtual, properti LeaseStatus diatur ke Terkunci. Ketika disk yang tidak terkelola tidak dipasang, properti LeaseStatus diatur ke Tidak terkunci. Skrip memeriksa semua disk yang tidak terkelola di semua akun penyimpanan Azure dalam langganan Azure. Ketika skrip menemukan disk yang tidak terkelola dengan properti LeaseStatus yang diatur ke Tidak Terkunci, skrip menentukan disk tidak dipasang.

Penting

Pertama, jalankan skrip dengan mengatur variabel deleteUnattachedVHDs ke $false. Tindakan ini memungkinkan Anda menemukan dan melihat semua VHD yang tidak terkelola yang tidak dipasang.

Setelah Anda meninjau semua disk yang tidak dipasang, jalankan skrip lagi dan atur variabel deleteUnattachedVHDs ke $true. Tindakan ini memungkinkan Anda menghapus semua VHD terkelola yang tidak dipasang.

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

Langkah berikutnya

Untuk informasi selengkapnya, lihat Menghapus akun penyimpanan dan Mengidentifikasi Disk Orphan Menggunakan PowerShell