zfs

18
ZFS ZFS significa “Zettabyte File System”. Ha sido diseñado para reemplazar sistemas de gestión de almacenamiento, caracterizados por tener ciertas limitaciones (como UFS, el estándar en Solaris) y una gestión de discos redundante (RAID)

Upload: eduardo-orozco-castro

Post on 10-Feb-2016

2 views

Category:

Documents


0 download

DESCRIPTION

Ayuda acerca de ZFS

TRANSCRIPT

Page 1: ZFS

ZFS ZFS significa “Zettabyte File System”. Ha sido diseñado para

reemplazar sistemas de gestión de almacenamiento, caracterizados por tener ciertas limitaciones (como UFS, el estándar en Solaris) y una gestión de discos redundante (RAID)

Page 2: ZFS

ZFS En el diseño de ZFS se analizaron qué prestaciones demandaban los

administradores de sistemas en lo referente a sistemas de ficheros y gestión de discos, obteniéndose así un sistema:

Con gran capacidad (el tamaño máximo de un sistema de ficheros es de 256 cuatrillones de zettabytes, lo que en la práctica lo hace “ilimitado”).

Con gran fiabilidad (la consistencia se garantiza mediante “copy-on-write”, que escribe los bloques de datos como transacciones, de forma que no es necesario un fsck).

Que es capaz de funciones nuevas como los snapshots (una “instantánea” del sistema que representa el sistema en un instante dado, de rápida realización).

Que es capaz de gestionar fácilmente los volúmenes (con funciones similares al RAID por software).

Page 3: ZFS

ZFS

Que simplifica mucho la gestión (tareas obligatorias en la creación de un sistema de ficheros, como es el formato, la creación de la entrada en /etc/vfstab, el punto de montaje y la acción de montado quedan ahora reducidas a un comando de más alto nivel).

Con facilidades adicionales para gestionar límites (cuotas o espacio mínimo garantizado), compresión de datos (pudiendo elegir el algoritmo), etc.

En ZFS los discos se gestionan agrupándolos en “pools”. Una vez creado un “pool” se pueden crear sistemas de ficheros (“datasets”) sobre él. De este modo, las funciones relacionadas con la gestión de volúmenes se realizan sobre los “pools” mientras que las relacionadas con el sistema de ficheros se realizan sobre el “dataset”.

Page 4: ZFS

ZFS Gestión de "pools"Un “pool” es un conjunto formado por uno o más discos (también pueden ser

particiones o ficheros) puesto a disposición de ZFS para su uso en “datasets”.

A la hora de unir varios discos en un “pool” podemos hacerlo mediante concatenación de los mismos, o bien podemos elegir redundancia (mirror o incluso RAID-Z, similar a RAID5).

Page 5: ZFS

ZFS

Creación de poolsCon un disco zpool create -f mipool c0t0d0

Con dos discos concatenados (equivale a RAID-0) zpool create -f mipool c0t0d0 c0t1d0

Con dos discos espejados (equivale a RAID-1) zpool create -f mipool mirror c0t0d0 c0t1d0

Con tres discos en RAID-Z (equivale a RAID-5) zpool create -f mipool raidz c0t0d0 c0t1d0 c0t2d0

Con tres discos en RAID-Z2 (equivale a RAID-5 con paridad doble) zpool create -f mipool raidz2 c0t0d0 c0t1d0 c0t2d0

RAID-1+0 zpool create -f mipool mirror c0t0d0 c0t1d0 mirror c1t0d0 c1t1d0

Dos discos espejados y un tercero como “hot spare” zpool create -f mipool mirror c0t0d0 c0t1d0 spare c1t0d0

Page 6: ZFS

ZFS

Adición y remoción de discos a poolsAdición de un disco a un pool existente (sin espejar) zpool add mipool c0t1d0

Adición de un disco para configuración de espejo zpool attach mipool c0t0d0 c0t1d0

Este comando incorpora c0t1d0 como mirror de c0t0d0. zpool attach mipool c0t0d0 c0t2d0

Este comando incorpora c0t2d0 como mirror adicional de c0t0d0 (es decir, c0t0d0 tendrá dos discos espejo).

Remoción de disco espejado zpool detach mipool c0t1d0

Page 7: ZFS

ZFSRemoción de disco sin usar (en espera “hot-spare”)

zpool remove mipool c1t0d0

Reemplazo de un disco en un mirror por otro

zpool replace mipool c0t1d0 c0t2d0

Page 8: ZFS

ZFSComandos de estado

Ver resúmenes de pools existentes

zpool list

