viernes, 6 de febrero de 2009

Como añadir un disco virtual (.vmdk) a un Linux en caliente (sin reboot)

Muchas veces he añadido un disco a una maquina virtual(VM) Linux y he reiniciado para que lo reconociese. Pues, bien, tanto Linux como Windows son capaces de reconocerlo en caliente. En el caso de Windows es algo ya muy conocido (Administrador de discos, Refrescar y formatear...).

En el caso de Linux nos puede venir bien en los momentos en los que no podemos parar dicha VM ya sea por su criticidad o precisamente porque tenemos problemas en algún disco y necesitamos hacer backup en otro que acabamos de añadir.

(Este prodecimiento es para Red Hat 4, pero la mayoría de las distros funcionan de similar manera. De hecho no difiere del procedimiento de añadir un disco en caliente (que no formase un RAID) a un Linux Físico. Además es posible que otras distros lo faciliten):

Lo primero es añadir el disco desde el VIC o como normalmente lo hagamos.
Seguidamente podemos mirar /proc/scsi/scsi y ver los devices de nuestra VM: Los datos importantes son los que nos pone en la primera linea de cada elemento que aparece.
Por ejemplo: Host: scsi0 Channel: 00 Id: 00 Lun: 00
  1. El primer numero es el numero de la controladora scsi. Ej: scsi0
  2. El segundo es el canal
  3. El tercero es ID del disco SCSI.
  4. Y finalmente esta la LUN. (Sirve para fibra o iSCSI...)

Cuando hemos añadido con el VIC un disco a nuestro Linux, nos debemos fijar en el Virtual SCSI node (ej:SCSI 0:0 es la controladora 0 ID 0, SCSI 0:1 es la controladora 0 ID 1, etc,etc ) y en la controladora SCSI que es. Con esto ya tenemos los dos primeros numeros.

El numero que suele cambiar al añadir un disco es el ID del disco SCSI (1,2,3,4,5,6...) porque generalmente nuestras VMs tienen una sola controladora SCSI.

Una vez que tenemos el dato del disco que queremos que "vea", En la VM hay que hacer:

echo "scsi add-single-device" 0 0 1 0 > /proc/scsi/scsi

(Esto corresponde a SCSI0, Cahnnel=0, ID=1,LUN=0, que es lo típico cuando añades un segundo disco. Con esto le decimos al S.O. que reconozca el disco y lo ponga a sus revoluciones preparado para usarse, aunque los discos virtuales no giran...)

El proceso para quitar un disco en caliente (mirando que no tenga ningún proceso accediendo, claro), seria con el comando:

echo "scsi remove-single-device" 0 0 1 0 > /proc/scsi/scsi

2 comentarios:

Ochoto dijo...

SuSe 10 tiene un script para facilitar la tarea en /bin/rescan-scsi-bus.sh . Basta con ejecutarlo sin argumentos para que encuentre los nuevos discos.

Es GPL así que se puede pegar por aquí si interesa.

Anónimo dijo...

Me has salvado de tener que apagar la máquina, lo tendré en cuenta para siempre!!! Mil gracias