Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Ú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.
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 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.
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:
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.
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":
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.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS