h1

Defragmentar y hacer shrink a los vmdk’s

11/04/08

Actualizado 15/04/2008: Ahora el script también hace shrink a los vmdk’s.

Sé que me estoy poniendo un tanto pesado con el VMware pero es que llevo tres semanas nada mas que currando con ello y tuneando un poco las máquinas.

Lo que os pongo hoy es un pequeño shell script para automatizar la defragmentación de los ficheros *.vmdk. En principio tenía también que hacerles shrink pero la versión actual estable del VMware Server para Linux, la 1.0.5, no incluye esa opción. Creo que la beta 2.0 si que lo trae así que puede que lo incluya más adelante.

Para que el script también haga shrink hay que bajarse la versión beta 2 del Vmware Server, y copiar los binarios (la carpeta bin que hay dentro del tar) a una carpeta que definiremos en el script. No hace falta instalar esta versión del Vmware Server.

Hay que ejecutarlo en el host. Yo, por ejemplo, lo he metido en el crontab para que se ejecute cada viernes a las 22:00.

#!/bin/bash
#
# defvmdk.sh
# Fecha de creacion: 09-04-2008
#
# Script para defragmentar y hacer shrink a los
# ficheros vmdk de las vm's.
#
# Necesita el fichero defvmdk.cfg desde el que lee
# sobre que vm's debe actuar.
#
# Para poder hacer el shrink necesita tambien los
# binarios de la vesion 2 del Vmware Server (no
# importa que este otra version instalada).
#
###################################################

VMS=/root/bin/defvmdk.cfg
LOG=/root/bin/defvmdk-$(date '+%y-%m-%d').log
FTMP=/root/bin/defvmdk.tmp
VLOG=/tmp/vmware-root/vdiskmanager.log

#Binarios del Vmware Server:
VDIR=/root/bin/vmware/

export PATH=$VDIR:$PATH

echo  >> $LOG
echo "##################################" >> $LOG
echo "####### INICIO DEL PROCESO #######" >> $LOG
echo "##################################" >> $LOG

# Comprobamos que maquinas estan corriendo:
vmrun list > $FTMP

for VDIR in $(grep -v "#" $VMS)
do
  echo >> $LOG
  echo "#######" >> $LOG
  echo "####### Maquina: $VDIR" >> $LOG
  echo "####### Fecha:   $(date)" >> $LOG

  cd $VDIR
  if [ $(ls *.vmx | wc -l) -ne 1 ]; then
    echo >> $LOG
    echo "####### ERROR: No se encuentra el fichero vmx o hay mas de uno." >> $LOG
    continue
  fi
  VM=$(ls *vmx)

  # Paramos la VM si esta corriendo
  if [ $(grep "$VDIR" $FTMP) ]; then
    vmrun stop ./$VM nogui
  fi

  # Defragmentamos y hacemos shrink a los vmdk
  for VMDK in $(ls *.vmdk)
    do
      # Reiniciamos el log de vmware
      cp -p $VLOG "$VLOG.bk"
      > $VLOG

      # Defragmentamos el vmdk
      vmware-vdiskmanager -d $VMDK

      # Hacemos shrink
      vmware-vdiskmanager -k $VMDK

      # copiamos el VLOG
      echo "#######" >> $LOG
      echo "####### VMDK: $VMDK" >> $LOG
      echo "#######" >> $LOG
      echo >> $LOG
      cat $VLOG >> $LOG
    done

    # Dejamos la VM como estaba
    if [ $(grep "$VDIR" $FTMP) ]; then
      vmrun start ./$VM nogui
    fi
done

rm -f $FTMP

echo  >> $LOG
echo "###############################" >> $LOG
echo "####### FIN DEL PROCESO #######" >> $LOG
echo "###############################" >> $LOG

### FIN ###

Como habréis visto en los comentarios necesita un fichero de configuración muy simple en el que pondremos los directorios donde están ubicadas las máquinas virtuales sobre las que queremos actuar. El mío queda más o menos así:

# defvmdk.cfg
# Fecha de creacion: 09-04-2008
#
# Fichero de configuracion del script defvmdk.sh
# El proceso defragmentara los vmdk de las vm's
# no comentadas.
#
#################################################

/VMLocal/lab/1
/VMLocal/lab/2
#/maquina/que/no/se/defragmentara

Para los picas: no os riáis de mi código. Cada uno hace lo que puede XD

Anuncios

One comment

  1. Hola, basicamente dices que hay que hacer sobre el fichero .vmdk (el disco duro virtual):

    vmware-vdiskmanager -d loquesea.VMDK
    vmware-vdiskmanager -k loquesea.VMDK

    el resto es el script. muy bien comentado por cierto.
    Lo que faltaría sería reducir el tamaño del vmdk, que como sabeis se va engordando con el tiempo. Un tercer paso que no se como hacer con las herramientas de vmware (tampoco es que haya buscado mucho).
    Una solución sería http://mtnbike.org/blog/?p=29 ¿alguien sabe de una herramienta de vmware que reduzca el tamaño de un vmdk?



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: