zfs - hotspare, substituir, desanexar: o recurso está ocupado

4

Sou muito novo no zfsonlinux . Acabei de criar um novo servidor, com uma raiz do Debian no ZFS. Tudo está funcionando bem, mas tenho um problema com o hot spare e a substituição de discos.

Aqui está minha piscina:

NAME                            STATE     READ WRITE CKSUM
mpool                           ONLINE       0     0     0
  mirror-0                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1    ONLINE       0     0     0
  mirror-1                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXC-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1    ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1      AVAIL   
  ata-ST1XXXXXXXXXXF-part1      AVAIL  

Agora, posso começar com a verdadeira diversão. Disco puxando! Agora estou desconectando o disco C. Eu tenho um pool de trabalho, mas DEGRADED (como esperado):

NAME                            STATE     READ WRITE CKSUM
mpool                           ONLINE       0     0     0
  mirror-0                      ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1    ONLINE       0     0     0
  mirror-1                      DEGRADED     0     0     0
    ata-ST1XXXXXXXXXXC-part1    UNAVAIL      0     0     0
    ata-ST1XXXXXXXXXXD-part1    ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1      AVAIL   
  ata-ST1XXXXXXXXXXF-part1      AVAIL   

Até agora, tudo bem. Mas, quando eu tento substituir o disco C com, digamos, o disco E, estou preso a um pool DEGRADED de qualquer maneira.

# zpool replace mpool ata-ST1XXXXXXXXXXC-part1 ata-ST1XXXXXXXXXXE-part1
cannot open '/dev/disk/by-id/ata-ST1XXXXXXXXXXE-part1': Device or ressource busy
(and after a few sec)
Make sure to wait until resilver is done before rebooting.

Então, estou aguardando alguns segundos para permitir o resilvering (com 0 erros), então eu tenho:

NAME                                STATE     READ WRITE CKSUM
mpool                               ONLINE       0     0     0
  mirror-0                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1        ONLINE       0     0     0
  mirror-1                          DEGRADED     0     0     0
    spare-0                         UNAVAIL
        ata-ST1XXXXXXXXXXC-part1    UNAVAIL      0     0     0
        ata-ST1XXXXXXXXXXE-part1    ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1        ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXE-part1          INUSE       currently in use   
  ata-ST1XXXXXXXXXXF-part1          AVAIL   

Então, se eu zpool detach o disco C (como explicado aqui ), minha piscina está ficando ONLINE novamente, e tudo está funcionando bem (com uma piscina com apenas 5 HDD)

Então, aqui estão minhas perguntas:

  1. Por que a substituição do disco C não é suficiente para reconstruir um pool completo? Como explicou no blog oracle e aqui também Eu estava esperando que eu não tenha que destacar o disco para zfs para reconstruir o pool corretamente (e é muito melhor manter nos rastreamentos do zpool status do disco desconectado, por mantendo a conveniência)
  2. Por que o zpool continua me dizendo que os discos de peças sobressalentes estão "ocupados" (eles são realmente não)?
  3. Veja abaixo: como posso recuperar automaticamente meu disco reserva?

EDITAR: Ainda pior para question1 = > Quando eu conecto de volta no disco C, zfs não gerencia meu back spare! Então fico com menos um disco

NAME                                STATE     READ WRITE CKSUM
mpool                               ONLINE       0     0     0
  mirror-0                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXA-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXB-part1        ONLINE       0     0     0
  mirror-1                          ONLINE       0     0     0
    ata-ST1XXXXXXXXXXE-part1        ONLINE       0     0     0
    ata-ST1XXXXXXXXXXD-part1        ONLINE       0     0     0
spares  
  ata-ST1XXXXXXXXXXF-part1          AVAIL 
    
por 4wk_ 15.03.2017 / 18:55

1 resposta

2

Versão resumida:

Você tem que fazer o contrário: substituir o disco do pool com falha (com um novo disco ou consigo mesmo) e, depois disso, desanexar o disco sobressalente do pool (para que fique disponível para todos os vdevs). Presumo que o sobressalente esteja ocupado desde que o disco usado para substituição não seja substituído. Desanexar este disco ou outro disco só piora a situação.

Além disso, eu me lembro que o ZoL não tem anexar / desanexar automaticamente as peças de reposição, dependendo dos eventos, você tem que criar um script próprio ou usar algo como daemon de eventos do ZFS .

