Dela via


Hitta och ta bort ej anslutna hanterade och ohanterade Azure-diskar med hjälp av Azure CLI

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

När du tar bort en virtuell dator (VM) i Azure tas som standard inga diskar som är anslutna till den virtuella datorn bort. Den här funktioner ser till att inga data går förlorade om en virtuell dator skulle tas bort oavsiktligt. När en virtuell dator har tagits bort fortsätter du att betala för okopplade diskar. Den här artikeln visar hur du hittar och tar bort okopplade diskar och minskar onödiga kostnader.

Kommentar

Du kan använda kommandot az disk show för att hämta LastOwnershipUpdateTime för valfri disk. Den här egenskapen representerar när diskens tillstånd senast uppdaterades. För en disk som inte är uppkopplad visas den tid då disken var okopplad. Den här egenskapen är tom för nyligen skapade diskar tills deras tillstånd ändras.

Hanterade diskar: Hitta och ta bort ej anslutna diskar

Följande skript söker efter ej anslutna hanterade diskar genom att undersöka värdet för egenskapen ManagedBy . När en hanterad disk är ansluten till en virtuell dator innehåller egenskapen ManagedBy resurs-ID för den virtuella datorn. När en hanterad disk är oansluten är egenskapen ManagedBy null. Skriptet undersöker alla hanterade diskar i en Azure-prenumeration. När skriptet hittar en hanterad disk med egenskapen ManagedBy inställd på null, avgör skriptet att disken är oansluten.

Viktigt!

Kör först skriptet genom att ange variabeln deleteUnattachedDisks till 0. Med den här åtgärden kan du hitta och visa alla ej anslutna hanterade diskar.

När du har granskat alla okopplade diskar kör du skriptet igen och anger variabeln deleteUnattachedDisks till 1. Med den här åtgärden kan du ta bort alla ej anslutna hanterade diskar.

# 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

Ohanterade diskar: Hitta och ta bort ej anslutna diskar

Ohanterade diskar är VHD-filer som lagras som sidblobar i Azure Storage-konton. Följande skript söker efter ohanterade ohanterade diskar (sidblobar) genom att undersöka värdet för egenskapen LeaseStatus . När en ohanterad disk är ansluten till en virtuell dator är egenskapen LeaseStatus inställd på Låst. När en ohanterad disk inte är uppkopplad är egenskapen LeaseStatus inställd på Olåst. Skriptet undersöker alla ohanterade diskar i alla Azure Storage-konton i en Azure-prenumeration. När skriptet hittar en ohanterad disk med egenskapen LeaseStatus inställd på Olåst, avgör skriptet att disken är okopplad.

Viktigt!

Kör först skriptet genom att ange variabeln deleteUnattachedVHDs till 0. Med den här åtgärden kan du hitta och visa alla ohanterade ohanterade virtuella hårddiskar.

När du har granskat alla okopplade diskar kör du skriptet igen och anger variabeln deleteUnattachedVHDs till 1. Med den här åtgärden kan du ta bort alla ohanterade ohanterade virtuella hårddiskar.

# 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 

Nästa steg

Mer information finns i Ta bort ett lagringskonto.