Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Гибкие группы масштабирования ✔️ Унифицированные группы масштабирования
При удалении виртуальной машины в Azure по умолчанию все диски, подключенные к виртуальной машине, не удаляются. Это предотвращает потерю данных из-за случайного удаления виртуальной машины. После удаления виртуальной машины вы будете продолжать платить за неподключенные диски. В этой статье показано, как найти и удалить все неподключенные диски и сократить ненужные затраты.
Примечание.
Для получения LastOwnershipUpdateTime любого диска можно использовать команду Get-AzureDisk. Это свойство представляет собой время последнего обновления состояния диска. Для неподключаемого диска это время, когда диск был отключен. Это свойство пусто для только что созданных дисков, пока их состояние не изменится.
Управляемые диски: поиск и удаление неподключенных дисков
Следующий скрипт ищет неподключенные управляемые диски , проверяя значение свойства 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
$managedDisks = Get-AzDisk
foreach ($md in $managedDisks) {
# ManagedBy property stores the Id of the VM to which Managed Disk is attached to
# If ManagedBy property is $null then it means that the Managed Disk is not attached to a VM
if($md.ManagedBy -eq $null){
if($deleteUnattachedDisks -eq 1){
Write-Host "Deleting unattached Managed Disk with Id: $($md.Id)"
$md | Remove-AzDisk -Force
Write-Host "Deleted unattached Managed Disk with Id: $($md.Id) "
}else{
$md.Id
}
}
}
Неуправляемые диски: поиск и удаление неподключенных дисков
Неуправляемые диски — это VHD-файлы, хранящиеся в виде страничных BLOB-объектов в учетных записях хранения Azure. Следующий скрипт ищет несвязанные неуправляемые диски (страничные блобы), проверяя значение свойства LeaseStatus. Если неуправляемый диск подключен к виртуальной машине, свойство LeaseStatus имеет значение Locked. Если неуправляемый диск не подключен, свойство LeaseStatus имеет значение "Разблокировать". Сценарий проверяет все неуправляемые диски во всех учетных записях хранения Azure в подписке Azure. Когда скрипт находит неуправляемый диск со свойством LeaseStatus , установленным в " Разблокировано", сценарий определяет, что диск не подключен.
Это важно
Сначала запустите скрипт, установив переменной deleteUnattachedVHDs значение $false. Это действие позволяет находить и просматривать все отсоединенные неуправляемые VHD.
После просмотра всех неподключенных дисков запустите скрипт еще раз и задайте для переменной $truedeleteUnattachedVHDs значение . Это действие позволяет удалить все незакрепленные неуправляемые виртуальные жесткие диски.
# Set deleteUnattachedVHDs=$true if you want to delete unattached VHDs
# Set deleteUnattachedVHDs=$false if you want to see the Uri of the unattached VHDs
$deleteUnattachedVHDs=$false
$storageAccounts = Get-AzStorageAccount
foreach($storageAccount in $storageAccounts){
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.StorageAccountName)[0].Value
$context = New-AzStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey $storageKey
$containers = Get-AzStorageContainer -Context $context
foreach($container in $containers){
$blobs = Get-AzStorageBlob -Container $container.Name -Context $context
#Fetch all the Page blobs with extension .vhd as only Page blobs can be attached as disk to Azure VMs
$blobs | Where-Object {$_.BlobType -eq 'PageBlob' -and $_.Name.EndsWith('.vhd')} | ForEach-Object {
#If a Page blob is not attached as disk then LeaseStatus will be unlocked
if($_.ICloudBlob.Properties.LeaseStatus -eq 'Unlocked'){
if($deleteUnattachedVHDs){
Write-Host "Deleting unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
$_ | Remove-AzStorageBlob -Force
Write-Host "Deleted unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
}
else{
$_.ICloudBlob.Uri.AbsoluteUri
}
}
}
}
}
Дальнейшие действия
Дополнительные сведения см. в статье "Удаление учетной записи хранения " и "Определение потерянных дисков" с помощью PowerShell