Ejemplo: # zpool listNAME SIZE USED AVAIL CAP HEALTH ALTROOTmipool 59,5M 80,5K 59,4M 0% DEGRADED -rpool 5,97G 3,16G 2,80G 53% ONLINE -

Page 9: ZFS

ZFSVer estado del pool.

zpool status

Ejemplo:

# zpool status pool: mipool state: DEGRADEDstatus: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state.action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: resilver completed after 0h0m with 0 errors on Tue Jul 28 17:21:06 2009config: NAME STATE READ WRITE CKSUM mipool DEGRADED 0 0 0 mirror DEGRADED 0 0 0 /dev/lofi/1 ONLINE 0 0 0 /dev/lofi/2 OFFLINE 0 0 0 27,6M resilvered spares /dev/lofi/3 AVAILerrors: No known data errors pool: rpool state: ONLINE scrub: none requestedconfig: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c7d0s0 ONLINE 0 0 0errors: No known data errors

Page 10: ZFS

ZFSEstadísticas I/O zpool iostat Por ejemplo: # zpool iostat capacity operations bandwidthpool used avail read write read write---------- ----- ----- ----- ----- ----- -----mipool 77,5K 59,4M 2 51 2,67K 49,3Krpool 3,16G 2,80G 0 0 37,1K 12,0K---------- ----- ----- ----- ----- ----- -----

Page 11: ZFS

ZFSGestión de "datasets"

Cuando creamos un pool, automáticamente pasa a estar disponible como “dataset”, es decir, sistema de ficheros, teniendo por defecto el punto de montaje con el nombre del pool. Por ejemplo, cuando hacemos: Zpool create -f mipool c0t0d0

Veremos que está disponible el espacio si hacemos un df: # df -h...mipool 28M 19K 28M 1% /mipool Sin embargo, se pueden crear más datasets. La idea es definir nuevos datasets dentro del dataset principal, pudiendo construir toda una jerarquía. Por defecto, todo el espacio del pool estará igualmente disponible para todos los datasets. Esto lo vemos con el comando df si tenemos dos datasets creados sobre el pool principal:

# df -h...mipool 87M 19K 87M 1% /mipoolmipool/dataset2 87M 19K 87M 1% /mipool/dataset2

Sin embargo, para cada dataset es posible definir operaciones propias de sistemas de ficheros como establecer una cuota, reservarle una cantidad de espacio o almacenar comprimidos los datos.

Page 12: ZFS

ZFS

Creación y borrado de datasetsCreación: zfs create mipool/dataset2

Borrado: zfs destroy mipool/dataset2

Creación con punto de montaje alterno: zfs create -o mountpoint=/mnt mipool/dataset2

Creación con cuota. zfs create -o quota=15M mipool/dataset2

Vemos que las operaciones con datasets simplifican mucho la gestión de sistemas de ficheros, ya que con un solo comando, hemos creado el sistema, lo hemos “formateado” y lo hemos dejado montado. Además, este montaje es persistente (si reiniciamos la máquina volverá a aparecer en su sitio).

Page 13: ZFS

ZFSCambios en datasets

Cambio de punto de montaje. zfs set mountpoint=/mnt2 mipool/dataset2

Desmontar un dataset sin eliminarlo. zfs umount /mnt2

Volver a montar zfs set quota=15M mipool/dataset2

Cambiar la cuota. zfs set quota=15M mipool/dataset2

Quitar la cuota. zfs set quota=none mipool/dataset2

Reservar espacio del pool para el dataset. zfs set reservation=15M mipool/dataset2

Comprimir los datos de un dataset. zfs set compression=on mipool/dataset2

Page 14: ZFS

ZFS

Estado de datasets

El comando general es zfs list. Por ejemplo:

# zfs listNAME USED AVAIL REFER MOUNTPOINTmipool 15,1M 14,9M 19K /mipoolmipool/dataset2 19K 29,9M 19K /mnt

En caso de que estemos usando quotas, reservation u otras propiedades específicas, el comando zfs list puede invocarse para que muestre esas propiedades. Por ejemplo:

# zfs list -o name,reservation,quota,mountpoint,compression,compressratioNAME RESERV QUOTA MOUNTPOINT COMPRESS RATIOmipool none 30M /mipool none 2.70xmipool/dataset2 15M none /mnt gzip-9 2.72x

Page 15: ZFS

ZFS

Snapshots y clones

Un snapshot es una instantánea del sistema de ficheros, solo lectura. Cuando hacemos un snapshot, este queda almacenado, de forma que las transacciones posteriores que hagamos sobre el sistema de ficheros se harán sobre el principal y no sobre el snapshot. De este modo será posible retroceder al estado anterior mediante una acción específica (rollback).

