Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 24 de Julio de 2009 - Viernes
El intento de instalación de Solaris bajo máquina virtual en OVH ha sido desastroso. Mi primera opción era realizar una instalación dual, para poder aprovechar Solaris al máximo y tener el "fallback" de Linux si había problemas serios. Pero dicha instalación no ha tenido éxito, y como no tenemos acceso a la pantalla, no podemos ver la razón.
Pero OVH acaba de añadir soporte KVM real opcional a sus servidores dedicados. Si funciona correctamente, tenemos dos posibilidades:
Voy a intentar completar la segunda opción, pero para las pruebas iniciales tiraré por la primera, que es más rápida y me permite asegurarme de que tengo los drivers de todo, etc.
[root@stargate datos]# zfs get all datos/swap NAME PROPERTY VALUE SOURCE [...] datos/swap compressratio 1.58x - datos/swap reservation none default datos/swap volsize 32G - datos/swap volblocksize 8K - datos/swap checksum on default datos/swap compression on inherited from datos datos/swap refreservation 32G local [...]
Obsérverse que se puede usar compresión en el Swap, y que es bastante efectivo.
[root@stargate datos]# zfs send -Rv datos@20090616-19:46 | gzip -9c >/z-dump_disco_Solaris.gz sending from @ to datos@20090604-13:48 sending from @20090604-13:48 to datos@20090616-19:46 sending from @ to datos/ROOT@20090604-13:48 sending from @20090604-13:48 to datos/ROOT@20090616-19:46 sending from @ to datos/ROOT/solaris10u7@20090604-13:48 sending from @20090604-13:48 to datos/ROOT/solaris10u7@20090616-19:46 sending from @ to datos/ROOT/solaris10u7/var@20090604-13:48 sending from @20090604-13:48 to datos/ROOT/solaris10u7/var@20090616-19:46 sending from @ to datos/export@20090616-19:46 sending from @ to datos/export/home@20090616-19:46 sending from @ to datos/usr_local@20090609-19:36 sending from @20090609-19:36 to datos/usr_local@20090616-19:46
El fichero resultante, comprimido, mide 4.1 gigabytes.
Debido a ésto, me salto la "prueba" inicial que quería hacer e intento ir directamente al arranque dual.
Para ello debemos hacer "VBoxManage modifyvm Solaris10 --cpus 2". No hace falta reinstalar nada.
00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 10) 00:01.0 PCI bridge: Intel Corporation 82G33/G31/P35/P31 Express PCI Express Root Port (rev 10) 00:02.0 VGA compatible controller: Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 10) 00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01) 00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01) 00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01) 00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01) 00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01) 00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01) 00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1) 00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01) 00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01) 00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01) 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01) 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
Vuelvo a instalar Solaris de nuevo, preparado para utilizar la red virtualizada.
Es complicado copiar desde el Solaris 10, porque el mapeo de teclado del VRDP no es correcto y necesito caracteres a los que no puedo acceder de forma simple, pero me las acabo apañando.
Hago un "touch /a/reconfigure" y reinicio en modo normal. Parece que así arranca.
bash-3.00# zpool status pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c2d0s0 ONLINE 0 0 0 c3d0s0 ONLINE 0 0 0 errors: No known data errors bash-3.00# zpool detach rpool c3d0s0 bash-3.00# zpool status pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c2d0s0 ONLINE 0 0 0 errors: No known data errors bash-3.00# zpool create datos c3d0s0 bash-3.00# zpool status pool: datos state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM datos ONLINE 0 0 0 c3d0s0 ONLINE 0 0 0 errors: No known data errors pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c2d0s0 ONLINE 0 0 0 errors: No known data errors bash-3.00# gzcat z-dump_disco_Solaris.gz | zfs receive -Fdv datos receiving full stream of datos@20090604-13:48 into datos@20090604-13:48 received 34.6KB stream in 1 seconds (34.6KB/sec) receiving incremental stream of datos@20090616-19:46 into datos@20090616-19:46 received 16.0KB stream in 2 seconds (8.02KB/sec) receiving full stream of datos/ROOT@20090604-13:48 into datos/ROOT@20090604-13:48 received 13.6KB stream in 1 seconds (13.6KB/sec) receiving incremental stream of datos/ROOT@20090616-19:46 into datos/ROOT@20090616-19:46 received 312B stream in 1 seconds (312B/sec) receiving full stream of datos/ROOT/solaris10u7@20090604-13:48 into datos/ROOT/solaris10u7@20090604-13:48 cannot mount '/': directory is not empty
El problema es que al recibir el atributo "mountpoint" para ese "dataset", Solaris 10 (Update 7) intenta montar el "dataset", lo que falla. Si intento recrear el "pool" mientras está "exported", Solaris me dice que no existe. ¿Qué hacer?. Este problema parece estar solucionado en OpenSolaris, pero en Solaris 10 Update 7 significa que no podemos hacer un "stream" de replicación conteniendo el ZFS "root". Haría falta que el "zfs receive" no montase los "datasets", o bien poder hacer un "zfs receive" sobre un dataset exportado.
Seguramente ésto se solucionará en el futuro, pero ahora mismo estamos jodidos. ¿Qué hacer?.
El atributo "canmount" nos podría ayudar, pero no se hereda.
Una idea es descargar el código fuente de la utilidad, modificarlo para que ignore ese error, recompilarla y volver a intentarlo. De hecho no haría falta modificarla, porque viendo el código actual de OpenSolaris han añadido una opción "-u" para evitar montar los "datasets" recibidos. Pero para compilarlo necesito el compilador de Sun, que es gratuito pero que no tengo. Siempre puedo extraer el comando de OpenSolaris, ya compilado, y rezar para que funcione en Solaris 10. Además, es posible que el Kernel de Solaris 10 simplemente no acepte esta posibilidad.
Otra idea es procesar el "stream" para eliminar los puntos de montaje o poner "canmount=off" en cada "dataset". Pero ésto dista de ser trivial.
Pensando sobre el asunto, me doy cuenta de que el problema es similar a cuando enchufamos un "pool" ZFS no confiable, como un USB externo. En ese caso es posible restringirlo usando un parámetro en la importación. Veamos...
bash-3.00# zpool export datos bash-3.00# mkdir zz bash-3.00# zpool import -R/zz datos bash-3.00# gzcat z-dump_disco_Solaris.gz | zfs receive -Fdv datos receiving full stream of datos@20090604-13:48 into datos@20090604-13:48 received 34.6KB stream in 1 seconds (34.6KB/sec) receiving incremental stream of datos@20090616-19:46 into datos@20090616-19:46 received 16.0KB stream in 1 seconds (16.0KB/sec) receiving full stream of datos/ROOT@20090604-13:48 into datos/ROOT@20090604-13:48 received 13.6KB stream in 1 seconds (13.6KB/sec) receiving incremental stream of datos/ROOT@20090616-19:46 into datos/ROOT@20090616-19:46 received 312B stream in 1 seconds (312B/sec) receiving full stream of datos/ROOT/solaris10u7@20090604-13:48 into datos/ROOT/solaris10u7@20090604-13:48 cannot mount '/zz': directory is not empty
Uhmmm... Dentro de "/zz" se crea un directorio "datos" que es el "dataset" que alberga el "pool" completo. Podemos eliminarlo haciendo un "zfs set canmount=off datos". Ahora la cosa tiene mejor pinta:
bash-3.00# gzcat z-dump_disco_Solaris.gz | zfs receive -Fdv datos receiving full stream of datos@20090604-13:48 into datos@20090604-13:48 received 34.6KB stream in 2 seconds (17.3KB/sec) receiving incremental stream of datos@20090616-19:46 into datos@20090616-19:46 received 16.0KB stream in 1 seconds (16.0KB/sec) receiving full stream of datos/ROOT@20090604-13:48 into datos/ROOT@20090604-13:48 received 13.6KB stream in 1 seconds (13.6KB/sec) receiving incremental stream of datos/ROOT@20090616-19:46 into datos/ROOT@20090616-19:46 received 312B stream in 1 seconds (312B/sec) receiving full stream of datos/ROOT/solaris10u7@20090604-13:48 into datos/ROOT/solaris10u7@20090604-13:48 received 4.79GB stream in 105 seconds (46.7MB/sec) receiving incremental stream of datos/ROOT/solaris10u7@20090616-19:46 into datos/ROOT/solaris10u7@20090616-19:46 received 369MB stream in 34 seconds (10.9MB/sec) receiving full stream of datos/ROOT/solaris10u7/var@20090604-13:48 into datos/ROOT/solaris10u7/var@20090604-13:48 received 621MB stream in 33 seconds (18.8MB/sec) receiving incremental stream of datos/ROOT/solaris10u7/var@20090616-19:46 into datos/ROOT/solaris10u7/var@20090616-19:46 received 264MB stream in 20 seconds (13.2MB/sec) receiving full stream of datos/export@20090616-19:46 into datos/export@20090616-19:46 received 15.0KB stream in 1 seconds (15.0KB/sec) receiving full stream of datos/export/home@20090616-19:46 into datos/export/home@20090616-19:46 received 13.6KB stream in 1 seconds (13.6KB/sec) receiving full stream of datos/usr_local@20090609-19:36 into datos/usr_local@20090609-19:36 received 4.69GB stream in 89 seconds (53.9MB/sec) receiving incremental stream of datos/usr_local@20090616-19:46 into datos/usr_local@20090616-19:46 received 127MB stream in 12 seconds (10.6MB/sec) bash-3.00# zfs set canmount=on datos
:-(
Curiosamente, OVH reporta los errores desde esa IP, pero la IP que realiza el sondeo de verdad no es esa. Parece que hay un "nat" en medio, tal vez para no detectar problemas si alguien restringe su red a la LAN.
Lo fácil sería abrir el "PING" a todo el mundo. Pero me parece excesivo. De momento abro solo para mi LAN, mi /24.
import os, time syncs = 10000 f = open("zz","w") t = time.time() for i in xrange(syncs) : f.write("a") f.flush() os.fsync(f) print "Realizamos %d transacciones por segundo" %(syncs/(time.time()-t))
Me salen 117 transacciones por segundo, acordes con el hardware que estoy utilizando.
Tras tener la máquina en servicio durante una semana, con bastante carga de red, CPU y actividad de disco, considero que todo funciona como debe y está lista para pasar a producción.
Faltan por pulir los últimos detalles.
En esta situación el stress es importante, además de ser algo que se hace de forma tremendamente esporádica. Por lo tanto es importante reducir las posibles causas de errores, que todo sea lo más sencillo posible.
Y en este procedimiento de recuperación hay un paso delicado que, si no lo recordamos, destruirá nuestro sistema de recuperación... Cuando arrancamos la máquina virtual en el Linux, arrancaré el GRUB que, con el cambio realizado arrancará... el Linux. Así que si no somos rápidos lanzando el cliente VRDP y seleccionando "Solaris 10" en el menú de arranque... podemos encontrarnos con que hemos corrompido el Linux y, con ello, nuestras esperanzas de resolver la situación rápido.
Naturalmente ésto no lo recordaremos dentro de dos años, cuando necesitemos saberlo.
Para evitarlo, voy a dejar configurada la máquina virtual con una pequeña imagen ISO que simplemente contiene un GRUB que arranca el Solaris. De esta forma si arrancamos la máquina virtual y no somos lo bastante rápidos para entrar por VRDP enseguida, no pasará nada. Llamémoslo una pequeña inversión en tranquilidad.
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table \
-o iso-arranque-Solaris10.iso iso-arranque-Solaris10
VBoxManage modifyvm Solaris10 -dvd /root/.VirtualBox/iso-arranque-Solaris10.iso
Acabamos de evitar meter la pata dentro de 2 años, cuando necesitamos resolver una urgencia rápidamente sin recordar absolutamente todos los detalles.
Por ello, a priori, no me preocupo ni de actualizar el Linux ni de hacerle backup. No lo considero necesario, aunque es una decisión que se puede valorar de nuevo más adelante.
Pero si ocurre "algo", hay que reinstalar el GRUB de linux en el sector de arranque, tal y como he descrito en el documento anterior.
Con todo ésto, considero que la máquina está lista para entrar en producción.
La opción de KVM (teclado, video y ratón) remoto nos ha sacado del atolladores, pero hay algunos problemas:
Tras abrir una incidencia con OVH, me cambiaron el KVM. Naturalmente ese período de dos semanas lo pagas, aunque no puedas usar ni el KVM ni el ordenador al que está conectado...
Había también algunos problemas con el mapeo de teclado, que se solucionaron cuando reemplazaron el componente.
A ver si me dicen algo...
Como sólo se puede abrir un incidente simultaneo por equipo, no puedo plantear éste hasta que cierren el de arranque remoto.
Por supuesto, mientras sigues pagando...
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS