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]
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/c2t0d0p0Repetiremos 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
* /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
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 c2t0d0s0Creación de un RAID 0 -striped-
# 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
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 32kUna 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
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
# 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.
Creación de un RAID0 -ZFS-
/dev/md/dsk/d0 /dev/md/rdsk/d0 /raid ufs 2 yes -
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 raid0Nota: 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.
Sistema de archivos tamaño usados aprovechar capacidad Montado en
raid0 15G 21K 15G 1% /raid0
# zpool create raid0 c2t0d0 c2t1d0 c2t2d0Creación de un LUN
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
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/u01Tambié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 set quota=9G raid0/u01
# zfs create -o quota=1G raid0/u02Podemos 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
...hey..esa tercera fase.. esta tardando.!! jejjeje
ResponderEliminarUn saludo!
Gracias por el aporte, gran artículo.
ResponderEliminar