Zpool degrada ao conectar uma unidade

Zpool degrada ao conectar uma unidade

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

Infelizmente, sempre que eu conecto o SSD depois de criar o zpool ou desconecto o SSD depois de criar o pool (qualquer coisa que faça com que as letras da unidade mudem após a criação do pool) e, em seguida, reinicialize, meu pool ficará degradado como pode ser mostrado correndosudo 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 eu ter criado o pool usando as letras das unidades da seguinte forma:

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

Questões

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

Existe uma maneira melhor de criar o zpool sem usar as letras da unidade /dev/sdapara evitar esse problema no futuro? eu reparei nissoa documentação do Ubuntu afirmapara criar um zpool da mesma maneira que eu fiz.

Informação extra

  • SO: Ubuntu 16.04 Servidor 4.10
  • Zfs instalado a partir do zfsutils-linuxpacote de instalação

Responder1

Depois de obter ajuda de Dexter_Kane noFórum de técnicos 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" um array RAID ZFS existente para usar esses rótulos, o que evita que isso aconteça no futuro e até resolverá seu array degradado 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 ter certeza de que os conjuntos de dados dos pools não estão em uso. Por exemplo, não execute os comandos enquanto estiver dentro do pool e certifique-se de que eles não estejam sendo compartilhados via NFS, etc.

Após realizar a conversão, a saída de sudo zpool statusdeverá 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

Teste realizado

Fiz questão de testar isso:

  • O uso de caminhos por ID evitou que o problema acontecesse.
  • Depois de gravar alguns dados enquanto o pool estava em estado degradado, ainda consegui ler todos os arquivos após realizar a exportação/importação e sudo zpool statusnão relatei erros.

informação relacionada