You are on page 1of 18

ZFS

ZFS significa Zettabyte File System. Ha sido diseado para


reemplazar sistemas de gestin de almacenamiento,
caracterizados por tener ciertas limitaciones (como UFS, el
estndar en Solaris) y una gestin de discos redundante (RAID)

ZFS

En el diseo de ZFS se analizaron qu prestaciones demandaban los


administradores de sistemas en lo referente a sistemas de ficheros y gestin de
discos, obtenindose as un sistema:

Con gran capacidad (el tamao mximo de un sistema de ficheros es de 256


cuatrillones de zettabytes, lo que en la prctica 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 instantnea del
sistema que representa el sistema en un instante dado, de rpida realizacin).
Que es capaz de gestionar fcilmente los volmenes (con funciones similares al
RAID por software).

ZFS
Que simplifica mucho la gestin (tareas obligatorias en la creacin de un sistema
de ficheros, como es el formato, la creacin de la entrada en /etc/vfstab, el punto
de montaje y la accin de montado quedan ahora reducidas a un comando de
ms alto nivel).

Con facilidades adicionales para gestionar lmites (cuotas o espacio mnimo


garantizado), compresin de datos (pudiendo elegir el algoritmo), etc.
En ZFS los discos se gestionan agrupndolos en pools. Una vez creado un
pool se pueden crear sistemas de ficheros (datasets) sobre l. De este modo,
las funciones relacionadas con la gestin de volmenes se realizan sobre los
pools mientras que las relacionadas con el sistema de ficheros se realizan
sobre el dataset.

ZFS

Gestin de "pools"

Un pool es un conjunto formado por uno o ms discos (tambin pueden ser


particiones o ficheros) puesto a disposicin de ZFS para su uso en datasets.
A la hora de unir varios discos en un pool podemos hacerlo mediante
concatenacin de los mismos, o bien podemos elegir redundancia (mirror o
incluso RAID-Z, similar a RAID5).

ZFS
Creacin de pools
Con 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

ZFS
Adicin y remocin de discos a pools
Adicin de un disco a un pool existente (sin espejar)
zpool add mipool c0t1d0
Adicin de un disco para configuracin 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).
Remocin de disco espejado
zpool detach mipool c0t1d0

ZFS
Remocin 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

ZFS
Comandos de estado

Ver resmenes de pools existentes


zpool list
Ejemplo:
# zpool list
NAME
SIZE
mipool 59,5M
rpool
5,97G

USED
80,5K
3,16G

AVAIL
59,4M
2,80G

CAP
0%
53%

HEALTH ALTROOT
DEGRADED ONLINE -

ZFS
Ver estado del pool.
zpool status
Ejemplo:
# zpool
pool:
state:
status:

status
mipool
DEGRADED
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 2009
config:
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
AVAIL
errors: No known data errors
pool: rpool
state: ONLINE
scrub: none requested
config:
NAME
STATE
READ WRITE CKSUM
rpool
ONLINE
0
0
0
c7d0s0
ONLINE
0
0
0
errors: No known data errors

ZFS
Estadsticas I/O
zpool iostat
Por ejemplo:
# zpool iostat
pool
---------mipool
rpool
----------

capacity
used avail
----- ----77,5K 59,4M
3,16G 2,80G
----- -----

operations
read write
----- ----2
51
0
0
----- -----

bandwidth
read write
----- ----2,67K 49,3K
37,1K 12,0K
----- -----

ZFS
Gestin de "datasets"
Cuando creamos un pool, automticamente 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

# df -h
...
mipool
mipool/dataset2

87M
87M

19K
19K

87M
87M

1% /mipool
1% /mipool/dataset2

Sin embargo, se pueden crear ms datasets. La idea es definir nuevos datasets dentro del dataset
principal, pudiendo construir toda una jerarqua. 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:

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.

ZFS
Creacin y borrado de datasets
Creacin:
zfs create mipool/dataset2

Borrado:
zfs destroy mipool/dataset2

Creacin con punto de montaje alterno:


zfs create -o mountpoint=/mnt mipool/dataset2

Creacin con cuota.


zfs create -o quota=15M mipool/dataset2

