Substituí um disco rígido com falha (aumentando a contagem de erros no SMART, erros de leitura/gravação/soma de verificação no zpool status
) em um pool raidz1 do ZFS por um novo executando zfs offline
e zfs replace
. A resilvering começou em breve, mas continua apresentando erros de gravação (veja abaixo). Quando esses processos de resilvering eventualmente terminassem, o pool permaneceria no estado DEGRADADO. Se eu zpool clear
ocorresse os erros ou reiniciasse, outro processo de resilvering seria iniciado automaticamente, mas fornecendo um número potencialmente diferente de erros de gravação.
SMART não mostra nenhum erro para esta nova unidade. Também tentei uma nova unidade diferente (comprei duas substitutas) e troquei os cabos SATA. É sempre esse vdev sendo substituído (por qualquer unidade), causando erros de gravação durante o resilvering. Isso me fez suspeitar que o pool do ZFS está de alguma forma comprometido, mas continua funcionando e funciona zfs send
todas as noites.
Qual é a maneira correta de solucionar esse problema (por exemplo, como zfs scrub
um pool DEGRADADO com apenas três das quatro unidades, já que zfs replace
não é possível concluir sem erros)? Eu tenho backups feitos zfs send/receive
que esperamos serem boas cópias (a soma de verificação do ZFS recebeu fluxos?).
pool: space
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 Fri Nov 3 09:56:59 2023
2.92T scanned at 594M/s, 2.63T issued at 536M/s, 5.90T total
669G resilvered, 44.59% done, 01:46:40 to go
config:
NAME STATE READ WRITE CKSUM
space DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
ata-ST3000DM001-1CH166_ZZZZ1111 ONLINE 0 0 0 block size: 512B configured, 4096B native
ata-ST3000DM001-1CH166_ZZZZ2222 ONLINE 0 0 0 block size: 512B configured, 4096B native
replacing-2 UNAVAIL 0 0 0 insufficient replicas
13284017409215481231 OFFLINE 0 0 0 was /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F12QMZ-part1
ata-ST18000NM003D-3DL103_YYYY1111 FAULTED 0 4.38K 0 too many errors (resilvering)
ata-ST3000DM001-1CH166_ZZZZ4444 ONLINE 0 0 0 block size: 512B configured, 4096B native
EDIT : Estou vendo esses erros em dmesg
:
[19561.708059] sd 2:0:1:0: [sdb] tag#226 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=31s
[19561.708063] sd 2:0:1:0: [sdb] tag#226 Sense Key : Illegal Request [current]
[19561.708067] sd 2:0:1:0: [sdb] tag#226 Add. Sense: Unaligned write command
[19561.708070] sd 2:0:1:0: [sdb] tag#226 CDB: Write(16) 8a 00 00 00 00 00 68 f4 ff 40 00 00 00 53 00 00
[19561.708073] blk_update_request: I/O error, dev sdb, sector 1760886592 op 0x1:(WRITE) flags 0x700 phys_seg 83 prio class 0
Graças a algumas dicas do reddit , este pode ser um bug de software/firmware de que a unidade Seagate Exos X20 ST18000NM003D 18TB não pode usar setores de 512B no ThinkStation S30/Ubuntu 22.04 5.15.0-88-generic. Acabei destruindo o pool e recriando-o usando setores 4K e os erros não retornaram.