Solaris incluye, desde la versión 8, un software llamado SDS (Solstice Disk Suite). Desde Solaris 10, las funcionalidades de SDS están integradas en la instalación básica por lo que no es necesario instalar los paquetes.
Solaris Disk Suite es un gestor de discos, predecesor de ZFS. Con Solaris Disk Suite se pueden hacer volúmenes RAID por software, con comandos similares a las utilides md de Linux.
En Solaris 10 y Opensolaris no es necesario instalar los paquetes. En Solaris 8, sin embargo, sí. Estos paquetes se encuentran en el CD de instalación pero en un directorio aparte:
El procedimiento en caso de necesitar instalarlo es, insertar el CD de Solaris 8 e instalar los paquetes situados en un determinado directorio. Por ejemplo, si estamos con un servidor Sparc:
# cd /cdrom/sol_8_hw1202_sparc_2/Solaris_8/EA/products/DiskSuite_4.2.1/sparc/Packages # pkgadd -d .
En el caso de Solaris 8, solo es necesario instalar los paquetes con los números 4,6,7,8,9 y 10, en la lista que nos mostrará el comando pkgadd anterior.
Los paquetes instalan algunos drivers, por lo que es necesario reiniciar el servidor:
# shutdown -i6 -g0 -y
Vamos a partir de un sistema con dos discos SCSI de 72 Gb, c0t0d0 y c0t1d0. Se está usando el disco 0 con las siguientes particiones:
| c0t0d0s0 | 4.8G | UFS | / | ||||
| c0t0d0s1 | 7.8G | swap | swap | ||||
| c0t0d0s3 | 4.8G | UFS | /var | ||||
| c0t0d0s6 | 4.8G | UFS | /usr/local |
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, para lo cual hay instrucciones aquí.
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.
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.
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).
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
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