Delen via


Niet-gekoppelde beheerde en niet-beheerde Azure-schijven zoeken en verwijderen met behulp van de Azure CLI

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

Wanneer u een virtuele machine (VM) in Azure verwijdert, worden alle schijven die aan de virtuele machine zijn gekoppeld, standaard niet verwijderd. Deze functie helpt gegevensverlies te voorkomen door het onbedoeld verwijderen van VM's. Nadat een virtuele machine is verwijderd, blijft u betalen voor niet-gekoppelde schijven. In dit artikel leest u hoe u niet-gekoppelde schijven kunt zoeken en verwijderen en onnodige kosten kunt verlagen.

Notitie

U kunt de opdracht az disk show gebruiken om de LastOwnershipUpdateTime voor elke schijf op te halen. Deze eigenschap geeft aan wanneer de status van de schijf voor het laatst is bijgewerkt. Voor een niet-gekoppelde schijf wordt de tijd weergegeven waarop de schijf niet is gekoppeld. Deze eigenschap is leeg voor nieuw gemaakte schijven, totdat de status wordt gewijzigd.

Beheerde schijven: niet-gekoppelde schijven zoeken en verwijderen

Het volgende script zoekt naar niet-gekoppelde beheerde schijven door de waarde van de eigenschap ManagedBy te onderzoeken. Wanneer een beheerde schijf is gekoppeld aan een virtuele machine, bevat de eigenschap ManagedBy de resource-id van de virtuele machine. Wanneer een beheerde schijf niet is gekoppeld, is de eigenschap ManagedBy null. Het script onderzoekt alle beheerde schijven in een Azure-abonnement. Wanneer het script een beheerde schijf zoekt waarvoor de eigenschap ManagedBy is ingesteld op null, bepaalt het script dat de schijf niet is gekoppeld.

Belangrijk

Voer eerst het script uit door de variabele deleteUnattachedDisks in te stellen op 0. Met deze actie kunt u alle niet-gekoppelde beheerde schijven zoeken en weergeven.

Nadat u alle niet-gekoppelde schijven hebt bekeken, voert u het script opnieuw uit en stelt u de variabele deleteUnattachedDisks in op 1. Met deze actie kunt u alle niet-gekoppelde beheerde schijven verwijderen.

# 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

Niet-beheerde schijven: niet-gekoppelde schijven zoeken en verwijderen

Niet-beheerde schijven zijn VHD-bestanden die zijn opgeslagen als pagina-blobs in Azure-opslagaccounts. Het volgende script zoekt naar niet-gekoppelde niet-beheerde schijven (pagina-blobs) door de waarde van de eigenschap LeaseStatus te onderzoeken. Wanneer een niet-beheerde schijf is gekoppeld aan een virtuele machine, wordt de eigenschap LeaseStatus ingesteld op Vergrendeld. Wanneer een niet-beheerde schijf niet is gekoppeld, wordt de eigenschap LeaseStatus ingesteld op Ontgrendeld. Het script onderzoekt alle niet-beheerde schijven in alle Azure-opslagaccounts in een Azure-abonnement. Wanneer het script een niet-beheerde schijf zoekt met de eigenschap LeaseStatus ingesteld op Ontgrendeld, bepaalt het script dat de schijf niet is gekoppeld.

Belangrijk

Voer eerst het script uit door de variabele deleteUnattachedVHD's in te stellen op 0. Met deze actie kunt u alle niet-beheerde VHD's zoeken en weergeven.

Nadat u alle niet-gekoppelde schijven hebt bekeken, voert u het script opnieuw uit en stelt u de variabele deleteUnattachedVHD's in op 1. Met deze actie kunt u alle niet-beheerde niet-beheerde VHD's verwijderen.

# 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 

Volgende stappen

Zie Een opslagaccount verwijderen voor meer informatie.