O ZFS não deseja desanexar o disco substituído

4

Eu queria substituir um disco no meu zpool emitindo o seguinte comando:

zpool replace -o ashift=12 pool /dev/mapper/transport /dev/mapper/data2                                                                                   

O ZFS começou a funcionar e fez o resilver do pool. No processo, houve alguns erros de leitura no disco antigo e, depois de concluído, zpool status -v ficou assim:

  pool: pool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: resilvered 6,30T in 147h38m with 6929 errors on Sat Feb 11 13:31:05 2017
config:

    NAME             STATE     READ WRITE CKSUM
    pool             ONLINE       0     0 16,0K
      raidz1-0       ONLINE       0     0 32,0K
        data1        ONLINE       0     0     0
        replacing-1  ONLINE       0     0     0
          transport  ONLINE   14,5K     0     0
          data2      ONLINE       0     0     0
        data3        ONLINE       0     0     0
    logs
      data-slog      ONLINE       0     0     0
    cache
      data-cache     ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:
<list of 3 files>

Eu esperava que o disco antigo fosse desanexado do pool, mas não era. Eu tentei separar manualmente:

# zpool detach pool /dev/mapper/transport
cannot detach /dev/mapper/transport: no valid replicas

Mas quando eu exportei o pool, removi o drive antigo e importei o pool novamente, ele parece funcionar perfeitamente: ele começou a resilver novamente , mas é DEGRADED, não FAILED:

  pool: pool                      
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
    continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sat Feb 11 17:28:50 2017
    42,7G scanned out of 9,94T at 104M/s, 27h43m to go
    1,68G resilvered, 0,42% done
config:

    NAME                        STATE     READ WRITE CKSUM
    pool                        DEGRADED     0     0     9
      raidz1-0                  DEGRADED     0     0    18
        data1                   ONLINE       0     0     0
        replacing-1             DEGRADED     0     0     0
          15119075650261564517  UNAVAIL      0     0     0  was /dev/mapper/transport
          data2                 ONLINE       0     0     0  (resilvering)
        data3                   ONLINE       0     0     0  (resilvering)
    logs
      data-slog                 ONLINE       0     0     0
    cache
      data-cache                ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:
<list of 3 files>

Ainda assim, embora claramente não seja necessário para a funcionalidade completa do pool, não consigo separar a unidade antiga:

# zpool offline pool 15119075650261564517
cannot offline 15119075650261564517: no valid replicas

O que está acontecendo?

Atualização: Aparentemente, ZoL ainda não havia desistido dos dispositivos com falha. Substituindo os 3 arquivos com erros permanentes (um dos quais era um zvol, significando que eu tive que criar outro, dd conv=noerror sobre o conteúdo e destruir o antigo) e deixar o acabamento resilver finalmente remover o drive antigo.

Eu ainda estaria interessado no que ZoL estava pensando. Quero dizer, tudo o que não causou erros de leitura ou soma de verificação foi copiado para o novo dispositivo e já havia marcado os setores que causaram erros como permanentemente falhou. Então, por que se agarrar ao dispositivo antigo que a ZoL claramente não pretendia obter mais nenhuma informação?

    
por jplitza 11.02.2017 / 17:48

0 respostas