Recuperando um pool ZFS
Recentemente perdi meu servidor principal de casa. Os discos do pool zroot estavam ruins, e quando fui trocar um, puf, a máquina parou de dar boot. Retornar os discos anteriores não dava muito resultado, já que a máquina ficava trava em erros de discos. Acho que consegui uma falha em ambos os discos do pool zroot, parabéns para mim.
Esperançoso que o pool onde realmente estão os dados estava intacto, comecei a tarefa de tentar recuperar tudo. Felizmente, dada situações pregressas, eu tinha pelo menos alguma idéia de quais os discos realmente estavam envolvidos no pool que queria recuperar.
Desde o meu post anterior sobre zfs, comecei a usar a boa prática de adicionar os discos pelo seu número serial, conforme estão em /dev/disk/by-uuid
em vez de usar os clássicos /dev/sdX
ou coisa assim, que as vezes mudam a qual disco se referem. Pelo menos comigo, aconteceu mais de uma vez.
Enfim, após reinstalar o sistema em um disco a parte (resolvi por enquanto abandonar a idéia de ter o root em zfs) começa o trabalho de descobrir quais discos fazem parte do pool e remonta-lo
Após preparar o novo sistema para o zfs e adicionar alguns discos do pool antigo, um simples zpool import
começou a me encher de esperança
pool: dados
id: 1176411848024315794
state: DEGRADED
status: The pool was last accessed by another system.
action: The pool can be imported despite missing or damaged devices. The
fault tolerance of the pool may be compromised if imported.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
config:
dados DEGRADED
raidz1-0 DEGRADED
ata-ST32000644NS_9WM7LQT3 ONLINE
ata-ST32000644NS_9WM7N07E UNAVAIL
wwn-0x5000cca224c5ea5c ONLINE
Otimo, o pool estava lá. Com um disco a menos, mas estava lá. A partir daí, um zpool import dados -f
fez o trabalho de deixar o pool disponível.
agora, para substituição do disco ausente, coloquei o pool offline com zpool offline dados ata-ST32000644NS_9WM7N07E
e depois um zpool replace dados ata-ST32000644NS_9WM7N07E /dev/disk/by-id/ata-ST32000644NS_9WM7KY7S
como sempre, tomando cuidado para usar o /dev/by-id
para evitar que os discos se movimentem para um outro /dev/sdX em alguma manipulação futura dos cabos.
dessa forma, só bastou fazer um zfs mount -a
e pronto, os datasets estavam montados e disponíveis.
Agora é configurar snapshots e backups para não precisar contar com a sorte no próximo incidente :)