SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 8 de enero de 2010

Diferencias entre Solaris Volume Manager y ZFS - Parte 1

Introducción
Desde la introducción de ZFS en Solaris 10 el mundo del almacenamiento anda un poco revuelto. Vamos a ver cómo en este post intentamos ver las diferencias de ZFS y Solaris Volume Manager <Solaris Solstice DiskSuite en Solaris 8> para ello vamos a hacer un poco de historia

Solaris Volume Manager
SVM es un Gestor de Almacenamiento -también llamado Gestor de Volúmenes- incluido en la versión 9 de Solaris que estaba basado en Solstice DiskSuite.

ZettaByte File System
ZFS es un Sistema de Ficheros y Gestor de Volúmenes incluido en la versión 10 de Solaris y con un diseño nuevo basado en Copy-on-Write 

Bien, hay que entender claramente lo que significa Gestor de Alamacenamiento y no confundirlo con Sistema de Archivos. Ahora que tenemos definidos los dos conceptos, vamos a ver si profundizamos en cada uno de ellos.

Un Gestor de Volúmenes se encarga de administrar los discos físicos mediante los formatos de redundancia establecidos, es decir, RAID0, RAID1, RAID5 y de escribir el contenido en el sistema de ficheros que se nos proporciona en dichos discos.

Dicho de otra forma, nuestro Gestor de Volúmenes hará de intermediario entre Solaris y nuestros discos físicos, para ello utiliza una base de datos especial <llamada metadb> donde se almacenan los metadatos necesarios para su gestión.

Es de vital importancia que esa metadb se encuentre en discos locales -no en una SAN- ya que debe estar disponible en arranque antes de pasar a level 3 y por lo tanto, Solaris pueda leerla y saber cómo debe trabajar.

Veamos el siguiente dibujo con la estructura SVM:


Como acabamos de explicar, Solaris Volume Manager hace de capa intermedia entre los discos y nuestro Sistema Operativo, sin embargo, el sistema de ficheros se mantiene intacto. Por lo tanto, svm utiliza las particiones del disco y se encarga de sincronizar, duplicar, ... los datos para adecuarlos al nivel de RAID establecido.

Entonces, si svm hace uso de la particiones <slice>, si tengo un disco HDD0 con dos particiones <c1t0d0s0> y <c1t0d0s4> puedo utilizar Solaris Volume Manager para crear un RAID 1? La respuesta es SI -aunque no tiene sentido-.


Veamos un ejemplo de RAID1 con dos discos c2t2d0 y c2t1d0s0
# metastat
d50: Duplicación
     Subduplicación 0: d51
      Estado: Correcto
    Subduplicación 1: d52
      Estado: Correcto
    Paso: 1
    Opción de lectura: geometric (-g)
    Opción de escritura: parallel (predeterminado)
    Tamaño: 2064384 bloques (1008 MB)

d51: Subduplicación de d50
    Estado: Correcto
    Tamaño: 2064384 bloques (1008 MB)
    Banda 0:
        Dispositivo   Bloque de in Base        Estado Reubi Repuesto en marcha
        c2t1d0s0             0     No        Correcto    Sí


d52: Subduplicación de d50
    Estado: Correcto
    Tamaño: 2064384 bloques (1008 MB)
    Banda 0:
        Dispositivo   Bloque de in Base        Estado Reubi Repuesto en marcha
        c2t2d0s0             0     No        Correcto    Sí


Device Relocation Information:
Device   Reloc  Device ID
c2t2d0   Sí     id1,sd@f084596884b30c5470007ac9c0001
c2t1d0   Sí     id1,sd@f084596884b30c547000664340000
Entonces si SVM hace uso del sistema de ficheros UFS -en nuestro caso-, uno puede pensar que es posible montar uno de los discos de la forma tradicional con el comando <mount>. Lo cierto es que SI pero no debemos hacerlo.

Vamos a ver el contenido de ambos discos con un ejemplo -tener en cuenta que no es mi intención escribir sobre la utilización de SVM o ZFS en este post, para ello publicaré Cómo Utilizar Solaris Volume Manager-

# mount -F ufs -o ro /dev/dsk/c2t2d0s0 /mnt
# ls -l /mnt
total 32
lrwxrwxrwx   1 root     root           9 dic 23 17:22 bin -> ./usr/bin
drwxr-xr-x   3 root     sys          512 dic 21 18:23 export
dr-xr-xr-x   2 root     root         512 dic 23 10:51 home
drwx------   2 root     root        8192 jun  5  2009 lost+found
dr-xr-xr-x   2 root     root         512 dic 23 10:51 net
drwxrwxrwt   2 root     root         512 dic 23 17:08 tmp
drwxr-xr-x  15 root     sys          512 jul 17 10:54 usr
drwxr-xr-x  45 root     sys         1024 jul 11 15:59 var
dr-xr-xr-x   2 root     root         512 dic 23 10:52 vol
# mount -F ufs -o ro /dev/dsk/c2t1d0s0 /mnt2
# ls -l /mnt2
total 32
lrwxrwxrwx   1 root     root           9 dic 23 17:22 bin -> ./usr/bin
drwxr-xr-x   3 root     sys          512 dic 21 18:23 export
dr-xr-xr-x   2 root     root         512 dic 23 10:51 home
drwx------   2 root     root        8192 jun  5  2009 lost+found
dr-xr-xr-x   2 root     root         512 dic 23 10:51 net
drwxrwxrwt   2 root     root         512 dic 23 17:08 tmp
drwxr-xr-x  15 root     sys          512 jul 17 10:54 usr
drwxr-xr-x  45 root     sys         1024 jul 11 15:59 var
dr-xr-xr-x   2 root     root         512 dic 23 10:52 vol

