VMware y la copia de máquinas virtuales

A menudo creo máquinas virtuales con VMware Server 2.X que luego al llevo a otros equipos, pero cuando voy a inciar la máquina virtual me encuentro que nunca termina de iniciar. Al consultar la consola de VMware me encuentro que VMware me está preguntando qué he hecho con esa máquina y no la iniciará hasta que responda a la pregunta.

Para evitarlo, podemos añadir al fichero .VMX las siguientes líneas:

uuid.action = "create"
msg.autoAnswer = "TRUE"

...pero ... ¿para qué vale Multipath?

Llevo ya varios posts escribiendo sobre software Multipath y acabo de caer en la cuenta... vaaleee ... ¿qué es esto del software MultiPath?, ¿para qué sirve?, ¿por qué tanto interés en documentar todo esto?. Bien, habrá que empezar por el principio.

Desde los años setenta nos han machacado con el concepto de jerarquía de memoria: La memoria cuanto más cerca de la CPU más rápida y más cara, y cuanto más lejos, más barata y más lenta. Desde entonces hemos asistido a una desenfrenada evolución de las tecnologías de almacenamiento, para acercar a la CPU más cantidad de almacenamiento, a menor coste y a mayor velocidad ... pero ... ¿por qué?... porque la información es el recurso más valioso de cualquier organización, como siempre fue y será, y ya se sabe desde hace siglos que la información es poder. Si combinamos estas ideas aparece un mercado que vende almacenamiento masivo y rápido a un precio razonable, dirigido a cubrir las necesidades de almacenamiento de cualquier organización. Estas necesidades se suelen empaquetar y distribuir en forma de discos duros, relegando las cintas magenéticas a la copia de seguridad de los primeros en el siguiente escalón de la jerarquía de memoria... pero claro, la tecnología tiene sus limitaciones y no podemos empaquetar toda la información que requiere el poder en un único disco duro: necesitamos varios discos duros con la máxima capacidad, los metemos en una caja que los contenga todos y los conectamos entre sí, superando así las limitaciones que nos impone la tecnologia y sumando la capacidad de todos ellos, y los organizamos en cajones dentro de la caja, para poder ampliar con más discos en el futuro.

Confiar toda la información de nuestra organización y el poder a una única caja de discos duros, en la que el fallo de uno de ellos pondría en peligro el resto de la información, es bastante arriesgado: Sacrifiquemos algo de capacidad a cambio de seguridad de la información y nos encontraremos con lo que se conoce por RAID, y sus distintos tipos: RAID-0, RAID-1, RAID-5 etc. RAID viene del acrónimo conjunto redundante de discos independientes, pero en inglés (Redundant Array Independient Disks) y los distintos tipos se corresponden con distintas combinaciones para repartir la información entre los discos de la caja, y ganar velocidad y/o seguridad, pero claro... ¿quién implementará esto?, ¿quien se encargará de distribuir la información entre los discos de la caja? ... está claro que necesitamos un elemento nuevo en la caja que implemente esta lógica de acceso: Este elemento lo llamaremos controladora y no deja de ser un pequeño computador dedicado a implementar estas funcionalidades. Vale, ya tenemos solucionado el problema de que falle alguno de los discos... ¿pero qué pasa si falla la controladora? ... que lo perdemos todo, nada, nada, metemos una segunda controladora y un mecanismo para detectar que si una cae entre en funcionamiento la segunda.

Como no se puede acercar todo el almacenamiento que necesitemos a la CPU, había que buscar un método para llevarle la información y se usó lo que se conocía hasta entonces que era bueno: SCSI es un estándard para la transferencia de información hacia la CPU, que se implementó en las controladoras de la caja de discos... pero claro... ¿cómo hacemos llegar los bytes del poder hasta la CPU, desde las controladoras de la caja? ... mediantes cables de red (iSCSI) o de fibra óptica (FC-ALL): Pinchamos una tarjeta de expansión especial (que llamaremos HBA) al ordenador de la que salga un cable de fibra óptica y que se conecte a la controladora. Esta tarjeta se encargará de convertir los rayos de luz en señales eléctricas SCSI y a través del bus del sistema llevar los bytes hasta la CPU. Perfecto, todo solucionado, pero ¿qué pasará si se rompe esta HBA? ... que nos quedamos sin bytes ... la solución: Poner una segunda HBA en el equipo, o vender tarjetas de expansión con doble HBA, y conectamos cada HBA a una controladora.

