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
# metastatEntonces 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.
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
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 /mnt2Todo 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.
# 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
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 c2t2d0Como toda la gestión se encuentra dentro de ZFS, cambiar sus propiedades resulta realemente sencillo, por ejemplo, asignar una quota a cada LUN
# 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
# zfs set quota=256M testZ/lun0Vamos a ver qué sucede si intentamos montar ahora los discos
# 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
# mount -F zfs -o ro /dev/dsk/c2t1d0s0 /mntHasta 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.
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
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