Aracılığıyla paylaş


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

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ö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 LastOwnershipUpdateTime değerini almak için az disk show 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
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

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 0 olarak ayarlayarak 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 1 olarak ayarlayın. Bu eylem, tüm eklenmemiş yönetilmeyen VHD'leri silmenize olanak tanır.

# 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 

Sonraki adımlar

Daha fazla bilgi için bkz . Depolama hesabını silme.