Espejado con SDS

SDS es el nombre antiguo ("Solstice Disk Suite") que se da a lo que actualmente se conoce como Solaris Volume Manager. Es un software gestor de discos que permite, entre otras cosas, realizar RAID por software. Dado que la máquina tiene Solaris 10, y su ZFS no soporta aun en nativo el espejado del disco raíz, es necesario usar SDS para hacer RAID-1 en las particiones no montadas con ZFS, que son:

c0t0d0s0

4.8G

UFS

/

c0t0d0s1

7.8G

swap

swap

c0t0d0s3

4.8G

UFS

/var

c0t0d0s6

4.8G

UFS

/usr/local

Solaris 10 ya trae instalados los paquetes de SDS, por lo que no es necesario instalarlos (en Solaris 8 y 9 venían en paquetes apartes del CD-ROM de instalación).

El primer paso es preparar la tabla de particiones: es necesario reservar una pequeña partición (16 cilindros, en nuestro caso) para salvaguardar la base de datos de SDS. Lo haremos en el slice 7. Luego debemos replicar la tabla de particiones en el disco 1. Todo esto antes de montar ZFS. La tabla de particiones a usar será la siguiente, y el proceso para replicar la tabla en esta otra página.

Tabla de particiones:

Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm    1611 -  2617        4.89GB    (1007/0/0)   10247232
  1       swap    wu       0 -  1610        7.82GB    (1611/0/0)   16393536
  2     backup    wm       0 - 14086       68.35GB    (14087/0/0) 143349312
  3        var    wm    2618 -  3624        4.89GB    (1007/0/0)   10247232
  4 unassigned    wm    4632 - 14069       45.80GB    (9438/0/0)   12345678
  5 unassigned    wm       0                0         (0/0/0)             0
  6        usr    wm    3625 -  4631        4.89GB    (1007/0/0)   10247232
  7 unassigned    wm   14070 - 14085       79.50MB    (16/0/0)       162816

El resto del proceso debe realizarse desde consola, con el fin de no perder acceso a la máquina si algo lo hacemos mal. Instrucciones para entrar en consola, aquí.

Creación del fichero md.tab y la base de datos

El fichero /etc/md.tab será el siguiente:

d0 -m d10 1
d10 1 1 c0t0d0s0
d20 1 1 c0t1d0s0
d1 -m d11 1
d11 1 1 c0t0d0s1
d21 1 1 c0t1d0s1
d3 -m d13 1
d13 1 1 c0t0d0s3
d23 1 1 c0t1d0s3
d6 -m d16 1
d16 1 1 c0t0d0s6
d26 1 1 c0t1d0s6

La base de datos está de momento en c0t1d0s7, así que la inicializamos con tres réplicas mediante el comando:

# /usr/sbin/metadb -a -c3 -f /dev/dsk/c0t0d0s7

Esto altera el fichero /etc/lvm/mddb.cf, fichero que no tendremos que editar a mano nunca, sino mediante el comando metadb.

Inicialización de SDS en la partición raíz

Ahora debemos inicializar SDS en la partición raíz. Esto supone cambios en los ficheros /etc/vfstab y /etc/system, por lo que guardamos copias de seguridad:

# cp /etc/system /etc/system.orig
# cp /etc/vfstab /etc/vfstab.orig

Para inicializar debemos introducir varios comandos y a continuación reiniciar:

# metainit -f d10
d10: Concat/Stripe is setup
# metainit d0
d0: Mirror is setup
# metainit d20
d20: Concat/Stripe is setup
# metaroot d0
# init 6

Observemos el proceso de boot por si algo falla (esto es solo posible desde consola):

# init 6
# svc.startd: The system is coming down.  Please wait.
svc.startd: 65 system services are now being stopped.
Jul 14 22:56:43 gnomehispano syslogd: going down on signal 15
svc.startd: The system is down.
syncing file systems... done
rebooting...

SC Alert: Host System has Reset

SC Alert: Host system has shut down.

...


Sun Fire T200, No Keyboard
Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.27.4, 32640 MB memory available, Serial #70066726.
Ethernet address 0:14:4f:2d:22:26, Host ID: 842d2226.



Boot device: disk  File and args:
Loading ufs-file-system package 1.4 04 Aug 1995 13:02:54.
FCode UFS Reader 1.12 00/07/17 15:48:16.
Loading: /platform/SUNW,Sun-Fire-T200/ufsboot
Loading: /platform/sun4v/ufsboot
SunOS Release 5.10 Version Generic_127111-03 64-bit
Copyright 1983-2007 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
os-io WARNING: Last shutdown is later than time on time-of-day chip; check date.
Hostname: gnomehispano
/dev/rdsk/c0t0d0s6 is clean

gnomehispano console login:

Comprobemos que la partición raíz se encuentra bajo el control de SDS:

# df -h
...
Filesystem             Size   Used  Available Capacity  Mounted on
/dev/md/dsk/d0         4.8G   1.8G       3.0G    38%    /

Todo en orden. En el fichero /etc/vfstab veremos que la orden metaroot habrá cambiado el punto de montaje del disco raíz (ahora es /dev/md/dsk/d0 y no /dev/dsk/c0t0d0s0).

Inicialización de SDS en el resto de particiones

Ahora debemos meter en SDS las demás particiones, es decir:

|| c0t0d0s1 || 7.8G || swap || swap ||
|| c0t0d0s3 || 4.8G || UFS || /var ||
|| c0t0d0s6 || 4.8G || UFS || /usr/local ||

