SafeChildren Banner

Havoc Oracle Solaris Experts

martes, 12 de enero de 2010

Diferencias entre Solaris Volume Manager y ZFS - Parte 2

Introducción
En la primera parte comenzamos a ver las diferencias principales entre Solaris Volume Manager -svm- y ZFS. En esta nueva entrega, vamos a ver -de una forma más práctica- cómo llevar a cabo las principales tareas en ambos sistemas: svm y zfs

Aunque hay muchos puntos que tratar, vamos a empezar por lo básico en cuanto a gestión se refiere. Para ello, vamos a ver cómo crear diferentes tipos de RAID tanto en <svm> como en <zfs>.

Antes de empezar, hay que recordar que <zfs> está sólo para Solaris 10, y por lo tanto, si estas obligado a estar en Solaris 9, no hay muchas opciones ... o tal vez sí. Una de las opciones es Solaris 8 and 9 Containers, pero eso será en próximas entregas.

Vamos a asumir que tenemos Solaris 10 y tenemos la siguiente configuración -la utilizaremos en todos los ejemplos-. Para ello utilizaremos Sun VirtualBox -ya que nos ofrece potencia al simular discos-
  • VirtualBox 3.1.2 sobre MacOS X :D
  • Solaris 10 10/09 x86 64bits
  • c0d0 [hdd_os]
  • c2t0d0 [hdd_zfs1]
  • c2t1d0 [hdd_zfs2]
  • c2t2d0 [hdd_zfs3]
No voy a entrar en detalle sobre cuáles son los diferentes tipos de RAID que existen -asumo que ya son conocidos- simplemente vamos a hacer una aclaración sobre las diferencias de <strip> y <concatenation> que, en ambos casos, hacen referencia a un RAID 0.

Si bien ambos son RAID 0, internamente se estructuran de forma diferente -a nivel de blocks-. En el caso de <strip> el contenido a escribir se divide entre el número de discos que forman parte del RAID 0 y se escribe de forma simultánea en cada uno de ellos, sin embargo, esto supone un pequeño trabjo extra ya que debe dividir los datos -mira el gráfico que se muestra a continuación-



Si hablamos de <concatenation> el proceso será diferente. El sistema irá llenando cada uno de los discos que forman parte del array -de uno en uno- y cuando uno esté completo, continuará en el siguiente.



Esto es importante ya que nunca deberemos hacer un strip de discos con datos, ya que los perderemos. Sin embargo, si que podremos hacer una concatenation de un slice con datos sin perderlos.

Preparativos para Solaris Volume Manager
Antes de comenzar debemos recordar que Solaris Volume Manager necesita de una base de metadatos y ésta debe estar accesible para el sistema desde el boot, sino no será posible montar el RAID en el arranque.

Además, Solaris Volume Manager trabaja a nivel de slice -tambien llamado Soft Partition- y por lo tanto, debemos tener correctamente dividido el disco. Para nuestro caso, vamos a hacer dos slice, una de 16Mb para la base de datos de <svm> y otra de 4.88GB -como se muestra en la tabla de particiones-
# prtvtoc /dev/rdsk/c2t0d0p0
* /dev/rdsk/c2t0d0p0 partition map
*
* Dimensions:
*     512 bytes/sector
*      32 sectors/track
*     128 tracks/cylinder
*    4096 sectors/cylinder
*    2558 cylinders
*    2556 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*
* Unallocated space:
*       First     Sector    Last
*       Sector     Count    Sector
*           0      4096      4095
*       36864      4096     40959
*    10285056    184320  10469375
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      0    00       4096     32768     36863
       2      5    01          0  10469376  10469375
       7      0    00      40960  10240000  10280959
       8      1    01          0      4096      4095
Repetiremos estos pasos para cada uno de los discos -c2t0, c2t1 y c2t2- y así poder ubicar tres réplicas de la base de datos en cada uno de ellos, en el slice 0

Creación de la Base de MetaDatos
Para la creación utilizaremos el comando <metadb> con la opción <-a> para añadir una nueva réplica -base de datos- y la opción <-f> para forzar el comando. Si utilizamos el comando sin argumentos, nos mostrará el estados de las réplicas actuales.
# metadb -a -f c2t0d0s0
# metadb -a -f c2t1d0s0
# metadb -a -f c2t2d0s0
# metadb
        flags           first blk       block count
     a        u         16              8192            /dev/dsk/c2t1d0s0
     a        u         16              8192            /dev/dsk/c2t0d0s0
     a        u         16              8192            /dev/dsk/c2t2d0s0
