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?
Tags zfs zfsonlinux