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