domingo, 18 de julio de 2010

Como construir mirror en Solaris 10 (RAID 1)

Diseñé esta guia para trabajar construir un mirror (RAD 1) para solaris 9, ya que la herramienta smc (Solaris managment console) con su opción de uso del svm (solaris volume manager) no funcionaba del todo bien. Los ingredientes:
Equipo Sparc
Dos discos
Solaris 9 o 10
Cacao Venezolano (jejeje chiste)

RAID 1 (MIRROR) Solaris 9 o Solaris 10 con SVM (Solaris Volume Manager):
Los comandos a ejecutar están colocados en Negrita y cursiva
Las lineas en archivos son colocadas en color gris

Ejecutar una copia de nuestra VTOC (Tabla de volúmenes de contenido) a un archivo denominado vtoc.c1t0d0s2:
#prtvtoc /dev/rdsk/c1t0d0s2 > /vtoc.c1t0d0s2

Aplicar la etiqueta copiada al archivo sobre el disco 2:
#fmthard -s /vtoc.c1t0d0s2 /dev/rdsk/c1t1d0s2

Desmontar el filesystem que usaremos para replica sobre el disco 1 (de ser necesario), el tamaño promedio son 4MB:
#umount /export

Editar el archivo /etc/vfstab y comentar la linea en la que se encuentra el filesystem que vamos a usar para la replica (partición 7).
#vi /etc/vfstab
La linea debe de quedar de la siguiente manera
#/dev/dsk/c1t0d0s7 /dev/rdsk/c1t0d0s7 /export ufs 2 yes -

Para crear el estado de la base de datos de las replicas usamos el comando metadb con opciones -a para añadir, con -f para forzar la operación de la creación de las replicas iniciales, la opción -c para la especificación del numero de replicas y especificando el nombre de la particiones de los discos que mantendrán las replicas:
#/usr/sbin/metadb -a -f -c 2 c1t0d0s7 c1t1d0s7

Para mostrar una salida detallada de las replicas usamos:
#/usr/sbin/metadb -i

Convertimos nuestras particiones en metadispositivos para luego formar el mirror (RAID-1).

Comenzar con la creación de los metadispositivos usando el comando metainit con la opción -f para forzar a la conversión del filesystem que se encuentra montado (RAID 0), el nombre del metadispositivo será d11 usar los números 1 1 para determinar que el slice es simple (si es concatenado el valor es el número de volúmenes a concatenar) y que posee un solo stripe (franja)
#/usr/sbin/metainit -f d11 1 1 c1t0d0s0

Crear el metadispositivo (submirror) en el disco 2 usando el mismo comando, el metadispositivo tendrá como etiqueta d12
#/usr/sbin/metainit d12 1 1 c1t1d0s0

Repetirlo para la particion asignada a swap
#/usr/sbin/metainit -f d21 1 1 c1t0d0s1

Igual para el disco 2
#/usr/sbin/metainit d22 1 1 c1t1d0s1

Repetirlo para la particion 3
#/usr/sbin/metainit -f d31 1 1 c1t0d0s3


Repetirlo para la particion 3 del disco 2
#/usr/sbin/metainit d32 1 1 c1t1d0s3

Repetirlo para la particion 6
#/usr/sbin/metainit -f d41 1 1 c1t0d0s6


Repetirlo para la particion 6 del disco 2
#/usr/sbin/metainit d42 1 1 c1t1d0s6

Crear el volumen RAID-1 usando el comando metainit luego colocar el nombre del RAID la opcion -m especifica que es un mirror:
#/usr/sbin/metainit d10 -m d11
#/usr/sbin/metainit d20 -m d21
#/usr/sbin/metainit d30 -m d31
#/usr/sbin/metainit d40 -m d41
NOTA: Solo se realiza en este momento para d11, d21, d31, d41 para que la maquina se re-inicie con este volumen (disco):

