Problema activando una característica opcional de ZFS y actualización urgente del módulo ZFS de este servidor Linux

Nota

Estas son notas rápidas durante la investigación y solución de un problema, no un artículo depurado y organizado.

He activado algunas características opcionales de uno de mis servidores con OpenZFS (una máquina con Linux) y me encuentro que la actividad del disco duro es muy baja y me salen errores de este estilo en dmesg:

[19937.978681] INFO: task z_upgrade:720856 blocked for more than 483 seconds.
[19938.004576]       Tainted: P           O      5.4.0-181-generic #201-Ubuntu
[19938.030512] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[19938.081727] z_upgrade       D    0 720856      2 0x80004000
[19938.081730] Call Trace:
[19938.081739]  __schedule+0x2e3/0x740
[19938.081744]  ? __wake_up_common_lock+0x8a/0xc0
[19938.081746]  schedule+0x42/0xb0
[19938.081747]  io_schedule+0x16/0x40
[19938.081757]  cv_wait_common+0xdc/0x180 [spl]
[19938.081759]  ? __wake_up_pollfree+0x40/0x40
[19938.081763]  __cv_wait_io+0x18/0x20 [spl]
[19938.081845]  txg_wait_synced_impl+0xd7/0x120 [zfs]
[19938.081903]  txg_wait_synced+0x10/0x40 [zfs]
[19938.081945]  dmu_objset_id_quota_upgrade_cb+0xba/0x170 [zfs]
[19938.081986]  dmu_objset_upgrade_task_cb+0xdf/0x100 [zfs]
[19938.081992]  taskq_thread+0x245/0x430 [spl]
[19938.081994]  ? wake_up_q+0xa0/0xa0
[19938.081998]  kthread+0x104/0x140
[19938.082003]  ? task_done+0x90/0x90 [spl]
[19938.082005]  ? kthread_park+0x90/0x90
[19938.082007]  ret_from_fork+0x35/0x40

Un top muestra una carga muy elevada en arc_prune, 99.4 de sys time.

El smartctl o leer el disco duro entero con ddrescue, no muestran ningún error. Esto parece un bug de OpenZFS.

Si importo el zpool en read only, funciona. Esto me permitiría recuperar los datos en caso necesario. No estoy en situación catastrófica aún, aunque no puedo hacer más copias de seguridad en este disco duro [1].

[1] Este servidor Linux es mi servidor de copias de seguridad. Si se perdiese ese zpool, se perdería la copia de los datos, no los datos originales. Además, ese zpool es un espejo y su otra mitad está desconectada y en otro domicilio, como procedimiento de seguridad. A las malas, tendría esa mitad actualizada hasta unas semanas antes.

Intento compilar OpenZFS 2.2.4, pero falla en construir los paquetes Debian.

Pruebo con OpenZFS 2.1.12. Toco configure para que use el Python3.8 del sistema operativo en vez del moderno 3.12.

Opto por usar el repositorio https://launchpad.net/~jonathonf/+archive/ubuntu/zfs?field.series_filter=focal , que me instalará OpenZFS 2.1.6.

Con esta versión, la cosa tiene buena pinta. Al importar el zpool, se empieza a actualizar, pero es un proceso que no se va de madre. Supongo que la actualización costosa es debido a la activación de project_quota.

La cuestión es no hacer más upgrades con esta versión de OpenZFS, de momento, para poder volver atrás si es necesario.