Que faire à propos d’un pool ZFS corrompu

Exécutez une instance de test d’un NAS utilisant un système ZFS, comme indiqué dans la section Restauration d’un serveur Ubuntu à l’aide de ZFS RAIDZ pour les données .

Cette semaine, un de mes disques est mort. Cela ne devrait pas être un problème, faut-il (les avantages du RAID étant la résilience ainsi que les performances)?

Sauf que mon pool ZFS a été corrompu, comme dans:

andy@ubuntu:~$ sudo zpool status -v pool: tank state: UNAVAIL status: One or more devices could not be used because the label is missing or invalid. There are insufficient replicas for the pool to continue functioning. action: Destroy and re-create the pool from a backup source. see: http://www.sun.com/msg/ZFS-8000-5E scan: none requested config: NAME STATE READ WRITE CKSUM tank UNAVAIL 0 0 0 insufficient replicas raidz1-0 UNAVAIL 0 0 0 insufficient replicas sdb FAULTED 0 0 0 corrupted data sdc FAULTED 0 0 0 corrupted data sdd UNAVAIL 0 0 0 

Heureusement, il s’agit d’une instance de test et je peux donc tout recommencer facilement. Mais que se passe-t-il si ce pool contient des données importantes? Quelle serait la bonne étape à suivre pour récupérer les données et restaurer mon NAS en état de fonctionnement? Ou bien ZFS essaie-t-il automatiquement toutes les approches de restauration possibles, de telle sorte que les données soient maintenant grillées?

Il semble que votre pool ne soit peut-être pas corrompu. Cependant, à la sortie, il semble que plusieurs périphériques soient en difficulté. Je suppose que plusieurs disques peuvent être dans un état douteux, d’où l’état défaillant sur sdb et sdc. Déterminez ce qui ne va pas avec eux et votre groupe peut vous prouver le contraire. Cela ne ressemble pas à un état fatal de piscine.

Armé de la perspicacité de @slashdot, j’ai pour la plupart résolu mon problème, mais je ne sais pas vraiment ce que j’ai fait. S’il vous plaît examiner la piste suivante et m’éclairer.

En particulier lesquelles des hypothèses suivantes sont vraies et que me manque-t-il?

  1. Ni zdb -u tank ni zdb -dcsv tank n’ont fait d’utile.
  2. Le deuxième zpool import -f tank fonctionnait alors que le premier ne fonctionnait pas, car le délai de zpool export tank était suffisamment long pour permettre à ZFS de se réparer lui-même.
  3. Tout cet épisode avait quelque chose à voir avec les étiquettes qui se changeaient après l’un des disques qui ont échoué (pensez que c’est sdb qui a causé sdc> sdb & sdd> sdb)

BÛCHE

 andy@ubuntu:~$ zpool status andy@ubuntu:~$ sudo zpool status pool: tank state: UNAVAIL status: One or more devices could not be used because the label is missing or invalid. There are insufficient replicas for the pool to continue functioning. action: Destroy and re-create the pool from a backup source. see: http://www.sun.com/msg/ZFS-8000-5E scan: none requested config: NAME STATE READ WRITE CKSUM tank UNAVAIL 0 0 0 insufficient replicas raidz1-0 UNAVAIL 0 0 0 insufficient replicas sdb FAULTED 0 0 0 corrupted data sdc FAULTED 0 0 0 corrupted data sdd UNAVAIL 0 0 0 andy@ubuntu:~$ sudo zdb -u tank zdb: can't open 'tank': No such device or address andy@ubuntu:~$ sudo zpool scrub tank cannot scrub 'tank': pool is currently unavailable andy@ubuntu:~$ sudo zdb -bcsv tank zdb: can't open 'tank': No such device or address andy@ubuntu:~$ sudo zpool export tank andy@ubuntu:~$ sudo zpool import tank cannot import 'tank': pool may be in use from other system use '-f' to import anyway andy@ubuntu:~$ sudo zpool import -f tank cannot import 'tank': one or more devices is currently unavailable andy@ubuntu:~$ sudo zpool status no pools available andy@ubuntu:~$ sudo zpool status -x no pools available andy@ubuntu:~$ sudo zpool import pool: tank id: 9117894036185671023 state: UNAVAIL status: One or more devices contains corrupted data. action: The pool cannot be imported due to damaged devices or data. see: http://www.sun.com/msg/ZFS-8000-5E config: tank UNAVAIL insufficient replicas raidz1-0 UNAVAIL insufficient replicas sdb FAULTED corrupted data sdb UNAVAIL sdc ONLINE andy@ubuntu:~$ sudo zpool import tank cannot import 'tank': pool may be in use from other system use '-f' to import anyway andy@ubuntu:~$ sudo zpool import -f tank andy@ubuntu:~$ sudo zpool status pool: tank state: DEGRADED status: One or more devices could not be used because the label is missing or invalid. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the device using 'zpool replace'. see: http://www.sun.com/msg/ZFS-8000-4J scan: scrub repaired 0 in 0h13m with 0 errors on Mon Nov 21 09:22:11 2011 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 10820373921989571629 UNAVAIL 0 0 0 was /dev/sdb1 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 errors: No known data errors andy@ubuntu:~$ 

Pouvez-vous juste mélanger des disques?

Une fois que j’ai mélangé les disques, zpool a déclaré que “les disques contiennent des données corrompues”. Après avoir connecté des disques dans la séquence précédente, il a commencé à fonctionner.

Peut-être qu’une fois que vous avez importé le réservoir, zpool a reconnu la bonne séquence.

Je pense que les affiches précédentes ont mis en évidence le problème. La cause probable était due à la façon dont vous avez spécifié les disques.

Mon expérience est avec ZFS sur Ubuntu. Bien que j’utilise également ZFS sur freenas, je n’ai jamais eu à me plonger dans l’implémentation de bsd.

Bien sûr, pour Ubuntu, il est vivement recommandé de spécifier vos périphériques par identifiant plutôt que par descripteur: c’est-à-dire / dev / disk / by-id / scsi-chaîne SATA longue identifiant de manière unique le disque physique plutôt que / dev / sda.

L’utilisation du périphérique by-id supprime toute dépendance vis-à-vis du port SATA spécifique auquel le disque est connecté.

Gareth