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

Eliminación de un BE (Boot Environment) creado por "Live Upgrade"

Última Actualización: 12 de diciembre de 2006 - Martes

Tras haber creado un nuevo BE (Boot Environment) y probarlo a fondo durante unos días, podemos liberar espacio eliminando el BE antiguo que ya no estamos usando. Hay que tener en cuenta, no obstante, que necesitaremos espacio de nuevo cuando vayamos a hacer un nuevo "Live Upgrade".

A continuación describo paso a paso los pasos para eliminar un BE Solaris 10 1/06 tras haber puesto en producción un BE Solaris 10 6/06.

Antecedentes

Mis máquinas contienen dos BE: Un Solaris 10 1/06 y un Solaris 10 6/06. Tras haber probado a fondo durante dos semanas el entorno actualizado, me decido a eliminar BE antiguo.

Normalmente mantendría el BE antiguo hasta que necesitase eliminarlo para instalar uno nuevo. Pero dado que voy a empezar a utilizar ZFS en producción, y que la versión 1/06 de Solaris 10 no soporta dicho formato y no podría reiniciar la máquina con él (en cuanto migre cosas a ZFS), mantener ese BE no me aporta ninguna ventaja.

El proceso

El primer paso es localizar el BE que queremos dar de baja:

# lustatus
Boot Environment           Is       Active Active    Can    Copy
Name                       Complete Now    On Reboot Delete Status
-------------------------- -------- ------ --------- ------ ----------
Solaris101                 yes      no     no        yes    -
Solaris10u2                yes      yes    yes       no     -

En nuestro caso queremos eliminar "Solaris101" (en realidad debería llamarse "Solaris10u2", pero cometí un error mecanográfico al crearlo };-) ). Antes de eliminarlo es conveniente montar de nuevo sus datos bajo el BE actual, para revisar si queremos conservar algo. Conservar cosas como el menú de GRUB es interesante, por lo que pudiera pasar. El programa nos indica claramente que podemos eliminar ese BE, aunque luego veremos que no es tan fácil :-).

# lumount Solaris101
/.alt.Solaris101

# df -k
[...]
/dev/md/dsk/d0         9621460   2466391   7058855  26% /.alt.Solaris101
/dev/md/dsk/d3006       333487    297773      2366 100% /.alt.Solaris101/usr/openwin
/dev/md/dsk/d3007       137839    114706      9350  93% /.alt.Solaris101/usr/dt
/dev/md/dsk/d3008       211567    177939     12472  94% /.alt.Solaris101/usr/jdk
/dev/md/dsk/d3003      1591775   1390608    137496  92% /.alt.Solaris101/opt/sfw
/dev/md/dsk/d3004       578991    445795     75297  86% /.alt.Solaris101/usr/sfw
/dev/md/dsk/d3005       639279    561816     13536  98% /.alt.Solaris101/usr/staroffice7

Primero montamos las particiones de BE a eliminar, recuperando la información que nos interese (si hay algo que nos interese, que no debiera). Tomamos nota de las particiones virtuales ("soft partitions") exclusivas de este BE, para devolverlas al "pool" tras eliminar el BE. Una vez hecho eso, demontamos las particiones del BE e intentamos eliminarlo:

# luumount Solaris101

# ludelete Solaris101
ERROR: The boot environment <Solaris101> contains the GRUB menu.
ERROR: You are not allowed to delete this BE.
Unable to delete boot environment.

¿Qué ha pasado?. Pues que el gestor de arranque (GRUB) busca la descripción del arranque en ese BE (aunque el BE activo actual sea otro), de forma que no podemos eliminarlo sin más. Primero tendremos que mover esa información crítica a otro sitio. Es de esperar que futuras revisiones de la tecnología "Live Upgrade" sean capaces de realizar esta tarea de forma segura y automática. No hay que olvidar que el entorno de arranque GRUB apareció en Solaris 10 1/06, que solo tiene seis meses de antigüedad. De hecho esta funcionalidad ya está disponible en versiones recientes de Solaris Express, con el identificador CR 6341350.

Mientras tanto, tendremos que hacerlo a mano

ATENCIÓN: Los pasos que siguen son delicados. No me hago responsable de pérdida de información, destrucción del sistema informático o la creación espontánea de un agujero negro por seguir estas instrucciones. ¡¡Haz una copia de seguridad completa del equipo y VERIFÍCALA antes de seguir!!.

El primer paso será mover el menú GRUB actual al BE que vamos a dejar funcionando. Para ello se puede hacer uso del comando "lumount" que acabamos de ver. El menú GRUB reside en "/boot/grub/menu.lst". Tomamos el menú GRUB del BE que vamos a retirar y lo movemos al BE activo actual, en la misma posición. De paso podemos hacer una copia de seguridad. Es muy importante mover el menú, no copiarlo simplemente, porque "ludelete" fallará si existe un menú GRUB en el BE a eliminar. Por tanto, debemos mover el fichero o copiarlo y luego borrar el original.

A continuación debemos indicar al sistema dónde se encuentra el nuevo menú GRUB. En mi caso el path es "/dev/md/dsk/d5". Así que editamos el fichero "/etc/lu/GRUB_slice", indicando la partición física y lógica donde se encuentra el menú nuevo:

  • Antes:
    PHYS_SLICE=/dev/rdsk/c1d0s0
    LOG_SLICE=/dev/md/dsk/d0
    LOG_FSTYP=ufs
    

  • Después:
    PHYS_SLICE=/dev/rdsk/c1d0s5
    LOG_SLICE=/dev/md/dsk/d5
    LOG_FSTYP=ufs
    

Revisar estas operaciones un par de veces. Si nos equivocamos la habremos hecho buena.

A continuación le decimos al sistema que reinstale GRUB, con la nueva configuración:

/sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c2d0s5
/sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1d0s5

Si todo ha ido bien, hemos movido el menú GRUB de partición, y ya podremos eliminar el BE antiguo sin dificultad:

[root@tesalia grub]# bootadm list-menu
The location for the active GRUB menu is: /boot/grub/menu.lst
default 2
timeout 10
0 Solaris 10 1/06 s10x_u1wos_19a X86
1 Solaris failsafe
2 Solaris10u2
3 Solaris10u2 failsafe
4 Solaris101
5 Solaris101 failsafe

# ludelete Solaris101
Determining the devices to be marked free.
Updating boot environment configuration database.
Updating boot environment description database on all BEs.
Updating all boot environment configuration databases.
Updating GRUB menu on device </dev/md/dsk/d5>
Boot environment <Solaris101> deleted.

El primer comando nos muestra que efectivamente hemos movido el menú GRUB. El segundo comando elimina el BE antiguo.

A continuación, eliminamos todas las particiones involucradas en el BE que acabamos de destruir. Por último, yo suelo reiniciar para asegurarme de que todo está correcto, incluyendo que se han eliminado las entradas en el menú GRUB para el BE eliminado.


Historia

  • 12/dic/06: Documentamos cómo eliminar un BE que tiene un menú GRUB.

  • 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