Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Actualización de Solaris 10 con "Live Upgrade"

Última Actualización: 13 de diciembre de 2006 - Miércoles

"Live Upgrade" es una característica de los sistemas Solaris recientes que permite actualizar un sistema operativo completo mientras está funcionando. La actualización se realiza en una partición separada, por lo que no afecta en absoluto al sistema en producción. Una vez completada la actualización, reiniciamos la máquina y podremos elegir entre la versión anterior del sistema operativo, y la versión actualizada del mismo. Si la versión actualizada nos da cualquier tipo de problema, podemos volver a la versión anterior sin más que reiniciar la máquina de nuevo y elegir el otro entorno.

Dado que ambas versiones del sistema operativo residen en particiones separadas, no existe interferencia entre ellas y podemos saltar de una a otra con un simple reinicio.

De esta forma, actualizar un sistema Solaris supone un corte de servicio de un par de minutos (lo que tarde en reiniciar la máquina) y no las dos horas necesarias para hacer una actualización tradicional. Además, tenemos la seguridad de regresar a la versión anterior si surge cualquier tipo de problema.

En este documento describo mi experiencia actualizando mis entornos Solaris de la versión 10 1/06 (enero 2006) a la versión 10 6/06 (junio 2006).

Con posterioridad se hizo una actualización de Solaris version 10 6/06 a Solaris version 10 11/06.

Antecedentes

Para poder utilizar "Live Upgrade" es necesario disponer de al menos una partición libre en el disco duro, de capacidad suficiente para contener la actualización. También necesitamos haber particionado el disco duro de forma que el sistema operativo esté separado de las aplicaciones, servicios y datos que existan en esa máquina. Por ejemplo:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md/dsk/d5         3100663   2589307    449343  86% /
/dev/md/dsk/d3016       481199    298905    134175  70% /usr/openwin
/dev/md/dsk/d3017       190575    114678     56840  67% /usr/dt
/dev/md/dsk/d3002        95279      1397     84355   2% /export/home
/dev/md/dsk/d3018       337071    216940     86424  72% /usr/jdk
/dev/md/dsk/d3001      1082287    944463     72887  93% /usr/local
/dev/md/dsk/d3019      1786711   1390808    342302  81% /opt/sfw
/dev/md/dsk/d3020       674159    460885    152600  76% /usr/sfw
/dev/md/dsk/d3021       674159    561784     51701  92% /usr/staroffice7
/dev/md/dsk/d3009      4129902    184727   3903876   5% /opt/mailman
/dev/md/dsk/d3012       986735    157632    769899  17% /opt/mysql
/dev/md/dsk/d3014      1973487    804225   1050853  44% /var/correo_electronico
/dev/md/dsk/d3011      1489647    909234    520828  64% /opt/mailman/archives
/dev/md/dsk/d3013        30383      1398     25947   6% /export/home/web/cliente1
/dev/md/dsk/d3010       481199    216009    217071  50% /usr/local/apache2/logs
/dev/md/dsk/d3015       986735    495505    432026  54% /export/home/web/cliente2

En este ejemplo, las particiones "/", "/usr/openwin", "/usr/dt", "/usr/jdk", "/opt/sfw", "/usr/sfw" y "/usr/staroffice7" conforman el sistema operativo que me interesa clonar. Esas particiones serás actualizadas mediante "Live Upgrade", y la actualización se mantiene separada e independiente del sistema en funcionamiento actualmente. En cambio las particiones "/export/home", "/usr/local", "/opt/mailman", "/opt/mysql", "/var/correo_electronico", "/opt/mailman/archives", "/export/home/web/cliente1", "/usr/local/apache2/logs" y "/export/home/web/cliente2" constituyen mis datos personales en esa máquina. No se actualizan y esas particiones se compartirán entre las dos versiones del sistema operativo.

"Live Upgrade" permite también fusionar y separar particiones del sistema operativo, a nuestro antojo, durante la actualización. Recomiendo leer la documentación al respecto en la web de Sun.

Recomiendo copiar el DVD de Solaris en el disco duro de la máquina, ya que la actualización será mucho más rápida que si se realiza directamente desde el DVD. En mi caso tengo 36 gigabytes de espacio en "/tmp", así que lo copio ahí.

Por último, es muy conveniente tener nuestro sistema operativo bien actualizado, prestando especial atención a cualquier parche adicional presente en el DVD del nuevo Solaris.

El proceso

El primer paso consiste en preparar las nuevas particiones. A la hora de decidir su tamaño, podemos tomar como referencia el tamaño ocupado en las actuales, dejando siempre un margen de seguridad. Si nos quedamos cortos, no pasa nada, ya que la actualización fallará con un error, sin más consecuencias. Si es así, simplemente redimensionaremos las particiones problemáticas y volveremos a empezar de nuevo. Recuerda que la actualización se mantiene separada del sistema operativo actual, así que cualquier error o problema no afectará al buen funcionamiento del equipo en producción. Simplemente nos hará perder el tiempo :-p

La partición "root" debe ser una partición física de disco o un volumen lógico en RAID 1 ("mirror") que ocupe dos particiones enteras. Esto es necesario porque la partición "root" debe ser accesible desde el gestor de arranque (típicamente "grub"), y éste no soportará virguerías como RAID 5 o particiones virtuales y demás maravillas disponibles en Solaris. Por lo tanto, necesitaremos una o dos (si se usa "mirror") particiones físicas libres en el disco duro, de tamaño suficiente. Dependiendo de cómo se haya particionado en su día, esto puede ser muy fácil o muy difícil. En mi caso, cuando instalé Solaris originariamente tenía ya "Live Upgrade" en mente, así que deje hueco. En sistemas con varias particiones controladas mediante el gestor de volúmenes de Solaris, probablemente podamos mover los datos en el disco duro (con el sistema en producción :-) para dejar hueco. Es de esperar que futuras actualizaciones de Solaris permitan actualizar sobre ZFS, eliminando todos estos problemas; pero esto es una bella utopía aún.

En mi caso, como he dicho, mi nueva partición de arranque será una volumen en RAID 1, ocupando exactamente dos particiones físicas en dos discos duros separados. Para ello hago:

# metainit d51 1 1 c1d0s5 (creación del volumen en el disco duro 1)
# metainit d52 1 1 c2d0s5 (creación del volumen en el disco duro 2)
# metainit d5 -m d51 (creación del volumen "mirror", con un solo disco)
# metattach d5 d52 (añadimos el segundo disco duro. Habrá un proceso de "remirroring")

El resto de particiones del sistema a crear no son tan delicadas, pudiendo utilizar cualquier formato de disco legible por Solaris. En mi caso utilizo particiones virtuales ("soft partitions") creadas sobre un volumen "mirror" ("d3") de capacidad suficiente:

# metainit d3022 -p d3 500M (creación de una partición virtual que contendrá "/usr/openwin")

El tamaño de cada partición virtual será similar al que ocupa en el sistema actual. Si nos quedamos cortos, ampliar una partición virtual es trivial ("metattach" y, si es preciso, "growfs").

Una vez creadas todas las particiones que contendrán la nueva versión del sistema operativo, "clonamos" el sistema actual sobre ellas:

# lucreate -n Solaris10u2 -m /:/dev/md/dsk/d5:ufs \
  -m /usr/openwin:/dev/md/dsk/d3022:ufs \
  -m...

Añadimos tantos parámetros "-m" como particiones de sistema tengamos (en mi caso, siete), indicando la fuente original, el destino y el formato. Como el ejemplo.

El proceso de clonación lleva un buen rato. En mi caso unos 54 minutos, aproximadamente. Una vez completado, tendremos dos sistemas operativos iguales en el disco duro. Por supuesto, durante todo este tiempo la máquina ha estado trabajando con normalidad.

El siguiente paso consiste en actualizar el nuevo clon. Para ello lo primero es montar el nuevo "root" en algún lugar (por ejemplo, "/mnt") y editar su fichero "etc/vfstab" para que haga referencia a las nuevas particiones que contienen el nuevo sistema operativo. En mi opinión necesitar tocar esto es un "bug" de "Live Upgrade", que espero subsanen en el futuro. Seguidamente desmontamos la susodicha partición.

A continuación hacemos:

# luupgrade -n Solaris10u2 -u -s /tmp/Solaris10u2

En mi caso, en "/tmp/Solaris10u2" tengo una copia del DVD de Solaris10u2 (6/06), para que la actualización sea más rápida. La actualización me lleva aproximadamente unos 54 minutos también. Como antes, durante este tiempo la máquina funciona con normalidad. Si somos curiosos, podemos hacer un "df -k" para observar como se han montado (en un directorio temporal creado de forma automática) las nuevas particiones virtuales y cómo se van actualizando.

Cuando hayamos terminado el proceso, tendremos en el disco duro dos sistemas operativos: el actual, que está en funcionamiento, y el sistema actualizado.

Ya solo queda cruzar los dedos y probar el sistema nuevo:

# luactivate Solaris10u2

Tras este comando, el nuevo sistema entrará en funcionamiento en cuanto reiniciemos la máquina con el "init 6" de toda la vida.

Problemas

Utilizar "Live Upgrade" es tan fácil como parece, aunque recomiendo encarecidamente leer la documentación oficial de Sun al respecto, bastante completa y útil.

Durante mi primer experimento con "Live Upgrade" solo tuve dos problemas, uno leve y el otro más grave y molesto:

  1. Intentando ahorrar espacio es bastante fácil quedarse corto en alguna partición. Si es así, "Live Upgrade" nos indicará que la actualización es parcial, y podemos revisar el log para comprobar qué partición ha sido la responsable. Si se trata de una partición virtual, podemos utilizar el comando "metattach" para darle algo más de espacio y volver a probar. Si el problema está en la partición raíz, lo tenemos más crudo. Las dos opciones más sencillas son utilizar otra partición como raíz, o bien aprovechar la funcionalidad de dividir particiones al vuelo de "lucreate" para mover algunos datos a una nueva partición virtual.

    En cualquier caso, recomiendo que se inicie el proceso desde el principio, aunque lo que haya fallado sea el último paso. Es decir, empezar por el "lucreate", y curarnos en salud, aunque la actualización tarde más. Mejor lento y seguro.

    Es de esperar que este problema desaparezca cuando se pueda hacer "Live Upgrade" sobre ZFS.

  2. "Live Upgrade" utiliza la utilidad "biosdev" para determinar el disco de arranque, y hay que decir que es un desastre. Dicha utilidad falla muchísimo, incluso sobre hardware Sun oficial. En fin.

    El problema está documentado y es de esperar que lo solucionen en un plazo "razonable".

    Mientras esperamos un parche oficial la vida sigue, así que nos buscamos un "apaño":

    • Ejecutamos "eeprom". Nos quedamos con el campo "bootpath".

    • Ejecutamos "biosdev -v". Nos quedamos con la primera linea que empieza por "0x80". Muy posiblemente sea igual al punto anterior. Renombramos "biosdev" y sustituimos el programa original por una linea shell "echo", dando la linea "0x80" anterior.

      Una vez que completamos la actualización dejamos el programa "biosdev" como estaba, tanto en el sistema original como en la versión actualizada. En este último caso hay que tener en cuenta que la actualización puede haber reemplazado el "biosdev" original. Si es así, por supuesto, conservamos la versión actualizada.


Historia

  • 13/dic/06: Añadimos enlaces a la actualización de Solaris 10 Update 2 a Solaris 10 Update 3.

  • 19/jul/06: Primera versión de esta página.



Python Zope ©2006 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS