web-dev-qa-db-fra.com

Que faire à propos d'un pool ZFS corrompu

Exécutez une instance de test d'un NAS en utilisant un système ZFS, comme indiqué dans la section Restauration d'un serveur Ubuntu en utilisant 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 prochaine étape appropriée pour récupérer les données et restaurer mon NAS en état de marche? Ou bien ZFS essaie-t-il automatiquement toutes les approches de restauration possibles, de telle sorte que les données soient maintenant grillées?

5
andybjackson

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 la piscine.

1
slashdot

Armé de la perspicacité de @slashdot, j'ai principalement 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 rien fait d’utile.
  2. Le second zpool import -f tank fonctionnait alors que le premier ne fonctionnait pas, car il s'était écoulé suffisamment de temps depuis le zpool export tank pour que ZFS puisse se réparer lui-même.
  3. Tout cet épisode avait quelque chose à voir avec les étiquettes se changeant après l’un des disques échoués (pensez que c’est sdb qui a causé sdc> sdb & sdd> sdb).

LOG

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:~$
3
andybjackson

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 en fonction de leur identifiant plutôt que de leur descripteur: c'est-à-dire/dev/disk/by-id/scsi-SATA-long, qui identifie 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

1
Gareth

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é les 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.

1
BBK