¿Y si queremos conectar más de un ordenador a la caja de discos? ... en ese caso necesitaremos usar un elemento intermedio que realice labores de conmutación, igual que hacemos con los switches de red, y ya podremos conectar muchos equipos a nuestra caja de discos: todos conectados a este switch especial y las controladoras también, pero claro ... ¿y si se rompe ese switch?, pues lo de siempre: nos quedamos sin información; nada, nada pongamos dos switches, y conectemos una de las HBAs y una controladora a uno de los switches y la otra HBA y la otra controladora al otro switch.

En esta pequeña historia, nos encontramos que los actores reales que fabrican cajas de discos son muchos, aunque es habitual encontrarnos:

  • EMC, que fabrica Clariion, Cellerra, Symmetrix, por nombrar alguno,
  • IBM, que fabrica DS4xxx, DS5xxx, EXPxx, v7000, etc...
  • HP, que fabrica EVA 4xxx, EVA 5xxx, EVA 6xxx, XP P9xxx, MSA, etc...

Las diferencias entre los fabricantes radican principalmente en el precio, los servicios postventa que ofrecen, y el funcionamiento técnico interno de estas cajas de discos: Unas permiten que las dos controladoras trabajen simultáneamente sobre los mismos discos, otras trabajan las dos controladoras pero no sobre los mismos discos, en otras, el almacenamiento global se gestiona como un todo sobre el que vamos haciendo particiones y asignando a los servidores, en otras solo vemos como un todo el espacio de los discos del mismo cajón, etc...

Recordemos que el objetivo de todo esto al final, se hace para conseguir ofrecer más cantidad de almacenamiento a los equipos de nuestra infraestructura, un cachito de espacio, que el sistema operativo verá como un nuevo disco duro SCSI, pero claro, se llega al mismo disco por diferentes caminos:
  1. Desde la HBA-1, al Switch-1, a la controladora-1 y de ahí al disco
  2. Desde la HBA-1, al Switch-1, a la controladora-2 y de ahí al disco
  3. Desde la HBA-2, al Switch-2, a la controladora-1 y de ahí al disco
  4. Desde la HBA-2, al Switch-2, a la controladora-2 y de ahí al disco


Esto hace que el sistema operativo vea cuatro discos, en vez de uno que en realidad son el mismo, y además, que algunos elementos están por si falla el análogo, y por tanto y dependiendo de la tecnología que use el fabricante, no se podrá acceder al disco. ¿Qué sucede entonces? ... que necesitaremos de un software especial en el sistema operativo, capaz de hablar correctamente con las controladoras y las HBAs, que sepa en qué estado están los diferentes caminos, y elija el más óptimo para acceder al disco, y si en un momento falla alguno de los elementos, dirija el tráfico de bytes por otro camino que sí que funcione correctamente.

Hace unos años, este software que llamamos de Multipath (por aquello de trabajar con múltiples caminos) lo proporcionaba el propio fabricante de cajas de discos, pero nos lo cobraba aparte, aunque eso sí, funcionaba perfecto: Si luego queríamos conectar a los switches otra caja de discos de otro fabricante, el software del primero era incompatible con el del segundo, y por supuesto, también los cobraba aparte.

Esta pequeña dictadura de los fabricantes la rompe la comunidad del software libre, desarrollando DeviceMapper Multipath, que permite controlar caminos hacia diferentes discos de diferentes cajas de discos y además evitarnos pagar una licencia extra por el uso del software: Ya pagamos por la caja, los cajones, los discos y el soporte ... ¿por qué no nos regalan ese software?, ¿por qué tenemos que pagar encima, para poder usar todos los cacharros que ya hemos tenido que pagar a la misma empresa?...

La actitud de estas empresas entonces, es dificultar el acceso a las configuraciones y a la documentación de cómo configurar correctamente DeviceMapper MultiPath con sus productos, y la comunidad del Software Libre no tiene acceso a todos estos modelos para elaborar guías de configuración.

