Professional Documents
Culture Documents
ZFS
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).
ZFS
Gestin de "pools"
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
ZFS
Comandos de estado
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
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
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
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
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
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.