Un clon es equivalente a una copia de un snapshot del sistema sobre la que podemos escribir.

Clones y snapshots no consumen espacio cuando son creados, ya que son copias de estado, no de datos. Cuando se empieza a modificar el sistema clonado o el origen de una instantánea, se empiezan a almacenar las diferencias, que sí consumen espacio. Si se hace un rollback, se deshacen esas diferencias y se recupera el espacio correspondiente.

Como nota adicional, los clones solo pueden ser creados a partir de snapshots existentes. Es decir, primero hacemos la instantánea y luego el clon, que sí podremos modificar.

La utilidad de los snapshots es evidente: por ejemplo, para testear una aplicación que modifica ficheros sin temor a perder datos. Pero hay otra muy interesante: cuando Opensolaris se actualiza, guarda la configuración anterior del disco en una instantánea, de forma que si la actualización no nos agrada, es posible volver atrás de forma muy simple.

Page 16: ZFS

ZFSSi queremos hacer rollback a la primera instantánea, primero hay que hacer rollback a la instantánea más reciente, destruir aquella instantánea y por último rollback a la primera: zfs rollback mipool/dataset@instantanea2zfs destroy mipool/dataset@instantanea2zfs rollback mipool/dataset@instantanea1

Visibilidad de los snapshpots

Existe un comando específico de “zfs list” para consultar los snapshots del sistema: # zfs list -t snapshotNAME USED AVAIL REFER MOUNTPOINTrpool/ROOT/opensolaris-1@install 149M - 2,82G -mipool/dataset@instantanea1 15K - 19K -mipool/dataset@instantanea2 25K - 19K - También es posible acceder al contenido de las instantáneas, como si estuviera “montada”. Para ello, consultamos el directorio oculto ”.zfs”. Por ejemplo: # zfs list...mipool/ds2 19K 29,9M 19K /mnt# cd /mnt/.zfs/snapshot# ls -ltotal 3drwxr-xr-x 2 root root 2 2009-07-28 18:24 instantanea1drwxr-xr-x 2 root root 2 2009-07-28 18:24 instantanea2

Cada uno de los subdirectorios de snapshot contiene la estructura de ficheros que se “capturó” al hacer el snapshot. Nota.- El directorio oculto .zfs siempre existe, pero no es visible para el comando ls. Sin embargo, es posible forzar su visibilidad mediante una opción específica aplicable al dataset.

Page 17: ZFS

ZFSCreación y rollback de snapshotComando para crear la instantánea: zfs snapshot mipool/dataset2@instantea1

Si una vez modificado el sistema mipool/dataset2 queremos hacer rollback al estado reflejado en instantánea1: zfs rollback mipool/dataset2@instantanea1

Si queremos prescindir de la instantánea, usaremos el comando destroy: zfs destroy mipool/dataset2@instantanea1 Se pueden hacer varias instantáneas, por ejemplo:

...

zfs snapshot mipool/dataset2@instantanea1

...

zfs snapshot mipool/dataset2@instantanea2

En estos casos, el rollback se podrá hacer a la instantánea más reciente, es decir:

zfs rollback mipool/dataset2@instantanea2

Page 18: ZFS

ZFSClones de un snapshot

Para crear un clon de una instantánea, haremos lo siguiente:

zfs clone mipool/ds2@instantanea1 mipool/ds21

A partir de este momento la instantánea instantanea1 es copiada y modificable en el clon mipool/ds21. En el fondo, el clon se comporta como una copia escribible de la instantánea (es decir, la instantánea original no es tocada), pero solo ocupan espacio los cambios que vayamos haciendo. Para destruir un clon, lo haremos como si de un dataset normal se tratase: zfs destroy mipool/ds21 Nótese que si una instantánea tiene clones, no se podrá borrar ésta hasta que se borren todos los clones. Por último, es posible “promover” un clon para que reemplace al dataset original. Es decir, con la orden promote, hacemos que el clon deje de depender de la instantánea que sirvió para crearlo. Después, podemos borrar instantáneas y sistema de fichero original, y usar el clon como sistema que lo reemplace. Ejemplo: # zfs promote mipool/ds21# zfs destroy mipool/ds2@instantanea1# zfs destroy mipool/ds2# zfs rename mipool/ds21 mipool/ds2

En este ejemplo, hemos promovido el clon mipool/ds21, que dependía de la instantánea mipool/ds2@instantanea1. Al no depender de él, podemos destruir el dataset original mipool/ds2. Por último, el antiguo clon ds21 (que ahora es dataset independiente) puede pasarse a llamarse ds2.