Es gente anónima y blogs como este, que tenemos acceso a estas cajas de discos, los que nos peleamos con las cabinas de almacenamientos y las configuraciones de multipath, comprobamos que todo funciona como debe y los publicamos para que otros usuarios se encuentren este trabajo hecho y lo tengan más fácil.

Multipath en OUL 5.7 con Clariion CX3-20

Esta semana necesité configurar DeviceMapper Multipath en Oracle Unbreakable Linux 5 update 7, conectado a una SAN de EMC Clariion CX3-20.

El primer paso será crear el fichero /etc/multipah.conf con el siguiente contenido:

defaults {
user_friendly_names yes
udev_dir /dev
}

blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

devices {
device {
# Identificar la cabina (EMC Clariion)
vendor "DGC*"
product "*"

# Como comprobar si los caminos estan arriba...
path_checker emc_clariion

# Como agrupar los caminos (por prioridad)
path_grouping_policy group_by_prio

# Como obtener los IDs de los discos...
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"

# Como obtener las prioridades de los discos...
# ... podemos obtener los valores disponibles...
# rpm -ql device-mapper-multipath-libs-0.4.9-23.0.9.el5 | grep libprio | cut -c25- | cut -d'.' -f1
prio "emc"

# ..esto era en Ubuntu
# prio_callout "/sbin/mpath_prio_emc /dev/%n"

# Algoritmo para presentar io al kernel por los caminos vivos
path_selector "round-robin 0"

# Esto es casi que así, porque es lo unico que hay implementado
#features "0"
features "1 queue_if_no_path"

# Cada cuando se reintenta si el camino esta vivo (aunque
# lo que manda muchas veces el valor del firmware y nvram)
no_path_retry 300

# Esto es así para Cabinas EMC
hardware_handler "1 emc"

# Le dice al demonio como manejar los caminos caídos...
failback immediate
}
}
multipaths {
multipath {
wwid 360060160066021007ebcc08b0c38df11
alias LunDatos
}
}

...y después de guardar los cambios del fichero /etc/multipah.conf, aplicaremos la nueva configuración ejecutando...
  1. Eliminar la configuración que previa que tenía el sistema, sobre los caminos...
    multipath -F
  2. Refrescar la información de los caminos que vemos desde la SAN, con esta nueva configuración ...
    multipath -v3
  3. Comprobar el acceso a los discos, y el estado de multipath
    multipath -ll

SquasFS


En la línea de initrd, SquashFS se diseñó como un sistema de archivos genérico con compresión, para sistemas embebidos. Este sistema de archivos se ha hecho muy popular con la proliferación de LiveCDs, y se usa para almacenar el sistema Linux con todas las aplicaciones ya instalados, como si comprimiéramos el directorio raíz de un equipo ya instalado y configurado: Cuando la LiveCD! arranca e initrd lleva el kernel a memoria, monta este fichero squashFS en modo sólo lectura y se convierte en el directorio raíz del sistema, teniendo a partir de ese momento todas las aplicaciones disponibles.
Es posible que se nos despierte la curiosidad, y queramos husmear en el contenido de uno de estos archivos,

  1. Lo primero será crear un directorio temporal en el que copiar el contenido del fichero SquashFS
    cd
    mkdir squash_descomp
  2. Luego, tendremos que montar el fichero SquashFS
    mkdir /tmp/test.squash
    mount -t squashfs -o loop filesystem.squashfs /tmp/test.squash
  3. Para editar el contenido debemos copiarlo conservando permisos, en el directorio que creamos...
    rsync  -v -rlt -a /tmp/test.squash/ squash_descomp/

    umount /tmp/test.squash/
  4. En el directorio squash_descomp, quedará el contenido del fichero SquasFS y ya podremos cambiar ficheros, permisos, añadir, etc. Cuando acabemos con ello, podremos volver a convertir en un fichero SquashFS mediante
    cd squash_descomp

    rm -f ../filesystem.squashfs
    mksquashfs . ../filesystem.squashfs

Initrd (reloaded)

Los ficheros initrd(initial ramdisk) contienen un pequeño sistema con los ficheros básicos que permitan iniciar un kernel de Linux en memoria RAM al arrancar nuestro sistema. A partir de él, ya se puede montar el directorio raíz e ir cargando el resto de módulos del núcleo que configuran nuestro hardware.