Usar el comando metaroot para actualizar la información del archivo /etc/vfstab (cambiar la linea de filesystem de root a metadispositivo)
#/usr/sbin/metaroot d10
#grep d10 /etc/vfstab
la linea debe ser similar a:
/dev/md/dsk/d10 /dev/md/rdsk/d10 / ufs 1 no -

Editar /etc/vfstab, comentar las siguientes lineas y agregar la siguiente linea pasos a seguir:
#vi /etc/vfstab
comentar:
#/dev/dsk/c1t0d0s1 - - swap - no -
agregar:
/dev/md/dsk/d20 - - swap - no -
comentar:
#/dev/dsk/c1t0d0s3 /dev/rdsk/c1t0d0s3 /var ufs 1 no -
agregar:
/dev/md/dsk/d30 /dev/md/rdsk/d30 /var ufs 1 no -

comentar:
#/dev/dsk/c1t0d0s6 /dev/rdsk/c1t0d0s6 /usr ufs 1 no -
agregar:
/dev/md/dsk/d40 /dev/md/rdsk/d40 /usr ufs 1 no -
Reiniciar la maquina para que los cambios tengan efecto:
#init 6

Una vez que la maquina se ha reiniciado se deberá adjuntar los submirrors secundarios como se muestra a continuación, usando el comando metattach:
#/usr/sbin/metattach d10 d12
#/usr/sbin/metattach d20 d22
#/usr/sbin/metattach d30 d32
#/usr/sbin/metattach d40 d42

En otro terminal realizar el siguiente script para observar el porcentaje de avance de la sincronización:
#while true
do
/usr/sbin/metastat | grep -i resync
sleep 3
echo; echo
done
Para este momento se habrá realizado lo siguiente:

Agregar el bootblk para el disco 2 de forma tal que el mirror quede completado (este paso no es necesario en Solaris 9):
#cd /usr/platform/`uname -m`/lib/fs/ufs
#/usr/sbin/installboot bootblk /dev/rdsk/c1t1d0s0

Para probar el mirror usar:
#init 0
OK>show-disks
escoger la opción del disco que liste /pci@1f,0/ide@d/disk

OK>nvalias root_mirror ^y@1,0:a
OK>setenv boot-device root_mirror
OK>reset-all

Para revertir el proceso seguir los siguientes pasos:
Cambiar el dispositivo de booteo al disco original:
#/usr/sbin/eeprom boot-device=disk


Quitar los mirror adjuntos:
#/usr/sbin/metadetach d10 d12
#/usr/sbin/metadetach d20 d22
#/usr/sbin/metadetach d30 d32
#/usr/sbin/metadetach d40 d42

Usar el comando metaroot para revertir el proceso de metadispositivo a disco:
#/usr/sbin/metaroot /dev/dsk/c1t0d0s0

Editar /etc/vfstab y descomentar las lineas que se comentaron y comentar las lineas que se agregaron:
#vi /etc/vfstab

descomentar:
/dev/dsk/c1t0d0s1 - - swap - no -
comentar:
#/dev/md/dsk/d20 - - swap - no -
descomentar:
/dev/dsk/c1t0d0s3 /dev/rdsk/c1t0d0s3 /var ufs 1 no -
comentar:
#/dev/md/dsk/d30 /dev/md/rdsk/d30 /var ufs 1 no -
descomentar:
/dev/dsk/c1t0d0s6 /dev/rdsk/c1t0d0s6 /usr ufs 1 no -
comentar:
#/dev/md/dsk/d30 /dev/md/rdsk/d30 /usr ufs 1 no -


Reiniciar:
#init 6

Usar el comando metaclear para limpiar mirrors(-r) y submirrors:
#/usr/sbin/metaclear -r d10
#/usr/sbin/metaclear -r d20
#/usr/sbin/metaclear -r d30
#/usr/sbin/metaclear -r d40
#/usr/sbin/metaclear d12
#/usr/sbin/metaclear d22
#/usr/sbin/metaclear d32
#/usr/sbin/metaclear d42

Borrar las replicas usando metadb -d
#/usr/sbin/metadb -d -f c1t0d0s7 c1t1d0s7