Zpool degrada ao conectar uma unidade

0

Em um esforço para testar o impacto que a adição de um dispositivo de log do ZFS teria em um array ZFS, decidi criar um zpool e executar alguns benchmarks antes de conectar um SSD para atuar como o ZIL.

Infelizmente, sempre que eu conecto o SSD depois de ter criado o zpool ou desconecto o SSD depois de ter criado o pool (qualquer coisa que faça com que as letras da unidade sejam alteradas após o pool ter sido criado), reinicie. degradado como pode ser mostrado executando sudo zpool status

  pool: zpool1
 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://zfsonlinux.org/msg/ZFS-8000-4J
  scan: none requested
config:

    NAME                     STATE     READ WRITE CKSUM
    zpool1                   DEGRADED     0     0     0
      mirror-0               DEGRADED     0     0     0
        sda                  ONLINE       0     0     0
        1875547483567261808  UNAVAIL      0     0     0  was /dev/sdc1

Suspeito que o problema decorre do fato de que criei o pool usando as letras de drive da seguinte forma:

sudo zpool create -f zpool1 mirror /dev/sdb /dev/sdc

Perguntas

Felizmente para mim, isso é apenas um teste e não há risco de perda de dados, mas se isso acontecer em um cenário real, qual é a melhor maneira de se recuperar desse problema? Obviamente, a unidade ainda existe e está pronta para ser usada.

Existe uma maneira melhor de criar o zpool sem usar as letras de unidade como /dev/sda para evitar esse problema no futuro? Eu noto que a documentação do Ubuntu cria um zpool da mesma maneira que eu fiz.

Informações extras

  • SO: Ubuntu 16.04 Server 4.10
  • zfs instalados a partir da instalação do zfsutils-linux package
por Programster 21.10.2017 / 06:55

1 resposta

0

Depois de obter ajuda de Dexter_Kane no Fórum técnico de nível 1 , a resposta é usar /dev/disk/by-id/... caminhos ao criar os pools.

Por exemplo,

sudo zpool create zpool1 mirror \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7 \
/dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H

Convertendo e consertando pools existentes

A boa notícia é que você pode "converter" uma matriz RAID ZFS existente para usar esses rótulos, o que impede que isso aconteça no futuro e até resolverá sua matriz degradada se essa situação já tiver acontecido com você.

sudo zpool export [pool name]
sudo zpool import -d /dev/disk/by-id [pool name]

Você só precisa garantir que os conjuntos de dados dos conjuntos não estejam em uso. Por exemplo, não execute os comandos enquanto estiver dentro do pool e garanta que eles não estejam sendo compartilhados via NFS, etc.

Depois de realizar a conversão, a saída de sudo zpool status deve ser semelhante a:

  pool: zpool1
 state: ONLINE
  scan: none requested
config:

        NAME                                          STATE     READ WRITE CKSUM
        zpool1                                        ONLINE       0     0     0
          mirror-0                                    ONLINE       0     0     0
            ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N0PKS6S7  ONLINE       0     0     0
            ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N7VXZF6H  ONLINE       0     0     0

Testes realizados

Eu fiz questão de testar isso:

  • O uso de caminhos por ID impediu que o problema acontecesse.
  • Depois de gravar alguns dados enquanto o pool estava em um estado degradado, ainda consegui ler todos os arquivos após a exportação / importação, e sudo zpool status não informou erros.
por Programster 21.10.2017 / 16:01