Buscar en este blog

2.12.11

ZFS


ZFS ha sido originalmente un desarrollo de la otrora SUN Microsystems. Ahora está bajo el control de Oracle. Las últimas características están solo disponibles en las últimas versiones de su sistema operativo Solaris, aunque hay implementaciones libres en la mayoría de sistemas operativos Unix Open-source.

Algunos fabricantes de sistemas de almacenamiento como NetAPP tienen sistemas de ficheros similares para sus cabinas de discos.
 
En ZFS hay dos conceptos fundamentales, los ZPool y los Z Filesystem:
  • ZPool: Agrupación de (usualmente) discos duros o particiones que conforma un volumen con todos ellos siguiendo un esquema de RAID.
Los ZPool conforman pueden conformar diferentes tipos de RAID, entre ellos:
raidz: Similar a un raid-5
raidz2: Similar a un raid-6
El concepto detrás de estos volúmenes es crear un nivel de abstracción entre los dispositivos físicos y los filesystems, permitiendo gran flexibilidad. En el mundo Linux, sería similar a usar MD (raid software) + LVM.
El ZPool se encarga del matenimiento de la información a nivel de raid. Toda la administración a este nivel se hace a través del comando "zpool".
Los diferentes niveles RAID que ofrecen los ZPool (raidz, raidz-2, etc) son conceptualmente iguales a los clásicos (raid-5, raid-6) salvo porque aseguran no adolecer de un problema conocido como "write-hole".

  • Z Filesystem:  Sobre la capa de abstracción de los ZPool, se crean los filesystems o ZFS's. Puede haber varios en cada ZPool y aquí es donde aparecen las características más interesantes de ZFS. Deduplicación, snapshots, compresión, detección de corrupciones, exportación directa por CIFS, NFS, iSCSI, cuotas,  etc, etc, etc... Toda la administración a este nivel se hace a través del comando "zfs".

Ejemplos sobre FreeBSD 8.2
Discos disponibles (sin particionar):
/dev/ad2 (2GB)
/dev/ad4 (2GB)
/dev/ad6 (2GB)
/dev/ad8 (2GB)
/dev/ad10 (2GB)
/dev/ad12 (2GB)

ZPOOL MANAGEMENT

Creación de un zpool raid-0 (stripping) con dos discos:
 zpool create NOMBREPOOL /dev/ad2 /dev/ad4
Creación de un zpool raid-1 (mirror)  con dos discos:
zpool create NOMBREPOOL mirror /dev/ad2 /dev/ad4

Creación de un zpool raidz-2 con 4 discos, doble paridad y un disco de spare:
zpool create NOMBREPOOL raidz2 /dev/ad2 /dev/ad4 /dev/ad6 /dev/ad8 /dev/ad10 spare /dev/ad12
Destrucción de un zpool y liberación de los discos físicos que lo formaban:
zpool destroy NOMBREPOOL

Añadir un disco más a un zpool:
zpool add NOMBREPOOL /dev/ad12

Añadir (en caliente) un disco de spare a un zpool:
zpool add NOMBREPOOL spare /dev/ad6
Comprobar los checksums de todo el zpool en busca de errores:
zpool scrub NOMBREPOOL
Poner un disco off-line (solo permite hacerlo si el raid no se rompe):
zpool offline NOMBREPOOL
Poner un disco on-line:
zpool online NOMBREPOOL
Reemplazar un disco de un zpool por otro:
zpoll replace NOMBREPOOL /dev/DISCOVIEJO /dev/DISCONUEVO


Histórico de modificaciones en el ZPool:
zpool history

Información sobre los ZPool:
zpool list
zpool status
Comprobar el rendimiento del zpool en tiempo real:
zpool iostat
Los ZPool son automáticamente montados en el sistema de archivos. En dicho punto de montaje se puede escribir, pero no es recomendable ya que en teoría, no hay sistema de archivos creado sobre el ZPool.

ZFS MANAGEMENT

Crear (y montar) un sistema de archivos ZFS sobre un ZPool ya creado:
zfs create /
Eliminar (previo desmontaje) de un sistema de archivos ZFS:
zfs destroy /
Ver estado de los ZFS:
zfs list
df
Ver parámetros de un ZFS:
zfs get /
Establecer el tamaño del sistema de archivos (mediante una cuota):
zfs set quota=50G NOMBREZPOOL/NOMBREZFS
Activar compresión (gzip por defecto) en el filesystem:
zfs set compression=on /
Almacenar varias copias de cada archivo. Esto establece un nivel de redundancia a mayores sobre lo que ya ofrece el ZPoll. El espacio que ocupa el archivo se multiplica:
zfs set copies=3 /
Crear un snapshot de un ZFS:
zfs snapshot  /@
Se pueden crear snapshot de ZPool  completo:
zfs snapshot @
Ver una lista de snapshots:
zfs list -t snapshot
zfs list -t snapshot -o name,creation
Hacer visibles los snapshots:
zfs set snapdir=visible /
Ver el contenido de un snapshot:
ls /.zfs
Destruir/borrar un snapshot:
zfs destroy /@
Renombrar un ZFS o snapshot:
zfs rename / /
zfs rename /@ /@

Volver a un snapshot anterior:
zfs rollback /@
Esto hace volver al sistema de ficheros al snapshot pedido. Este comando solo funciona para volver al último snapshot disponible. Si se desea volver a uno más antiguo, se debe usar el parámetro -r, que eliminará los posteriores.

Crear un nuevo ZFS a partir de un snapshot (clonados):
zfs clone /@ /
(Los clones de ZFS completos no están soportados)



Referencias interesantes:
Video muy sobre como se opera sobre ZFS para crear snapshots.
http://www.youtube.com/watch?v=sRe0wyx68Rs

Niveles RAID en ZFS.
http://www.zfsbuild.com/2010/05/26/zfs-raid-levels/

Explicación de lo que es el write-hole.
http://www.raid-recovery-guide.com/raid5-write-hole.aspx

Guia de administración de ZFS.
http://docs.huihoo.com/opensolaris/solaris-zfs-administration-guide/html/index.html