Aunque ya hemos hablado aquí sobre cómo examinar el contenido de uno de estos ficheros, quería mejorar la entrada, porque no suelo usar aquel procedimiento, sino este otro que quiero contar hoy que me resulta menos litúrgico, y que he tenido que usar demasiado a menudo en los últimos meses, porque ando editando el arranque de distribuciones LiveCD como Clonezilla, Trinity Rescue, y otras tantas que finalmente no cuajan porque no me sirven.
Como ya comentamos en aquella entrada encontramos dos tipos de ficheros initrd:

  • Initrd, en kernel anteriores a 2.6.13, almacena la imagen de un sistema de ficheros (que podía venir comprimido), habitualmente ext2 (el driver ext2 debía estar incluído en el kernel y no como módulo), aunque otros como Debian usaban cramfs.Este sistema de archivos se ponía disponible al montarlo sobre un dispositivo /dev/ram, como sistema raíz inicial, para justo después ejecutar /linuxrc . Cuando este programa finalizaba, se ejecutaba /sbin/init que ya se encargaría de iniciar el espacio de usuario.Para examinar su contenido, podemos ejecuar...
    cp initrd.original  initrd.paramodificar.gz

    mkdir contenido-initrd
    gunzip initrd.paramodificar.gz
    mount -o loop initrd.paramodificar contenido-initrd
  • Initramfs, aparece a partir del kernel 2.6.13 y mejora sustancialmente a su predecesor, ya que no se tiene que montar sobre un disco virtual, y tampoco es necesario parchear el kernel para incluir el soporte básico que permite descomprimir y montar el propio initrd. En definitiva, se consigue mayor flexibilidad y facilidad para la administración.Para examinar su contenido, podemos ejecuar...
    mkdir contenido-initrd

    cd contenido-initrd
    gzip -S img -dc ../initrd | cpio -id

En cualquier caso, si ejecutamos estos comandos tendremos su contenido en el subdirectorio contenido-initrd, y podremos modificar los archivos que necesitemos con nuestro editor faVorIto. Luego podremos volver a su forma natural ejecutando...
 cd contenido-initrd
find ./ | cpio -H newc -o | gzip -c > ../initrd

si se trata de un fichero initramfs, y si fuera un initrd, tendremos que desmontar y volver a comprimir...
cd
umount contenido-initrd
cat initrd.paramodificar | gzip -c > initrd

Despedida de LinEX

La semana pasada supimos que la Junta de Extramdura había decidido no renovar los contratos al personal del Centro de Excelencia de Software José de Espronceda, organismo encargado del desarrollo de LinEX. En el foro oficial podemos escribir nuestras condolencias. Según el propio gobierno autonómico, la decisión se fundamenta en la insostenibilidad del proyecto y la necesidad de ahorrar en estos tiempos de crisis económica.
Este anuncio llena de incertidumbre el futuro de la apuesta más importante de una administración pública española por el uso de software libre, que además fue un referente a nivel mundial y nacional, y sentó las bases para el nacimiento del resto de distribuciones autonómicas: Guadalinex, Molinux, Lliurex, Max, y otras cuantas más.
A mi juicio el experimento ha sido un éxito rotundo, pero no dejan de preocuparme las causas reales que se esconden tras esta decisión:

  1. ¿se está tratando de borrar el rastro de una gestión exisitosa del anterior gobierno autonómico de signo político contrario al actual?
  2. ¿se quiere apostar ahora por software privativo, que no impute coste de desarrollo e implantación a corto plazo?
  3. ¿existe presión por parte de alguna de las grandes compañías de software, dispuestas a regalar licencias a la administración pública regional, a cambio de desprestigiar diez años de éxito del software libre?
La comunidad española del software libre, tenemos muchísimo que agradecer al proyecto LinEX, por las numerosas contribuciones a la comunidad, la formación y difusión que han realizado del Software Libre en foros técnicos y no técnicos, y la experiencia del contacto con la política: Nos han mostrado un camino de cómo pueden relacionarse Software Libre y Política y con ello,
  • generar riqueza local con la aparición de nuevas empresas que ofrezcan soporte y formación
  • tener software compatible e interoperable que se ajusta a nuestras necesidades y realidad local
  • lograr independencia tecnológica de compañías multinacionales extranjeras
  • garantizar el acceso universal a la información y la no discriminación
