Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
При удалении виртуальной машины в Azure по умолчанию все диски, подключенные к виртуальной машине, не удаляются. Это предотвращает потерю данных из-за случайного удаления виртуальной машины. После удаления виртуальной машины вы будете продолжать платить за неподключенные диски. В этой статье показано, как найти и удалить все неподключенные диски и сократить ненужные затраты.
Замечание
Используйте команду az disk show, чтобы получить LastOwnershipUpdateTime для любого диска. Это свойство показывает, когда состояние диска было обновлено в последний раз. Для неподключаемого диска это свойство показывает время, когда диск был отключен. Это свойство пусто для только что созданных дисков, пока их состояние не изменится.
Управляемые диски: поиск и удаление неподключенных дисков
Следующий скрипт ищет неподключенные управляемые диски , проверяя значение свойства ManagedBy . При присоединении управляемого диска к виртуальной машине свойство ManagedBy содержит идентификатор ресурса виртуальной машины. Если управляемый диск не подключен, свойство ManagedBy имеет значение NULL. Сценарий проверяет все управляемые диски в подписке Azure. Когда сценарий находит управляемый диск со свойством ManagedBy , установленным значение NULL, скрипт определяет, что диск не подключен.
Это важно
Сначала запустите скрипт, задав переменную deleteUnattachedDisks значение 0. Это действие позволяет найти и просмотреть все неподключенные управляемые диски.
После проверки всех неподключенных дисков запустите скрипт еще раз и установите для переменной deleteUnattachedDisks значение 1. Это действие позволяет удалить все неподключенные управляемые диски.
# 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
Неуправляемые диски: поиск и удаление неподключенных дисков
Неуправляемые диски — это VHD-файлы, хранящиеся в виде страничных BLOB-объектов в учетных записях хранения Azure. Следующий скрипт ищет неприсоединенные неуправляемые диски (страничные BLOB-объекты), проверяя значение свойства LeaseStatus. При присоединении неуправляемого диска к виртуальной машине свойство LeaseStatusзаблокировано. Если неуправляемый диск не подключен, свойство LeaseStatusразблокировано. Скрипт проверяет все неуправляемые диски во всех учетных записях хранения Azure в подписке Azure. Когда скрипт находит неуправляемый диск со свойством LeaseStatus , заданным как "Разблокированный", скрипт определяет, что диск не подключен.
Это важно
Сначала запустите скрипт, задав переменную deleteUnattachedVHDs значение 0. Это позволяет найти и просмотреть все неуправляемые виртуальные жесткие диски.
После проверки всех неподключенных дисков запустите скрипт еще раз и задайте для переменной deleteUnattachedVHDs значение 1. При этом удаляются все отсоединенные неуправляемые виртуальные жесткие диски.
# 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
Дальнейшие шаги
Дополнительные сведения см. в разделе "Удаление учетной записи хранения".