Este artículo explica cómo actualizar un pool ZFS luego de migrar a una nueva versión de ZFS.

Cuando se utilizan sistemas de archivos ZFS, es común que se incluyan características y funcionalidades adicionales con cada nueva versión liberada. Una de las ventajas que ofrece ZFS es la posibilidad de actualizar un pool existente (creado con una versión de ZFS anterior) para aprovechar las nuevas características agregadas por una nueva versión, sin necesidad de crear el pool nuevamente. Esta situación sería similar a actualizar un sistema de archivos en Linux desde ext2/3 a ext4 utilizando la herramienta tune2fs, salvo que en sistemas de archivos ZFS en FreeBSD se da con mucha más frecuencia.

Supongamos que en un sistema FreeBSD se ha actualizado a una nueva versión de ZFS (la cual incluye nuevas características) y existen dos pools:

root@fbsd10:~ # zpool list
NAME       SIZE  ALLOC   FREE   FRAG  EXPANDSZ    CAP  DEDUP  HEALTH  ALTROOT
zroot     6.94G  4.46G  2.48G      -         -    64%  1.00x  ONLINE  -
zdata     49.8G  2.30G  47.5G      -         -     4%  1.07x  ONLINE  -

Ahora bien, si se consulta el estado del pool "zroot" utilizando la herramienta zpool, ésta reporta que algunas características soportadas por ZFS no están disponibles en el mismo:

root@fbsd10:~ # zpool status zroot
  pool: zroot
 state: ONLINE
status: Some supported features are not enabled on the pool. The pool can
        still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
  scan: none requested
config:

        NAME                                          STATE     READ WRITE CKSUM
        zroot                                         ONLINE       0     0     0
          gptid/08fc84c4-5f6f-11e4-a8ae-005056a37ba6  ONLINE       0     0     0

errors: No known data errors

Esto significa que son nuevas características agregadas por una versión superior de ZFS.

Para actualizar el pool, de forma que pueda aprovechar estas nuevas características, se debe utilizar el subcomando "upgrade".

Cuando se ejecuta zpool upgrade sin parámetros, lista los pools que no tienen todas las características habilitadas, formateados utilizando una versión previa de ZFS. Pero si se pasa como parámetro el nombre de un pool, este subcomando habilita todas las características soportadas en el pool dado:

root@fbsd10:~ # zpool upgrade zroot
This system supports ZFS pool feature flags.

Enabled the following features on 'zroot':
  spacemap_histogram
  enabled_txg
  hole_birth
  extensible_dataset
  embedded_data
  bookmarks
  filesystem_limits

If you boot from pool 'zroot', don't forget to update boot code.
Assuming you use GPT partitioning and da0 is your boot disk
the following command will do it:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0

Tener en cuanta que una vez realizada esta acción, el pool no será accesible desde sistemas que no soporten las nuevas características (desde sistemas con versiones previas de ZFS que no posean al menos una de las características habilitadas).

Como en este caso se trataba de un pool sobre el cual comienza el proceso de arranque (boot), es necesario actualizar el sector de inicio. Con tablas de particiones GPT, se debe ejecutar el comando indicado por la salida de zpool upgrade:

root@fbsd10:~ # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
bootcode written to da0

Finalmente, ejecutar zpool upgrade sobre el resto de los pools desactualizados:

root@fbsd10:~ # zpool upgrade zdata
This system supports ZFS pool feature flags.

Enabled the following features on 'zdata':
  spacemap_histogram
  enabled_txg
  hole_birth
  extensible_dataset
  embedded_data
  bookmarks
  filesystem_limits

Para mayor información, remitirse a la página de manual de zpool:

man zpool


Tal vez pueda interesarte


Compartí este artículo