Ahora vamos a ver cómo se monta utilizando Solaris Volume Manager. Para ello, debemos utilizar el device <md>
# mkdir /raid
# mount -F ufs /dev/md/dsk/d50 /raid
# cd /raid/
# ls -ltr
total 32
drwx------   2 root     root        8192 jun  5  2009 lost+found
drwxr-xr-x  45 root     sys         1024 jul 11 15:59 var
drwxr-xr-x  15 root     sys          512 jul 17 10:54 usr
drwxr-xr-x   3 root     sys          512 dic 21 18:23 export
dr-xr-xr-x   2 root     root         512 dic 23 10:51 net
dr-xr-xr-x   2 root     root         512 dic 23 10:51 home
dr-xr-xr-x   2 root     root         512 dic 23 10:52 vol
drwxrwxrwt   2 root     root         512 dic 23 17:08 tmp
lrwxrwxrwx   1 root     root           9 dic 23 17:22 bin -> ./usr/bin
# rm bin

Ahora comprobamos cuál es el resultado de nuestro disco. Debemos desmontarlo puesto que lo tenemos en ReadOnly.
# umount /mnt2
# mount -F ufs -o ro /dev/dsk/c2t1d0s0 /mnt2
# ls -l /mnt2/
total 30
drwxr-xr-x   3 root     sys          512 dic 21 18:23 export
dr-xr-xr-x   2 root     root         512 dic 23 10:51 home
drwx------   2 root     root        8192 jun  5  2009 lost+found
dr-xr-xr-x   2 root     root         512 dic 23 10:51 net
drwxrwxrwt   2 root     root         512 dic 23 17:08 tmp
drwxr-xr-x  15 root     sys          512 jul 17 10:54 usr
drwxr-xr-x  45 root     sys         1024 jul 11 15:59 var
dr-xr-xr-x   2 root     root         512 dic 23 10:52 vol
Todo esto lo hemos hecho para demostrar cómo Solaris Volume Manager se apoya en el sistema de ficheros para realizar las tareas. Además, este ejemplo sólo es válido para RAID 1 ya que se hace una copia de un slice a otro. En RAID0, RAID5 no será posible.

En ZFS las cosas son un poco diferentes. Ya hemos comentado que es un Gestor de Volúmenes y Sistema de Ficheros por lo tanto tenemos todo lo necesario en un único punto. En el siguiente gráfico se muestra conceptualmente su funcionamiento.



Veamos qué sucede con ZFS siguiendo el mismo ejemplo anterior. Lo primero vamos a crear nuestro pool -que se asemeja a nuestra metadb- y las LUN

# zpool create -f testZ mirror c2t1d0 c2t2d0
# zpool status
  conjunto: testZ
 estado: ONLINE
 limpiar: no se ha solicitado ninguna
config:

        NAME        STATE     READ WRITE CKSUM
        testZ       ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c2t1d0  ONLINE       0     0     0
            c2t2d0  ONLINE       0     0     0

errores: ningún error de datosconocido
# zfs create testZ/lun0
# zfs create testZ/lun1
# df -h
Sistema de archivos  tamaño usados aprovechar capacidad Montado en
testZ                  976M    19K   976M     1%    /testZ
testZ/lun0             976M    18K   976M     1%    /testZ/lun0
testZ/lun1             976M    18K   976M     1%    /testZ/lun1
Como toda la gestión se encuentra dentro de ZFS, cambiar sus propiedades resulta realemente sencillo, por ejemplo, asignar una quota a cada LUN
# zfs set quota=256M testZ/lun0
# zfs set quota=256M testZ/lun1
# df -h
Sistema de archivos  tamaño usados aprovechar capacidad Montado en
testZ                  976M    21K   960M     1%    /testZ
testZ/lun0             256M    16M   240M     7%    /testZ/lun0
testZ/lun1             256M    18K   256M     1%    /testZ/lun1
Vamos a ver qué sucede si intentamos montar ahora los discos
# mount -F zfs -o ro /dev/dsk/c2t1d0s0 /mnt
cannot open '/dev/dsk/c2t1d0s0': invalid dataset name
# mount -F ufs -o ro /dev/dsk/c2t1d0s0 /mnt
mount: /dev/dsk/c2t1d0s0 no es de este tipoFS
Hasta aquí la Primera Parte a modo de introducción. En las siguientes iremos viendo cuáles son los escenarios donde cada uno de ellos se comporta como pez en el agua y como no, rendimiento.

Conclusión
Nos hemos introducido en el mundo de los Volume Manager y, aunque a simple vista, ZFS parece la panacéa en las siguientes entregas veremos cómo Solaris Volume Manager puede -y debe- usarse para hacernos la vida más fácil.

Aunque no he querido entrar en el detalle de Cómo trabajar con SVM o ZFS algo se ha escapado, prometo dedicar tiempo para explicar con ejemplos sencillos -y complicados- su uso.

Siguientes Partes

Referencias

No hay comentarios:

Publicar un comentario en la entrada