Vyhledání a odstranění nepřipojených spravovaných a nespravovaných disků Azure pomocí Azure CLI
Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️
Když odstraníte virtuální počítač v Azure, ve výchozím nastavení se neodstraní všechny disky připojené k virtuálnímu počítači. Tato funkce pomáhá předcházet ztrátě dat v důsledku neúmyslného odstranění virtuálních počítačů. Po odstranění virtuálního počítače budete dál platit za nepřipojené disky. V tomto článku se dozvíte, jak najít a odstranit všechny nepřipojené disky a snížit zbytečné náklady.
Poznámka:
Příkazem az disk show můžete získat LastOwnershipUpdateTime pro libovolný disk. Tato vlastnost představuje, kdy byl stav disku naposledy aktualizován. U nepřipojeného disku se zobrazí čas, kdy byl disk nepřipojený. Tato vlastnost je prázdná pro nově vytvořené disky, dokud se nezmění jejich stav.
Spravované disky: Vyhledání a odstranění nepřipojených disků
Následující skript vyhledá nepřipojené spravované disky prozkoumáním hodnoty vlastnosti ManagedBy . Pokud je spravovaný disk připojený k virtuálnímu počítači, vlastnost ManagedBy obsahuje ID prostředku virtuálního počítače. Pokud není spravovaný disk nepřipojený, má vlastnost ManagedBy hodnotu null. Skript prozkoumá všechny spravované disky v předplatném Azure. Když skript vyhledá spravovaný disk s vlastností ManagedBy nastavenou na hodnotu null, skript určí, že disk není nepřipojený.
Důležité
Nejprve spusťte skript nastavením proměnné deleteUnattachedDisks na hodnotu 0. Tato akce umožňuje najít a zobrazit všechny nepřipojené spravované disky.
Po kontrole všech nepřipojených disků znovu spusťte skript a nastavte proměnnou deleteUnattachedDisks na hodnotu 1. Tato akce umožňuje odstranit všechny nepřipojené spravované disky.
# 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
Nespravované disky: Vyhledání a odstranění nepřipojených disků
Nespravované disky jsou soubory VHD uložené jako objekty blob stránky v účtech úložiště Azure. Následující skript hledá nepřipojené nespravované disky (objekty blob stránky) prozkoumáním hodnoty LeaseStatus vlastnost. Pokud je nespravovaný disk připojený k virtuálnímu počítači, vlastnost LeaseStatus je nastavena na Uzamčeno. Pokud není nespravovaný disk nepřipojený, vlastnost LeaseStatus je nastavena na Unlocked. Skript prozkoumá všechny nespravované disky ve všech účtech úložiště Azure v předplatném Azure. Když skript vyhledá nespravovaný disk s vlastností LeaseStatus nastavenou na Unlocked, skript určí, že disk není nepřipojený.
Důležité
Nejprve spusťte skript nastavením proměnné deleteUnattachedVHD na hodnotu 0. Tato akce umožňuje najít a zobrazit všechny nepřipojené nespravované virtuální pevné disky.
Po kontrole všech nepřipojených disků znovu spusťte skript a nastavte proměnnou deleteUnattachedVHD na hodnotu 1. Tato akce umožňuje odstranit všechna nepřipojená nespravovaná virtuální pevné disky.
# 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
Další kroky
Další informace najdete v tématu Odstranění účtu úložiště.