Ubuntu mis à niveau, tous les disques d'un zpool marqués comme indisponibles

8

Je viens de mettre à jour Ubuntu 14.04 et j'avais deux pools ZFS sur le serveur. Il y avait un problème mineur avec moi qui me battais avec le pilote ZFS et la version du noyau, mais cela a fonctionné maintenant. Un pool est entré en ligne et s'est bien monté. L'autre ne l'a pas fait. La principale différence entre l'outil est que l'un était juste un pool de disques (stockage vidéo / musique), et l'autre était un ensemble raidz (documents, etc.)

J'ai déjà tenté d'exporter et de réimporter le pool, en vain, tenter d'importer me donne ceci:

root@kyou:/home/matt# zpool import -fFX -d /dev/disk/by-id/
   pool: storage
     id: 15855792916570596778
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        storage                                      UNAVAIL  insufficient replicas
          raidz1-0                                   UNAVAIL  insufficient replicas
            ata-SAMSUNG_HD103SJ_S246J90B134910       UNAVAIL
            ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523  UNAVAIL
            ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969  UNAVAIL

Les liens symboliques pour ceux /dev/disk/by-idqui existent existent également:

root@kyou:/home/matt# ls -l /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910* /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51*
lrwxrwxrwx 1 root root  9 May 27 19:31 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910 -> ../../sdb
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part9 -> ../../sdb9
lrwxrwxrwx 1 root root  9 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523 -> ../../sdd
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part9 -> ../../sdd9
lrwxrwxrwx 1 root root  9 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969 -> ../../sde
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part1 -> ../../sde1
lrwxrwxrwx 1 root root 10 May 27 19:15 /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part9 -> ../../sde9

En inspectant les différents /dev/sd*périphériques répertoriés, ils semblent être les bons (les 3 disques de 1 To qui se trouvaient dans une matrice raidz).

J'ai exécuté zdb -lsur chaque lecteur, en le vidant dans un fichier et en exécutant un diff. La seule différence sur les 3 sont les champs guid (qui, je suppose, sont attendus). Les 3 étiquettes de chacune sont fondamentalement identiques et sont les suivantes:

version: 5000
name: 'storage'
state: 0
txg: 4
pool_guid: 15855792916570596778
hostname: 'kyou'
top_guid: 1683909657511667860
guid: 8815283814047599968
vdev_children: 1
vdev_tree:
    type: 'raidz'
    id: 0
    guid: 1683909657511667860
    nparity: 1
    metaslab_array: 33
    metaslab_shift: 34
    ashift: 9
    asize: 3000569954304
    is_log: 0
    create_txg: 4
    children[0]:
        type: 'disk'
        id: 0
        guid: 8815283814047599968
        path: '/dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910-part1'
        whole_disk: 1
        create_txg: 4
    children[1]:
        type: 'disk'
        id: 1
        guid: 18036424618735999728
        path: '/dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523-part1'
        whole_disk: 1
        create_txg: 4
    children[2]:
        type: 'disk'
        id: 2
        guid: 10307555127976192266
        path: '/dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969-part1'
        whole_disk: 1
        create_txg: 4
features_for_read:

Bêtement, je n'ai pas de sauvegarde récente de ce pool. Cependant, le pool était bien avant le redémarrage, et Linux voit les disques bien (j'ai smartctl en cours d'exécution pour vérifier à nouveau)

Donc, en résumé:

  • J'ai mis à jour Ubuntu et perdu l'accès à l'un de mes deux zpools.
  • La différence entre les piscines est celle qui est apparue était JBOD, l'autre était zraid.
  • Tous les disques du zpool non montable sont marqués INDISPONIBLE, sans notes pour les données corrompues
  • Les pools ont tous deux été créés avec des disques référencés à partir de /dev/disk/by-id/.
  • Les liens symboliques de /dev/disk/by-idvers les différents /dev/sdappareils semblent être corrects
  • zdb peut lire les étiquettes des lecteurs.
  • Le pool a déjà été tenté d'être exporté / importé et ne peut pas réimporter.

Existe-t-il une sorte de magie noire que je peux invoquer via zpool / zfs pour ramener ces disques dans un tableau raisonnable? Puis-je courir zpool create zraid ...sans perdre mes données? Mes données ont-elles disparu de toute façon?

Matt Sieker
la source

Réponses:

5

Après beaucoup, beaucoup plus sur Google sur ce message d'erreur spécifique que je recevais:

root@kyou:/home/matt# zpool import -f storage
cannot import 'storage': one or more devices are already in use

(Inclus ici pour la postérité et les index de recherche) J'ai trouvé ceci:

https://groups.google.com/a/zfsonlinux.org/forum/#!topic/zfs-discuss/VVEwd1VFDmc

Il utilisait les mêmes partitions et les ajoutait à mdraid lors de n'importe quel démarrage avant le chargement de ZFS.

Je me suis souvenu d'avoir vu quelques lignes mdadm dmesget bien sûr:

root@kyou:/home/matt# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md126 : active raid5 sdd[2] sdb[0] sde[1]
      1953524992 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

Ces disques faisaient autrefois partie d'un ensemble RAID logiciel5. Pour une raison quelconque, lors de la mise à niveau, il a décidé de réanalyser les disques, et a constaté que les disques faisaient autrefois partie d'une matrice md, et a décidé de le recréer. Cela a été vérifié avec:

root@kyou:/storage# mdadm --examine /dev/sd[a-z]

Ces trois disques ont montré un tas d'informations. Pour l'instant, arrêt du tableau:

root@kyou:/home/matt# mdadm --stop /dev/md126
mdadm: stopped /dev/md126

Et relancez l'importation:

root@kyou:/home/matt# zpool import -f storage

a remis le réseau en ligne.

Maintenant, je fais un instantané de ce pool pour la sauvegarde et je l'exécute mdadm --zero-superblock.

Matt Sieker
la source
4

Ubuntu semble avoir des problèmes udev ennuyeux que nous ne voyons pas du côté de Red Hat / CentOS. Je vous recommande d'utiliser les noms d'appareils basés sur WWN si vous le pouvez, car ils semblent moins sensibles à cela.

Avez-vous vu: Pourquoi le redémarrage a-t-il rendu UN côté de mon miroir ZFS UNAVAIL?

ewwhite
la source
2
J'ai vu ceux-ci, et en lisant le fil lié en un, il semble que le problème n'est pas que udev ne crée pas de liens symboliques pour toutes les partitions sur l'appareil. Je viens de vérifier les trois disques. Ils ont chacun des numéros de partition 1 et 9, et ceux-ci ont des liens symboliques /dev/disk/by-idpour ces lecteurs, et tous les liens symboliques pour un périphérique pointent vers le même /dev/sd*lecteur. Et la chose la plus proche que je peux trouver à une solution (utilisez zpool replace), je ne peux pas le faire car je ne peux pas réimporter le pool.
Matt Sieker
2

J'ai rencontré presque ce problème exact en essayant de passer aux noyaux de la série 3.13 sur Debian Wheezy. Vous avez raison dans votre commentaire; c'est un bug udev. Je n'ai jamais réussi à le trier malheureusement, mais cela vaut la peine d'explorer d'autres noyaux, en particulier la série 3.11, pour la compatibilité avec la version 0.6.2 de ZOL. Utilisez simplement l'ancien noyau jusqu'à la sortie de la version 0.6.3.

Joshua Boniface
la source
Il est assez inacceptable que udev se casse de cette manière. Je n'utilise pas Ubuntu, mais des choses comme celle-ci donnent l'impression d'être vraiment non polies par rapport aux offres RHEL.
ewwhite