Actualización de características en un sistema de ficheros ZFS (20200528)
A medida que ZFS evoluciona, se van desplegando características opcionales. Para preservar la compatibilidad, estas características nuevas son opcionales, un ZPOOL ZFS que no las utilice será compatible con versiones previas de ZFS.
Activar características opcionales en un ZPOOL ZFS es una decisión que no debe tomarse a la ligera. Algunas sí, pero no todas las características opcionales pueden desactivarse una vez que se activan en un ZPOOL ZFS. Por tanto, la regla de oro es que solo hay que activar características cuando hayamos tomado la decisión irrevocable de no volver atrás en una versión determinada de ZFS.
En esta valoración hay que considerar también con atención los mecanismos de los que disponemos ante una fallo catastrófico del sistema operativo. Por ejemplo, ¿el entorno de recuperación que tenemos en el pendrive USB es capaz de importar un ZPOOL ZFS con esa característica activada?
El ciclo de vida de una característica opcional suele ser el siguiente:
-
Deshabilitada: La implementación ZFS soporta una característica determinada, pero no está activada en un ZPOOL ZFS dado. Esto permite importar el ZPOOL ZFS en una versión anterior de ZFS, si fuera necesario.
-
Habilitada: Hemos activado la característica opcional, pero aún no se está utilizando. Habitualmente el ZPOOL ZFS se podrá importar en una versión anterior de ZFS. Por lo general, se podrá desactivar la característica opcional y volver a dejarla como deshabilitada.
-
Activa: La característica opcional está en uso. Como regla general, el ZPOOL ZFS no se podrá importar en versiones de ZFS que no conozcan esa característica opcional. A veces es posible importar el ZPOOL ZFS en modo solo lectura, dependiendo de los detalles de funcionamiento de esa característica.
Algunas características opcionales pueden pasar de activas a habilitadas y, por tanto, se podrían deshabilitar o bien importar el ZPOOL ZFS en un versión de ZFS que no reconozca esa característica. Por ejemplo, una característica que afecte a la destrucción de un dataset puede pasar de habilitada a activa mientras se está destruyendo un dataset, pasando nuevamente a habilitada al terminar.
No obstante, como regla general, una característica que pasa a estar activa permanecerá en ese estado permanentemente. Normalmente esto se documenta en cada característica.
Vayamos al grano.
Una de mis máquinas lleva muchos meses funcionando con la misma versión del sistema operativo y de ZFS, sin ningún problema. Considero entonces que no voy a volver a una versión anterior y, por tanto, activar características opcionales parece poco arriesgado y posiblemente ventajoso.
Veamos qué nos dice el sistema operativo:
root@csi:~# zfs upgrade This system is currently running ZFS filesystem version 5. All filesystems are formatted with the current version. root@csi:~# zpool upgrade This system supports ZFS pool feature flags. All pools are formatted using feature flags. Some supported features are not enabled on the following pools. Once a feature is enabled the pool may become incompatible with software that does not support the feature. See zpool-features(5) for details. POOL FEATURE --------------- blue multi_vdev_crash_dump large_dnode sha512 skein edonr userobj_accounting datos multi_vdev_crash_dump large_dnode sha512 skein edonr userobj_accounting
Lo que vemos aquí es que todos los datasets están al día, pero el ZPOOL ZFS en sí tiene unas cuantas características opcionales desactivadas.
Activémoslas. Recuerda que este paso, en general, no tiene marcha atrás:
root@csi:~# zpool upgrade -a This system supports ZFS pool feature flags. Enabled the following features on 'blue': multi_vdev_crash_dump large_dnode sha512 skein edonr userobj_accounting Enabled the following features on 'datos': multi_vdev_crash_dump large_dnode sha512 skein edonr userobj_accounting
Hemos activado todas las características opcionales. Confirmémoslo:
root@csi:~# zpool upgrade This system supports ZFS pool feature flags. All pools are formatted using feature flags. Every feature flags pool has all supported features enabled.
Veamos las características:
root@csi:~# zpool get all datos NAME PROPERTY VALUE SOURCE [...] datos feature@async_destroy enabled local datos feature@empty_bpobj active local datos feature@lz4_compress active local datos feature@multi_vdev_crash_dump enabled local datos feature@spacemap_histogram active local datos feature@enabled_txg active local datos feature@hole_birth active local datos feature@extensible_dataset enabled local datos feature@embedded_data active local datos feature@bookmarks enabled local datos feature@filesystem_limits enabled local datos feature@large_blocks enabled local datos feature@large_dnode enabled local datos feature@sha512 enabled local datos feature@skein enabled local datos feature@edonr enabled local datos feature@userobj_accounting enabled local
¿Qué hemos activado realmente?
ZFS está bastante bien documentado. Por ejemplo, podemos ver el manual de zpool-features. También podemos ver la web oficial de OpenZFS.
multi_vdev_crash_dump
En Linux esta opción se ignora. En otros sistemas operativos, como Solaris, se utiliza para indicar que un ZPOOL ZFS se puede usar o se está usando para almacenar un volcado de memoria en caso de fallo catastrófico del sistema operativo.
large_dnode
Permite utilizar dnodes más grandes que 512 bytes, lo que puede mejorar el rendimiento con ficheros pequeños. Para empezar a utilizarlos, hay que configurar la propiedad dnodesize de un dataset. Esta característica pasará de activa a habilitada cuando se destruyan los datasets que la emplearon.
sha512
Utiliza sha512 para las sumas de control que verifican la integridad del sistema de ficheros y para el algoritmo de deduplicación. Utilizar sha512 en vez de sha256 en procesadores de 64 bits duplica el rendimiento.
skein
Se trata de otro algoritmo de hash para verificar la integridad del sistema de ficheros y para el algoritmo de deduplicación. Se trata de un algoritmo muy eficiente y con ciertas propiedades de seguridad interesantes.
edonr
Se trata de otro algoritmo de hash para verificar la integridad del sistema de ficheros y para el algoritmo de deduplicación. Este algoritmo es muy rápido (350% más rápido que sha256) y con ciertas propiedades de seguridad interesantes.
userobj_accounting
Una vez activado, ZFS llevará la cuenta del volumen de datos (número de objetos y tamaño) utilizados por usuario y por grupo.
Se puede acceder a esa información con los comandos zfs userspace y zfs groupspace. También se puede ver con zfs get, si se listan los usuarios o grupos de interés de forma explícita.
Gracias a esta contabilidad, ZFS permite fijar fácilmente cuotas por dataset, por usuario y por grupo.