... pero también nos han enseñado, como la política puede estropearlo todo:
  1. ... fomentando los localismos que ayudan a resaltar nuestras diferencias, en vez de nuestras semejanzas,
  2. ... multiplicando los costes por hacer lo mismo desde diferentes lugares, y coaccionando la cooperación para justificar la inversión,
  3. ... bloqueando acomplejadamente la participación y el retorno a la comunidad para proteger la inversión
  4. ... manchando de color político algo incoloro como la tecnología, para que los ciudadanos sean capaces se asociarles un partido político y canalizar sus disconformidades como una forma mediática de oposición
No debemos dejar de reconocer el importantísimo papel de las administraciones públicas y de la política, como catalizador para que las empresas locales, empiecen a generar riqueza en torno al software libre: Europa ya no puede competir con EEUU en cuanto software. Dependemos de Novell, Google, Oracle, Microsoft, IBM... Somos tecnológicamente dependientes de EEUU. La única forma de alcanzar independencia tecnológica en informática y ser competitivos, es a través del software libre.... pero ... ¿cómo pueden las administraciones públicas contribuir a ello, ante noticias como la que estamos comentando?
  • Legislar para conseguir la independencia tecnológica. Obligar que las soluciones al ciudadano no les obliguen a tener determinado software de acceso restringido.
  • Pagar por implantaciones basadas en software libre y formación, sin contratar nuevos funcionarios ni la constitución de más entes públicos que se encarguen de ello, es labor de las empresas locales.
  • Obligar que las empresan que ganan los concursos públicos realicen trabajos basados en software libre, lo liberaren y contribuyan con la comunidad.
La mejor de las suertes para el equipo de LinEX y mis más sinceros agradecimientos.

FreeSSHd: Un servidor SSH para Windows

A menudo nos encontramos con la necesidad de poder conectar con un servidor Windows, desde otro equipo, en las mismas condiciones que cuando lo hacemos entre servidores Linux usando SSH.

Normalmente esta necesidad podíamos cubrirla usando CygWin, pero nunca me ha terminado de convencer porque al final terminábamos convirtiendo nuestro servidor Windows en un servidor Linux al que le faltaban bastantes cosas, además del inconveniente de la doble gestión de cuentas de usuario, el lío con las barras separadoras de directorios ("/" y "\") según el comando que ejecutáramos, y por supuesto, el hecho de que muchos comandos no están al nivel de implementación de Linux y les faltan opciones... todo esto siempre me causó la impresión de que no estaba usando ni un Linux, ni un Windows, sino un refrito que funciona a medias. Nunca consideré CygWin como una opción seria para servidores en producción.

Afortunadamente, disponemos de alternativas libres para ello como FreeSSHd. Este es un simple servidor SSH y Telnet para equipos Windows, y permite hacer esto que reclamo: Instalarnos un servicio que escucha conexiones por el puerto 22 y/o 23 y al autenticarnos nos abre una consola del intérprete de comandos de Windows. Luego usaremos los mismos comandos que usaríamos frente a una ventana.

La instalación es bastante sencilla, y no ofrece ninguna complicación. Una vez lo hayamos instalado, tendremos que editar la configuración del servidor, y configurar qué puertos queremos escuchar: SSH y/o Telnet.


Además, debemos indicarle qué usuarios del equipo Windows le permitimos la conexión y con qué opciones.

Una vez realizada esta configuración básica, reiniciaremos el servicio, y ya podremos conectar mediante SSH como si se tratara de un servidor Linux. Observar que al conectar la consola no se limpia y el prompt de Windows se nos va al inicio del terminal sobreescribiendo lo que tuviéramos.

Para crear confianzas SSH mediante clave pública, tendremos que añadir las claves públicas, igual que hacemos con el fichero authorized_keys en Linux, pero al fichero %PROGRAMFILES%\FreeSSHd\LOGIN_USUARIO. El servicio va escribiendo un log en %PROGRAMFILES%\FreeSSHd\freesshd.log.

Una maravilla la verdad, simple y directo. El único inconveniente que le veo a este programa es que tendremos que usar SFTP desde Linux para poder copiar ficheros al equipo Windows: El comando SCP no nos funcionará :(.