Bagikan melalui


Menemukan dan menghapus disk yang dikelola dan yang tidak dikelola oleh Azure yang tidak dipasang menggunakan Azure CLI

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

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 az disk show 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
unattachedDiskIds=$(az disk list --query '[?managedBy==`null`].[id]' -o tsv)
for id in ${unattachedDiskIds[@]}
do
    if (( $deleteUnattachedDisks == 1 ))
    then

        echo "Deleting unattached Managed Disk with Id: "$id
        az disk delete --ids $id --yes
        echo "Deleted unattached Managed Disk with Id: "$id

    else
        echo $id
    fi
done

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 0. 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 kembali dan atur variabel deleteUnattachedVHDs ke 1. Tindakan ini memungkinkan Anda menghapus semua VHD terkelola yang tidak dipasang.

# Set deleteUnattachedVHDs=1 if you want to delete unattached VHDs
# Set deleteUnattachedVHDs=0 if you want to see the details of the unattached VHDs
deleteUnattachedVHDs=0
storageAccountIds=$(az storage account list --query [].[id] -o tsv)
for id in ${storageAccountIds[@]}
do
    connectionString=$(az storage account show-connection-string --ids $id --query connectionString -o tsv)
    containers=$(az storage container list --connection-string $connectionString --query [].[name] -o tsv)

    for container in ${containers[@]}
    do 
        
        blobs=$(az storage blob list --show-next-marker -c $container --connection-string $connectionString --query "[?properties.blobType=='PageBlob' && ends_with(name,'.vhd')].[name]" -o tsv)
        
        for blob in ${blobs[@]}
        do
            leaseStatus=$(az storage blob show -n $blob -c $container --connection-string $connectionString --query "properties.lease.status" -o tsv)
            
            if [ "$leaseStatus" == "unlocked" ]
            then 

                if (( $deleteUnattachedVHDs == 1 ))
                then 

                    echo "Deleting VHD: "$blob" in container: "$container" in storage account: "$id

                    az storage blob delete --delete-snapshots include  -n $blob -c $container --connection-string $connectionString

                    echo "Deleted VHD: "$blob" in container: "$container" in storage account: "$id
                else
                    echo "StorageAccountId: "$id" container: "$container" VHD: "$blob
                fi

            fi
        done
    done
done 

Langkah berikutnya

Untuk informasi selengkapnya, lihat Menghapus akun penyimpanan.