Actualización de características en un sistema de ficheros ZFS (20230515)
Este artículo es una continuación de Actualización de características en un sistema de ficheros ZFS (20200528). Lee primero ese texto para saber de qué estoy hablando.
Con el paso del tiempo voy actualizando ZFS y es posible activar características opcionales adicionales. Desde la actualización de 2020 hay novedades:
encryption project_quota device_removal obsolete_counts zpool_checkpoint spacemap_v2 allocation_classes resilver_defer bookmark_v2
¿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.
encryption
Cifrado ZFS nativo. Tengo más información sobre cómo funciona y sus limitaciones en Instalación manual de Kubuntu 20.04 con LUKS y ZFS.
project_quota
Además de las cuotas de usuario y de grupo, existen también cuotas de proyecto. Al activar esta configuracion ZFS revisará el ZPOOL completo para crear las tablas de datos. Este proceso puede ser largo, pesado y afectar notablemente al rendimiento. Puede llegar al caso de bloquear el sistema si usas OpenZFS 0.8.3, como era mi caso. Tuve que actualizar a OpenZFS 2.1.6 para completar la operación. Con esa versión de OpenZFS el proceso progresa a buen ritmo, cosa que con 0.8.3 era matador.
Naturalmente actualizar a OpenZFS 2.1.6 supone que puedo activar aún más características opcionales. Pero dado que ahora que los discos ya están actualizados y se han generado las tablas internas puedo volver a OpenZFS 0.8.3, quiero mantener abierta esa posibilidad durante un tiempo. Eso supone no activar, de momento, características opcionales no disponibles en OpenZFS 0.8.3.
En cualquier caso, tras ese rastreo completo para crear las tablas internas, el mantenimiento de los valores es una actividad ligera e integrada con la operación normal de ZFS.
Se puede acceder a esa información con el comandos zfs projectpace.
device_removal
Tradicionalmente ZFS permite añadir discos al ZPOOL, pero no permite retirarlos (aunque sí reemplazarlos por discos iguales o mayores). Con esta característica opcional, ZFS permite eliminar discos y reducir el espacio de almacenamiento disponible (siempre que haya sitio libre suficiente en los demás discos, claro).
El funcionamiento interno es bastante interesante. Básicamente, el disco se reemplaza por un disco virtual distribuido por el resto del ZPOOL, de forma transparente. Esto supone un pequeño impacto en el rendimiento. A medida que esos datos se sobreescriben, se van quitando de ese disco virtual (eliminando poco a poco la ya de por sí pequeña pérdida de rendimiento). Esta forma de funcionar permite mantener ciertas invariantes de ZFS, como que un bloque en un snapshot nunca se mueve ni se sobreescribe.
obsolete_counts
Esta característica opcional es una mejora de la anterior, reduciendo el consumo de memoria a medida que se van sobreescribiendo datos en el disco virtual que ha sido eliminado y, con ello, migrándose de forma transparente al resto de discos duros que forman el ZPOOL.
zpool_checkpoint
Esta característica opcional permite hacer un checkpoint del ZPOOL entero. Esto posibilita volver a una versión anterior del ZPOOL entero. Esta funcionalidad es útil para hacer pruebas y experimentos, sabiendo que se puede volver atrás aunque hagas cosas tan extremas como destruir un dataset entero.
spacemap_v2
Mejora de eficiencia y rendimiento a la hora de codificar el espacio libre y ocupado en el ZPOOL.
allocation_classes
Esta característica opcional permite marcar ciertos dispositivos del ZPOOL para que almacenen preferentemente ciertos tipos de datos. Por ejemplo, podemos configurar el ZPOOL para que los metadatos de los ficheros y/o los ficheros pequeños se almacenen en una NVMe rápida, mientras que los datos grandes en sí se almacenan en discos duros grandes y baratos (y más lentos).
resilver_defer
El resilver, en ZFS, es lo que ocurre cuando hay que resincronizar los datos cuando se añade un disco duro al ZPOOL, o un disco offline pasa a estar online, etc. En ciertas circunstancias se pueden activar varios resilver en rápida sucesión. Cuando eso ocurría antes, el resilver empezaba desde el principio. Con esta característica opcional activada, se permite que el resilver en curso se complete antes de empezar el siguiente, en vez de empezar desde el principio.
bookmark_v2
En ZFS un bookmark hace posible marcar un estado de un dataset para que sea utilizable para zfs send sin tener que mantener un snapshot explícito. Eso permite no tener que sacrificar espacio en disco, si lo único que deseamos es poder hacer zfs send incrementales.
Esta característica opcional, que mejora los bookmarks ZFS ya existentes, se necesita para ciertas funcionalidades ZFS nuevas, como el cifrado ZFS.
¿Cuál es el estado actual?
Con todo esto activado, la situación actual de mi ZPOOL es la siguiente:
root@csi:/datos# zpool get all datos NAME PROPERTY VALUE SOURCE datos size 1.81T - datos capacity 91% - datos altroot - default datos health DEGRADED - datos guid 15343083286241728158 - datos version - default datos bootfs - default datos delegation on default datos autoreplace off default datos cachefile - default datos failmode wait default datos listsnapshots on local datos autoexpand off default datos dedupditto 0 default datos dedupratio 1.00x - datos free 151G - datos allocated 1.67T - datos readonly off - datos ashift 12 local datos comment - default datos expandsize - - datos freeing 0 - datos fragmentation 40% - datos leaked 0 - datos multihost off default datos checkpoint - - datos load_guid 7970756096151051066 - datos autotrim off default 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 active 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 active local datos feature@encryption enabled local datos feature@project_quota enabled local datos feature@device_removal enabled local datos feature@obsolete_counts enabled local datos feature@zpool_checkpoint enabled local datos feature@spacemap_v2 active local datos feature@allocation_classes enabled local datos feature@resilver_defer enabled local datos feature@bookmark_v2 enabled local
Nota
El estado del ZPOOL es DEGRADED porque se trata de una configuración en espejo en la que uno de los discos está offline y almacenado de forma remota, como precaución ante errores, incendios, robos, etc. Explico los detalles en Backup doméstico seguro con Linux, cifrado y ZFS (III).