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.