Comme indiqué dans mon billet précédent, je possède des disques durs USBs utilisés dans un zpool[1].

Il peut arriver qu'on ai des erreurs ZFS: vdev I/O failure lors du resilvering d'un disque entier. Et ce, au remplacement d'un disque dur USB ou à celui d'un disque SATA en couple avec un disque dur USB.

Cela a pour conséquences le freeze du zpool et des utilitaires zfs, et aussi de la led du boitier USB dans mon cas (elle reste rouge en mode "activité"). La manière la plus simple de débloquer la situation est de rebooter le boitier USB. Une fois le disque dur redémarré, le resilvering reprend depuis le début... et on se retrouve ainsi coincé dans une boucle sans fin.

Pour éviter ce genre de problème, on peut modifier la propriété failmode du zpool concerné. Pour cela, on l'export puis l'import en modifiant la propriété de la façon suivante :

zpool export tank
zpool import -o failmode=continue tank

Par défaut[2], le mode est wait. Ce qui fait que lors d'une erreur I/O, le système attend que l'utilisateur rebranche ou remplace le disque concerné et effectue un zpool replace/clear. Or dans notre cas, il s'agit d'une erreur ponctuelle causée par le boitier USB ou le driver umass.

Une fois le resilvering complété, vous pouvez exporter puis importer le zpool sans options pour repasser en failmode wait. Si jamais vous avez régulièrement ce genre d'erreurs, vous pouvez laisser votre zpool en failmode continue mais cela peut cacher l'apparition d'un vrai problème matériel.

Notes

[1] Je déconseille ce genre d'utilisation, préférez acquérir une carte pci-e e-sata avec les boitiers qui vont bien par exemple.

[2] Sous FreeBSD-7.2