Ubuntu atualizado, todas as unidades em um zpool marcadas como indisponíveis

8

Acabei de atualizar o Ubuntu 14.04 e tinha dois pools de ZFS no servidor. Houve um pequeno problema comigo lutando com o driver ZFS e a versão do kernel, mas isso funcionou agora. Uma piscina ficou online e montou bem. O outro não. A principal diferença entre a ferramenta é que uma era apenas um conjunto de discos (armazenamento de vídeo / música) e a outra era um conjunto de raidz (documentos, etc.)

Eu já tentei exportar e reimportar o pool, sem sucesso, tentar importar me deixa assim:

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

Os links simbólicos para aqueles /dev/disk/by-idtambém existem:

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

Inspecionando os vários /dev/sd*dispositivos listados, eles parecem ser os corretos (as 3 unidades de 1 TB que estavam em uma matriz raidz).

Eu executei zdb -lem cada unidade, despejando-o em um arquivo e executando um diff. A única diferença nos três são os campos de guia (que eu assumo que é esperado). Todos os três rótulos em cada um são basicamente idênticos e são os seguintes:

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:

Estupidamente, eu não tenho um backup recente desse pool. No entanto, o pool estava bom antes da reinicialização e o Linux vê os discos bem (eu tenho o smartctl sendo executado agora para verificar novamente)

Então, em resumo:

  • Atualizei o Ubuntu e perdi o acesso a um dos meus dois zpools.
  • A diferença entre as piscinas é aquela que surgiu no JBOD, a outra estava com medo.
  • Todas as unidades no zpool desmontável têm a marca UNAVAIL, sem anotações para dados corrompidos
  • Os conjuntos foram criados com discos referenciados /dev/disk/by-id/.
  • Os links simbólicos dos /dev/disk/by-idvários /dev/sddispositivos parecem estar corretos
  • zdb pode ler os rótulos das unidades.
  • O pool já tentou exportar / importar e não pode importar novamente.

Existe algum tipo de magia negra que posso invocar via zpool / zfs para trazer esses discos de volta para uma matriz razoável? Posso executar zpool create zraid ...sem perder meus dados? Meus dados desaparecem de qualquer maneira?

Matt Sieker
fonte

Respostas:

5

Depois de muito e mais pesquisas no Google sobre essa mensagem de erro específica, eu estava recebendo:

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

(Incluído aqui para índices de posteridade e pesquisa) Encontrei o seguinte:

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

Ele estava usando as mesmas partições e as adicionava ao mdraid durante qualquer inicialização antes do carregamento do ZFS.

Lembrei-me de ver algumas linhas mdadm dmesge com certeza:

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]

Essas unidades faziam parte de uma matriz RAID5 de software. Por alguma razão, durante a atualização, decidiu verificar novamente as unidades e descobriu que elas já faziam parte de uma matriz md e decidiu recriá-la. Isso foi verificado com:

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

Essas três unidades mostraram um monte de informações. Por enquanto, parando a matriz:

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

E executando novamente a importação:

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

trouxe a matriz de volta online.

Agora, faço um instantâneo desse pool para backup e os executo mdadm --zero-superblock.

Matt Sieker
fonte
4

O Ubuntu parece ter alguns problemas irritantes do udev que não vemos no lado do Red Hat / CentOS. Eu recomendo usar os nomes de dispositivos baseados em WWN, se puder, pois eles parecem menos suscetíveis a isso.

Você já viu: Por que a reinicialização fez com que um lado do meu espelho ZFS se tornasse INAVAIL?

ewwhite
fonte
2
Eu já os vi e, lendo o tópico vinculado em um, parece que o problema é que o udev não está criando links simbólicos para todas as partições do dispositivo. Acabei de verificar todas as três unidades. Cada um deles possui os números de partição 1 e 9, e esses possuem links simbólicos /dev/disk/by-idpara essas unidades, e todos os links simbólicos de um dispositivo apontam para a mesma /dev/sd*unidade. E a coisa mais próxima que posso encontrar de uma solução (use zpool replace), não posso fazer, pois não consigo reimportar o pool.
Matt Sieker 28/05
2

Encontrei quase esse problema exato ao tentar atualizar para os kernels da série 3.13 no Debian Wheezy. Você está certo em seu comentário; é um bug do udev. Infelizmente, nunca consegui classificá-lo, mas vale a pena explorar outros kernels, especialmente a série 3.11, para compatibilidade com a versão 0.6.2 do ZOL. Apenas use o kernel mais antigo até a versão 0.6.3.

Joshua Boniface
fonte
É bastante inaceitável que o udev se quebre dessa maneira. Eu não uso o Ubuntu, mas coisas assim fazem com que pareça realmente polido em comparação com as ofertas do RHEL.
Ewwhite 28/05