Aug 23, 2010

VMware vSphere (ESXi): There is no more space for virtual disk

El título de este artículo refleja un error que nos puede ocurrir al administrar un VMware vSphere si no tenemos en cuenta ciertos detalles relacionados con la estructura de ficheros que emplea una máquina virtual.

Concretamente el mensaje de error al que me refiero es el siguiente: msg.hbacommon.outofspace: There is no more space for virtual disk xxxxxx. You may be able to continue this session by freeing disk space on the relevant partition, and clicking Retry. Otherwise, click Abort to terminate this session.


El problema es muy sencillo: alguna de nuestras máquinas virtuales ha ido creciendo de tamaño de tal manera que se ha agotado el espacio de nuestro datastore.

Vamos a poner un ejemplo para entender el asunto: supongamos que tenemos un datastore con un tamaño de 32 GB, y dentro de él creamos una máquina virtual a la que le asignamos 2 GB de memoria RAM y un disco virtual de 16 GB (vmdk).

Ya de primeras podremos pensar que nos quedan libres 16 GB, y estaremos en lo cierto. Pero en el momento en el que arranquemos dicha máquina virtual, se creará un nuevo archivo temporal con extensión vswp (fichero de swap creado por vSphere que coincidirá en tamaño con la cantidad de memoria RAM asignada) dentro del directorio donde resida la máquina virtual. El tamaño de dicho archivo será de 2 GB, luego ya no nos quedarán 16 GB libres, sino 14 GB.

Y el tema no se acaba aquí. Si en algún momento creamos un snapshot, el fichero vmdk que alberga la máquina virtual pasará a ser de sólo lectura (se congela), y se creará un nuevo archivo vmdk donde se irán guardando los cambios (incrementales) que afecten al vmdk congelado. Por lo tanto al hacer el snapshot, nos encontramos ante un nuevo archivo que podrá ir creciendo de forma dinámica en el tiempo.


Luego si en un momento dado el snapshot de esa máquina virtual (o de otras) aumenta de tal manera que nos quedemos sin espacio libre en el datastore, la máquina virtual que crezca dinámicamente sufrirá un crash y tendremos un mensaje como el de la imagen.

Por todo esto siempre he pensado que el snapshot debe de ser una herramienta que se utilice de forma temporal, por ejemplo cuando vayamos a actualizar un sistema operativo o aplicación. Transcurrido un tiempo prudencial, deberemos eliminarlo.

El rendimiento de una máquina virtual no puede ser el mismo si se trabaja con un disco virtual estático que si se hace sobre otro que varía su tamaño de forma dinámica.

6 comments:

  1. Compadre te pasaste, buen dato, me dio este error en la consola de Kaspersky y lo solucione con tus conceptos, gracias!

    ReplyDelete
  2. Excelente explicación la que muestras en tu blog, me dio un error similar.
    Gracias por tu aporte me servira muchisimo de ahora en adelante

    ReplyDelete
  3. Hola, Podrias ayudarme?
    Usamos una ESXi con una maquina virtual de un servidor de aprendisaje SAP...
    Pero un dia fallo la fuente de energia, remplazo la fuente y el sustema no arranca.
    El equipo tiene montado un DD de 320 Gb con el sistema operativo ESXi y la maquina virtual esta en otro disco de 2T
    Pregunta. ¿Es posible que reinstale el ESXi y luego recuperar la maquina virtual. los archivos no deberian ser tocados?

    ReplyDelete
  4. Hola,

    primero recupera la VM por seguridad. Para ello arranca la máquina con un LIVE CD/USB de alguna distribución Linux, monta el disco de 2T donde tengas la VM, y haz una copia de todo el directorio asociado a la máquina virtual.

    Las máquinas virtuales se almacenan en /vmfs/volumes/datastore1/, siendo datastore1 el nombre del datastore, que en tu caso puede llamarse de otra forma.

    Una vez hayas recuperado la VM, instala de nuevo el ESXi. Los datos que haya en el datastore no deberían ser tocados, con lo que deberías encontrarte dentro de él la VM.

    Ahora sólo tendrías que desplegarla de nuevo; para ello navega dentro de tu datastore con el Datastore Browser, localiza el fichero con extensión 'vmx' de tu máquina virtual, y con el botón derecho del ratón, selecciona la opción de Add to Inventory.

    Si por cualquier casualidad la VM no estuviera (que lo dudo mucho), tendrías que copiar el directorio que rescataste a través del Live dentro del ESXi y realizar la misma operación (Add to Inventory).

    ReplyDelete
  5. Gracias todo esta funcionando Ok como antes.

    ReplyDelete
  6. tengo el mismo problema pero no se que hacer borro las archivos 0000.vmdk o el snapshot1

    ReplyDelete