Como ya tenemos las entradas correspondientes en el /etc/lvm/md.tab, solo tenemos que introducir los comandos para inicializar los volúmenes:

# metainit -f d11
d11: Concat/Stripe is setup
# metainit d21
d21: Concat/Stripe is setup
# metainit d1
d1: Mirror is setup
# metainit -f d13
d13: Concat/Stripe is setup
# metainit d23
d23: Concat/Stripe is setup
# metainit d3
d3: Mirror is setup
# metainit -f d16
d16: Concat/Stripe is setup
# metainit d26
d26: Concat/Stripe is setup
# metainit d6
d6: Mirror is setup

Ahora, procedemos a copiar la BD de SDS en el disco 1 (c0t1d0s7), con el comando:

# metadb -a -c3 -f /dev/dsk/c0t1d0s7

Llega el momento de cambiar el fichero /etc/vfstab para que monte las particiones via SDS y no directamente. Nuestro /etc/vfstab se verá afectado en las siguientes líneas:

/dev/md/dsk/d1  -       -       swap    -       no      -
/dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -
/dev/md/dsk/d3  /dev/md/rdsk/d3 /var    ufs     1       no      -
/dev/md/dsk/d6  /dev/md/rdsk/d6 /usr/local      ufs     2       yes     -

Debemos reiniciar el equipo y comprobar que todas las particiones aparecen montadas via SDS. En nuestro caso:

# init 6
...
# df -h |grep md
/dev/md/dsk/d0         4.8G   1.8G       3.0G    38%    /
/dev/md/dsk/d3         4.8G   409M       4.4G     9%    /var
/dev/md/dsk/d6         4.8G   455M       4.3G    10%    /usr/local
# swap -l
swapfile             dev  swaplo blocks   free
/dev/md/dsk/d1      85,1      16 16393520 16393520

Espejado de todas las particiones

Para finalizar, lanzamos el espejado. Los comandos son, para nuestro caso, los siguientes:

# metattach d0 d20
d0: submirror d20 is attached
# metattach d1 d21
d1: submirror d21 is attached
# metattach d3 d23
d3: submirror d23 is attached
# metattach d6 d26
d6: submirror d26 is attached

Para comprobar que están espejándose, usaremos el comando metastat:

# metastat
d6: Mirror
    Submirror 0: d16
      State: Okay
    Submirror 1: d26
      State: Resyncing
    Resync in progress: 0 % done
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 10247232 blocks (4.9 GB)

d16: Submirror of d6
    State: Okay
    Size: 10247232 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s6          0     No            Okay   Yes


d26: Submirror of d6
    State: Resyncing
    Size: 10247232 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t1d0s6          0     No            Okay   Yes


d3: Mirror
    Submirror 0: d13
      State: Okay
    Submirror 1: d23
      State: Resyncing
    Resync in progress: 1 % done
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 10247232 blocks (4.9 GB)

d13: Submirror of d3
    State: Okay
    Size: 10247232 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s3          0     No            Okay   Yes


d23: Submirror of d3
    State: Resyncing
    Size: 10247232 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t1d0s3          0     No            Okay   Yes


d1: Mirror
    Submirror 0: d11
      State: Okay
    Submirror 1: d21
      State: Resyncing
    Resync in progress: 2 % done
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 16393536 blocks (7.8 GB)

d11: Submirror of d1
    State: Okay
    Size: 16393536 blocks (7.8 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s1          0     No            Okay   Yes


d21: Submirror of d1
    State: Resyncing
    Size: 16393536 blocks (7.8 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t1d0s1          0     No            Okay   Yes


d0: Mirror
    Submirror 0: d10
      State: Okay
    Submirror 1: d20
      State: Resyncing
    Resync in progress: 12 % done
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 10247232 blocks (4.9 GB)

d10: Submirror of d0
    State: Okay
    Size: 10247232 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s0          0     No            Okay   Yes


d20: Submirror of d0
    State: Resyncing
    Size: 10247232 blocks (4.9 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t1d0s0          0     No            Okay   Yes


Device Relocation Information:
Device   Reloc  Device ID
c0t1d0   Yes    id1,sd@n500000e0120569a0
c0t0d0   Yes    id1,sd@n500000e012063ec0

Autoarranque del disco 1

Una vez completamente espejado el disco, debemos configurar el disco 1 para que sea capaz de arrancar si el disco 0 se avería. Esto debe hacerse con el S.O. detenido y desde la consola (boot prompt). El proceso consiste en añadir al alias boot-file el valor correspondiente para arrancar el disco 1. La captura de acciones en la consola sería la siguiente:

  cherry% ssh gnomehispano.osuosl.oob
  Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  Use is subject to license terms.
  
  
  Sun(tm) Advanced Lights Out Manager CMT vx.y.z
  
  Please login: XXXX
  
  sc> break -c
  Are you sure you want to send a break to the system [y/n]? y
  Sending break... Enter #. to return to ALOM.
  
  {18} ok
  {18} printenv boot-device
  boot-device             disk net                       disk net
  {18} devalias
  ...
  disk1                    /pci@780/pci@0/pci@9/scsi@0/disk@1
  disk0                    /pci@780/pci@0/pci@9/scsi@0/disk@0
  disk                     /pci@780/pci@0/pci@9/scsi@0/disk@0
  ...
  {18} setenv boot-device disk disk1 net
  {18} printenv boot-device
  boot-device             disk disk1 net                       disk disk1 net
  {18} go
  gnomehispano console login:

Administradores/T200/EspejadoSDS (last edited 2009-07-17 18:35:41 by JuanjoAmor)