Versão longa:

Com relação ao seu comentário subsequente

If C disk is FAULTED, ok let's replace it then detach it. But It scew up my pool, because zpool didnt remember I used to have a C disk in the mirror-1 :/

Isso depende de como você o vê. Se você desanexar um disco de um espelho, isso não será mais relevante. Pode estar com defeito, pode ser usado em outro sistema, pode ser substituído sob garantia do fabricante. Seja o que for feito com isso, sua piscina não se importa.

Se você simplesmente desanexar o disco, ele será degradado; se você fornecer outro disco (de reposição automática, reposição manual ou substituição totalmente manual), este disco assumirá o papel do disco antigo (daí o termo replace , o novo disco substitui totalmente o disco antigo em sua posição e deveres).

Se desejar, você pode adicionar o disco desanexado de volta ao pool, por exemplo, como sobressalente (para que a situação inicial seja invertida).

Como as peças de reposição funcionam nos sistemas ZFS

As peças de reposição só fazem sentido com a ativação automática. Os arrays de armazenamento ZFS, conforme projetados pela Sun, tinham muitos discos semelhantes; as quantidades de 18 a 48 discos não eram incomuns. Eles consistiam em vários vdevs, por exemplo, 4 x RAID Z2 para um sistema de 24 discos. Além disso, eles foram gerenciados por um administrador dedicado, mas ninguém pode trabalhar 24/7. Portanto, eles precisavam de algo como primeira resposta e tinham que trabalhar em todos os vdevs, porque qualquer disco pode falhar a qualquer momento.

Portanto, se tarde da noite um disco em seu segundo vdev falhar, o sistema pegará automaticamente uma das duas peças configuradas e substituirá o disco com falha, de modo que o pool funcione normalmente (mesmo desempenho para clientes que usam um site cujo banco de dados executa, por exemplo). De manhã, o administrador lê o relatório da falha e soluciona a causa:

  • Se o disco tiver morrido, ele poderá substituí-lo por um disco de substituição na mesma bandeja, deixá-lo resilver e, em seguida, o hotspare será automaticamente retirado para o trabalho sobressalente, observando outro disco morto no qual ele possa fazer a primeira resposta. / li>
  • Se nenhum disco de substituição estiver disponível, ele pode até mesmo disponibilizar o novo disco de dados, reduzindo o número de sobressalentes temporariamente em 1 (até que outro disco de substituição seja enviado, que se tornará o novo sobressalente).
  • Se fosse apenas um erro do controlador ao descartar o disco, ele poderia até substituí-lo por si mesmo, acionando a mesma renovação de reposição que no primeiro caso.

Se você pensar sobre isso da maneira que os engenheiros projetaram para o cenário de uso antecipado mais comum, ele fará muito mais sentido. Isso não significa que você tenha que fazer exatamente como descrito, pode ser apenas uma razão para o comportamento.

Respostas às suas perguntas

Why replacing the C disk is not enough to rebuild a full pool? As explained on the oracle blog and here too I was expecting that I do not have to detach the disk for zfs to rebuild the pool properly (and it's far better to keep in the zpool status traces of the unplugged disk, for maintening convenience)

Como visto acima, você pode substituir o disco do pool por outro ou por si (o sobressalente estará livre e continuará funcionando como reserva) ou você poderá desanexar o disco do pool, enquanto o sobressalente assumirá permanentemente o papel de um pool disco e você tem que adicionar outro sobressalente à mão com zpool add poolname spare diskname (que pode ser o disco desanexado ou um novo).

Why zpool keep telling me that spares disks are "busy" (they are truly not)?

Eu suponho que foi por causa do excelente IO. Isso explicaria por que demorou um pouco para concluir a operação.

See below: how can I automatically get my spare disk back?

  • Ativar substituição sobressalente automática (padrão no Solaris / illumos, pouco incômodo no Linux)
  • Substitua o disco do conjunto com falha por zpool replace (em vez de desanexá-lo). A etapa de desanexação é necessária apenas para o disco reserva após a substituição do disco do conjunto e se você não tiver gerenciamento automático (o que não faz sentido em meus olhos, exceto para layouts de pool específicos e situações administrativas).
por 16.03.2017 / 09:42