Vemos que las operaciones con datasets simplifican mucho la gestin de sistemas de ficheros, ya que
con un solo comando, hemos creado el sistema, lo hemos formateado y lo hemos dejado montado.
Adems, este montaje es persistente (si reiniciamos la mquina volver a aparecer en su sitio).

ZFS
Cambios 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

ZFS
Estado de datasets
El comando general es zfs list. Por ejemplo:
# zfs list
NAME
mipool
mipool/dataset2

USED
15,1M
19K

AVAIL
14,9M
29,9M

REFER
19K
19K

MOUNTPOINT
/mipool
/mnt

En caso de que estemos usando quotas, reservation u otras propiedades especficas, el comando zfs list puede
invocarse para que muestre esas propiedades. Por ejemplo:
# zfs list -o name,reservation,quota,mountpoint,compression,compressratio
NAME
RESERV QUOTA MOUNTPOINT COMPRESS RATIO
mipool
none
30M /mipool
none
2.70x
mipool/dataset2
15M
none /mnt
gzip-9
2.72x

ZFS
Snapshots y clones
Un snapshot es una instantnea 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 harn sobre el principal y no sobre el snapshot. De este modo ser posible retroceder al estado anterior
mediante una accin especfica (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 instantnea, 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 instantnea y luego el clon, que s podremos modificar.
La utilidad de los snapshots es evidente: por ejemplo, para testear una aplicacin que modifica ficheros sin
temor a perder datos. Pero hay otra muy interesante: cuando Opensolaris se actualiza, guarda la
configuracin anterior del disco en una instantnea, de forma que si la actualizacin no nos agrada, es
posible volver atrs de forma muy simple.

ZFS
Si queremos hacer rollback a la primera instantnea, primero hay que hacer rollback a la instantnea ms reciente,
destruir aquella instantnea y por ltimo rollback a la primera:
zfs rollback mipool/dataset@instantanea2
zfs destroy mipool/dataset@instantanea2
zfs rollback mipool/dataset@instantanea1

Visibilidad de los snapshpots


Existe un comando especfico de zfs list para consultar los snapshots del sistema:
# zfs list -t snapshot
NAME
rpool/ROOT/opensolaris-1@install
mipool/dataset@instantanea1
mipool/dataset@instantanea2

USED
149M

AVAIL
15K
25K

REFER
2,82G
-

MOUNTPOINT
19K 19K -

Tambin es posible acceder al contenido de las instantneas, 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 -l
total 3
drwxr-xr-x 2 root root 2 2009-07-28 18:24 instantanea1
drwxr-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 opcin
especfica aplicable al dataset.

ZFS
Creacin y rollback de snapshot
Comando para crear la instantnea:
zfs snapshot mipool/dataset2@instantea1
Si una vez modificado el sistema mipool/dataset2 queremos hacer rollback al estado
reflejado en instantnea1:
zfs rollback mipool/dataset2@instantanea1
Si queremos prescindir de la instantnea, usaremos el comando destroy:
zfs destroy mipool/dataset2@instantanea1
Se pueden hacer varias instantneas, por ejemplo:
...
zfs snapshot mipool/dataset2@instantanea1
...
zfs snapshot mipool/dataset2@instantanea2
En estos casos, el rollback se podr hacer a la instantnea ms reciente, es decir:
zfs rollback mipool/dataset2@instantanea2

ZFS
Clones de un snapshot
Para crear un clon de una instantnea, haremos lo siguiente:
zfs clone mipool/ds2@instantanea1 mipool/ds21

A partir de este momento la instantnea instantanea1 es copiada y modificable en el clon mipool/ds21. En el fondo, el clon
se comporta como una copia escribible de la instantnea (es decir, la instantnea 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

Ntese que si una instantnea 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 instantnea que sirvi para crearlo. Despus, podemos borrar instantneas y sistema de
fichero original, y usar el clon como sistema que lo reemplace.
Ejemplo:
#
#
#
#

zfs
zfs
zfs
zfs

promote mipool/ds21
destroy mipool/ds2@instantanea1
destroy mipool/ds2
rename mipool/ds21 mipool/ds2

En este ejemplo, hemos promovido el clon mipool/ds21, que dependa de la instantnea 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.

You might also like