pcampos blogs

Posteando mis ideas para no olvidarlas

February 2010 - Artículos

Apagar Maquinas Virtuales para Compactar sus VHDs

Hola a todos

Una de las cosas entretenidas de la Virtualizacion es el manejo de los espacios disponibles, en este aspecto están los discos duros de expansión dinámica… “OJO ESTO NO ESTA RECOMENDADO EN PRODUCCION” … Estos discos tienen la capacidad de crecer dinámicamente, pero no de decrecer.

Ej: Si usted tiene un Disco Dinámico de 128 GB y realmente tiene usado de ese disco 10GB .. en el disco del Host Hyper-v Solo ocupa 10GB.

El problema principal radica cuando borramos 4GB de nuestro duro dinámico. La maquina virtual creara que tiene ahora ocupado solo 6GB (10GB-4GB) pero en el host de Hyper-v el disco sigue ocupando 10GB….

Para solucionar este problema se pueden compactar los discos con las herramientas de Hyper-v, pero hay que obviamente  apagar la maquina virtual.

Para automatizar este proceso podemos hacer un lindo script con powershell, el cual :

1)Apagara la VMs “debe tener los ICs instalados”
2)después compactara el disco
3)Después prendera la maquina

Le debemos decir la el nombre de la Vm y la ruta del VHD

$MasterVM="2003AS"
$VHDName = "D:\dataServer2008\discos\2003AD-Difl.vhd"

----------------------------------------------------------------------------------------------------------

$MasterVM="2003AS"
$Vm = Get-WmiObject -Namespace root\virtualization  -Query "Select * From Msvm_ComputerSystem Where ElementName='$MasterVM'"
$ShutdownIC = Get-WmiObject -Namespace root\virtualization  -Query "Associators of {$Vm} Where AssocClass=Msvm_SystemDevice ResultClass=Msvm_ShutdownComponent"
$ShutdownIC.InitiateShutdown("TRUE", "Need to shutdown")

while ($job.JobState -eq 3 -or $job.JobState -eq 4) 
{
    write-host "Apagando. "$job.PercentComplete "% complete" 
    start-sleep 1 
    $job=[WMI]$Result.job
}

$VHDName = "D:\dataServer2008\discos\2003AD-Difl.vhd"

$ImageManagementService = gwmi Msvm_ImageManagementService -namespace "root\virtualization"
$result = $ImageManagementService.CompactVirtualHardDisk($VHDName)
$job=[WMI]$Result.job
while ($job.JobState -eq 3 -or $job.JobState -eq 4) 
{
    write-host "Compacting. "$job.PercentComplete "% complete" 
    start-sleep 1 
    $job=[WMI]$Result.job
}
$SourceVm.RequestStateChange(2)

----------------------------------------------------------------------------------------------------------

Si alguien lo quiere mejorar, sacando un listado de todas las Vms X Host y la ruta de sus discos ….. Bienvenida sea … cuando llegue de mis vacaciones lo mejorare

 

salu2

Posted: 13/2/2010 16:48 por Pablo | con no comments
Archivado en: ,,