Creación de un RAID 0 -striped-
Para la creación de los grupos, utilizaremos el comando <metainit>  cuyo formato es el siguiente:
metainit {nombre} {número stripes} {componentes del strip} {componentes} [-i tamaño del bloque]
Por ejemplo, vamos a crear un volumen "tripped con tres componentes y un tamaño de 32k
# metainit d0 1 3 c2t0d0s7 c2t1d0s7 c2t2d0s7 -i 32k
d0: Concatenación/reparto está configurado
# metastat d0
d0: Concat/Stripe
    Tamaño: 30720000 bloques (14 GB)
    Banda 0: (entrelazado: 64 bloques)
        Dispositivo   Bloque de in Base         Reubic
        c2t0d0s7             0     No           Si
        c2t1d0s7             0     No           Si
        c2t2d0s7             0     No           Si

Device Relocation Information:
Device   Reloc  Device ID
c2t0d0   Si     id1,sd@f2f2f1fe14b4b97550006a7c60000
c2t1d0   Si     id1,sd@f2f2f1fe14b4b97550006e82c0001
c2t2d0   Si     id1,sd@f2f2f1fe14b4b9755000780380002
Una vez creado nuestro RAID0, deberemos crear el sistema de archivos al igual que si de un disco normal se tratase. Para ello, utilizaremos el comando <newfs> con el tamaño de bloque a 8k, pero ahora nuestro <device> ya no será /dev/rdsk/cXtYdZ, sino /dev/md/rdsk/d0

# newfs -i 8192 /dev/md/rdsk/d0

Por último, editaremos nuestro  /etc/vfstab e incluiremos la entrada correspondiente si queremos que cada vez que nuestro sistema se inicie, monte la unidad.

/dev/md/dsk/d0    /dev/md/rdsk/d0    /raid    ufs    2    yes    -
Creación de un RAID0 -ZFS-
Para crear un RAID0 utilizando ZFS, primero deberemos crear un pool -podemos entender esto como un grupo de discos, en los cuales exportaremos LUNs- y para ello deberemos utilizar el comando <zpool> con la opción <create> y el nombre del pool que queremos asignarle.

La primera diferencia es que con ZFS no es necesario crear una base de metadatos, además, en vez de utilizar las soft partitions <slice> se utilizará el disco completo

# zpool create  raid0 c2t0d0 c2t1d0 c2t2d0

Podemos comprobar cómo ZFS monta nuestro RAID en /raid0 y es totalmente utilizable -no es necesario llamar a <newfs>-
# df -h raid0
Sistema de archivos  tamaño usados aprovechar capacidad Montado en
raid0                   15G    21K    15G     1%    /raid0
 Nota: Si los discos que utilizamos contienen una estructura UFS, el sistema nos informa de ello y nos pide que utilicemos la opción <-f> para crearlo.

# zpool create raid0 c2t0d0 c2t1d0 c2t2d0
especificación de vdev no válida
utilice '-f' para anular los siguientes errores:
/dev/dsk/c2t0d0s7 contiene un sistema de archivos ufs.
# zpool create -f raid0 c2t0d0 c2t1d0 c2t2d0
Creación de un LUN
Una vez creado nuestro pool podemos crear diferentes LUN -o puntos de exportación- con el fin de optimizar la estructura, por ejemplo: u01, u02. Para ello utilizaremos el comando <zfs> con los argumentos <create>

# zfs create raid0/u01
# zfs set quota=9G raid0/u01
También podemos hacerlo todo en un sólo comando, por ejemplo, vamos a crear una  LUN de 1Gb y que se monte en /raid0/u02
# zfs create -o quota=1G raid0/u02
Podemos ver el resultado de nuestras LUN haciendo un simple <df>
# df -h
Sistema de archivos  tamaño usados aprovechar capacidad Montado en
raid0                   15G    24K    15G     1%    /raid0
raid0/u01              9,0G    21K   9,0G     1%    /raid0/u01
raid0/u02              1,0G    21K   1,0G     1%    /raid0/u02

Conclusión
Hemos visto cómo Solaris Volume Manager nos permite utilizar las llamadas Soft Partitions que, en determinadas ocasiones, nos puede interesar. Además en cuanto a complejidad, ZFS ha evolucionado de forma muy significativa, dejando en dos comandos <zpool> y <zfs> la gestión de los volúmenes.

En las siguientes partes iremos viendo cómo crear otro tipo de RAID y, por último su rendimiento.

Referencias

2 comentarios:

  1. ...hey..esa tercera fase.. esta tardando.!! jejjeje

    Un saludo!

    ResponderEliminar
  2. Gracias por el aporte, gran artículo.

    ResponderEliminar