ZFS et USB 2. Resilvering et vdev failure
Par Dante le samedi 17 octobre 2009, 14:21 - Linux/BSD - Lien permanent
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.