Azure
Azure: eliminar discos no utilizados
El artículo de hoy abordará Eliminar discos no utilizados y forma parte de la serie de publicaciones que ayuda a ahorrar dinero al utilizar recursos en Azure.
Una vez escuché, y desde entonces uso esta analogía, que usar recursos de la nube es similar a usar electricidad: cuanto más utilizas, más caro se vuelve. Sin embargo, también puedes ahorrar dinero si aplicas en la nube lo que actualmente haces con la electricidad
¡Desconecta lo que está en uso!
Tipos de Storage
Azure ofrece diferentes tipos de almacenamiento para distintos fines, y para almacenar discos de máquinas virtuales encontrarás discos gerenciados (managed disks) y discos no-gerenciados (unmanaged disks)
Aunque los [discos no-gerenciados] siguen siendo compatibles con Azure, la recomendación es usar discos gerenciados, ya que proporcionan alta tolerancia a fallos, mayor disponibilidad y gran escalabilidad.
¿Cómo obtengo discos que no están siendo utilizados?
Por defecto, cuando eliminas una máquina virtual, sus discos no se eliminan. Según Microsoft, esto ayuda a evitar la pérdida de datos debido a la eliminación involuntaria de VMs.
¿Cómo se facturan los discos no utilizados?
Los discos no utilizados también se facturan, porque estás usando un espacio de almacenamiento. Para evitar sorpresas, debes estar atento a estos costos.

La imagen anterior muestra el costo de un día de un disco gerenciável Standard HDD US$0.88/día (~US$26.4/mes).
IMPORTANTE: Los costos pueden variar, dependiendo del tipo de almacenamiento, nivel de almacenamiento y tipo de cuenta de almacenamiento (para discos no gerenciados)
¿Cuándo debo eliminar discos no utilizados?
Como la mayoría de estos discos provienen de máquinas virtuales eliminadas, y Microsoft dice que esto ayuda a evitar la pérdida de datos, recomiendo identificar dichos discos y determinar si ya no los necesitas, porque la eliminación es una acción permanente y no se puede deshacer.
¿Cómo identificar discos no utilizados?
Puedes verificarlo a través del Portal de Azure o usando PowerShell, y si no tienes certeza sobre Discos Gerenciados y Discos No Gerenciados, también es posible verificar ambos
Azure Portal
Powershell
Powershell Discos Gerenciados
# Source https://docs.microsoft.com/en-us/azure/virtual-machines/windows/find-unattached-disks#managed-disks-find-and-delete-unattached-disks
# 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
}
}
}
Powershell Discos No-Gerenciados
# Source https://docs.microsoft.com/en-us/azure/virtual-machines/windows/find-unattached-disks#unmanaged-disks-find-and-delete-unattached-disks
# 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
}
}
}
}
}